<?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>114028</bug_id>
          
          <creation_ts>2013-04-05 05:58:16 -0700</creation_ts>
          <short_desc>Remove WTF_USE_GOOGLEURL-guarded code</short_desc>
          <delta_ts>2013-04-05 13:07:42 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mifenton</cc>
    
    <cc>rniwa</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>869722</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-04-05 05:58:16 -0700</bug_when>
    <thetext>Remove WTF_USE_GOOGLEURL-guarded code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869724</commentid>
    <comment_count>1</comment_count>
      <attachid>196621</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-04-05 06:01:22 -0700</bug_when>
    <thetext>Created attachment 196621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869746</commentid>
    <comment_count>2</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2013-04-05 07:00:18 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=196621) [details]
&gt; Patch

The BlackBerry part of the change looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869895</commentid>
    <comment_count>3</comment_count>
      <attachid>196621</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-05 11:17:13 -0700</bug_when>
    <thetext>Comment on attachment 196621
Patch

Clearing flags on attachment: 196621

Committed r147766: &lt;http://trac.webkit.org/changeset/147766&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869896</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-05 11:17:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870026</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-05 13:07:42 -0700</bug_when>
    <thetext>Nice.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196621</attachid>
            <date>2013-04-05 06:01:22 -0700</date>
            <delta_ts>2013-04-05 11:17:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114028-20130405150109.patch</filename>
            <type>text/plain</type>
            <size>47555</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3NzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjMyNzU4MzRiODcxN2Uw
ODFhODc3OTUyYThlOGZmNGMxOGI0M2E5ZS4uZTUxNTZhNTY3ZWUyZmNiYzAxZWQzMTk5ZTMwMGFk
NzcxNTM1NTc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEzLTA0LTA1ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBSZW1vdmUgV1RGX1VT
RV9HT09HTEVVUkwtZ3VhcmRlZCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTQwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGUgb25seSByZW1haW5pbmcgdXNhZ2Ugb2YgdGhlIFVTRShHT09H
TEVVUkwpIGd1YXJkcyBpcyBpbiBMaW5rSGFzaENocm9taXVtLmNwcCB0aGF0IHdpbGwKKyAgICAg
ICAgZ2V0IHJlbW92ZWQgd2hlbiBwdXJnaW5nIHRoZSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bSBkaXJlY3RvcnkuCisKKyAgICAgICAgKiBjb25maWcuaDogUmVtb3ZlIHRoZSBkZWZp
bmUgdGhhdCB3YXMgQ2hyb21pdW0tc3BlY2lmaWMuCisgICAgICAgICogcGxhdGZvcm0vS1VSTC5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnJlcG9ydE1l
bW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmlzU2FmZVRvU2VuZFRvQW5vdGhl
clRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5oOgorICAgICAgICAoS1VSTCk6Cisg
ICAgICAgICogcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vS1VSTEdvb2dsZVByaXZhdGUuaDogUmVtb3ZlZC4KKwogMjAxMy0wNC0wNSAgU2Vva2p1
IEt3b24gIDxzZW9ranUua3dvbkBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
Y3Jhc2ggaW4gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZCBhZnRlciByMTQ3
NTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwppbmRleCBmZDdjZTBmOGYzZjBkMjE1MTYz
MjQ4YjNiNmNkYjU4ZGVkZmJlYzg3Li5iMDliODgzMDJlMGM0NTcwNDZjMDQxYzIyYTE1ODFmY2Ix
MjY2ZDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAxMy0wNC0wNSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlIFdURl9VU0VfR09PR0xFVVJMLWd1YXJkZWQgY29kZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0MDI4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9BYm91dERh
dGFVc2VGZWF0dXJlcy5pbjogUmVtb3ZlIEdPT0dMRVVSTCBmcm9tIHRoZSBsaXN0LgorCiAyMDEz
LTA0LTA1ICBBbGJlcnRvIEdhcmNpYSAgPGFnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
QmxhY2tCZXJyeV0gV2ViT3ZlcmxheVByaXZhdGU6IHJlbW92ZSBzaG93RGVidWdCb3JkZXJzKCkg
YW5kIHNob3dSZXBhaW50Q291bnRlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb25m
aWcuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbmZpZy5oCmluZGV4IGEyYzk0YTAwMTAwNDJkYzk3Y2My
ZDk3Nzk4OWQ5ZWIxMDllMjk5NTguLmNhMzFmODg3YTg3MGMyNjEzMWZmZTI2NDY4MTRiYmRlMzIy
YzNmMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbmZpZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NvbmZpZy5oCkBAIC0xMjcsOCArMTI3LDYgQEAKIC8vIHRoaXMgZGVmaW5lIGlzIHJl
cXVpcmVkLgogI2RlZmluZSBXVEZfQ0hBTkdFUyAxCiAKLSNkZWZpbmUgV1RGX1VTRV9HT09HTEVV
UkwgMQotCiAjZW5kaWYgLyogUExBVEZPUk0oQ0hST01JVU0pICovCiAKICNpZiBVU0UoQ0cpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0tVUkwuY3BwCmluZGV4IDVkYzZjZWYzZTliOTY0ZmFhYzk4ZDdlNjZlYTlh
MmRlM2ViYzFkMmIuLjc0YTc2NmUwN2ZiMThmMmM3NzFiZDQxNmI0NTE5NTVjMDg0NzRlYTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCkBAIC02NSw4ICs2NSw2IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKFVDaGFyIGNoYXJhY3RlciwgY2hhciBsb3dl
cmNhc2VMZXR0CiAgICAgcmV0dXJuIChjaGFyYWN0ZXIgfCAweDIwKSA9PSBsb3dlcmNhc2VMZXR0
ZXI7CiB9CiAKLSNpZiAhVVNFKEdPT0dMRVVSTCkKLQogc3RhdGljIGNvbnN0IGNoYXIgd3NTY2hl
bWVbXSA9IHsndycsICdzJ307CiBzdGF0aWMgY29uc3QgY2hhciBmdHBTY2hlbWVbXSA9IHsnZics
ICd0JywgJ3AnfTsKIHN0YXRpYyBjb25zdCBjaGFyIGZ0cFBvcnRbXSA9IHsnMicsICcxJ307CkBA
IC0xNzE2LDggKzE3MTQsNiBAQCB2b2lkIEtVUkw6OnByaW50KCkgY29uc3QKIH0KICNlbmRpZgog
Ci0jZW5kaWYgLy8gIVVTRShHT09HTEVVUkwpCi0KIFN0cmluZyBLVVJMOjpzdHJpcHBlZEZvclVz
ZUFzUmVmZXJyZXIoKSBjb25zdAogewogICAgIEtVUkwgcmVmZXJyZXIoKnRoaXMpOwpAQCAtMTkw
MywyMCArMTg5OSwxMiBAQCBTdHJpbmcgbWltZVR5cGVGcm9tVVJMKGNvbnN0IEtVUkwmIHVybCkK
IHZvaWQgS1VSTDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJ
bmZvLCB0aGlzKTsKLSNpZiBVU0UoR09PR0xFVVJMKQotICAgIGluZm8uYWRkTWVtYmVyKG1fdXJs
LCAidXJsIik7Ci0jZWxzZSAvLyAhVVNFKEdPT0dMRVVSTCkKICAgICBpbmZvLmFkZE1lbWJlciht
X3N0cmluZywgInN0cmluZyIpOwotI2VuZGlmCiB9CiAKIGJvb2wgS1VSTDo6aXNTYWZlVG9TZW5k
VG9Bbm90aGVyVGhyZWFkKCkgY29uc3QKIHsKLSNpZiBVU0UoR09PR0xFVVJMKQotICAgIHJldHVy
biBtX3VybC5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKTsKLSNlbHNlIC8vICFVU0UoR09P
R0xFVVJMKQogICAgIHJldHVybiBtX3N0cmluZy5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQo
KTsKLSNlbmRpZgogfQogCiBTdHJpbmcgS1VSTDo6ZWxpZGVkU3RyaW5nKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tVUkwuaAppbmRleCBiNjU1YzM5NzI4NzlhMjAxZDEwZGZkM2EwMGE5MGUzOWRiNGJj
Nzc3Li5hYThmNzA1NGNhMzZkOWYwZmVhYmQwYjYzYWI1MzcyNDhmY2UyMTI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vS1VSTC5oCkBAIC00NCwxMCArNDQsNiBAQCBjbGFzcyBRVXJsOwogUVRfRU5EX05BTUVT
UEFDRQogI2VuZGlmCiAKLSNpZiBVU0UoR09PR0xFVVJMKQotI2luY2x1ZGUgIktVUkxHb29nbGVQ
cml2YXRlLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0RW5j
b2Rpbmc7CkBAIC02NCwxMSArNjAsNyBAQCBwdWJsaWM6CiAgICAgLy8gS1VSTCBvYmplY3QsIG9y
IGluZGlzY2VybmlibGUgZnJvbSBzdWNoLgogICAgIC8vIEl0IGlzIHVzdWFsbHkgYmVzdCB0byBh
dm9pZCByZXBlYXRlZGx5IHBhcnNpbmcgYSBzdHJpbmcsIHVubGVzcyBtZW1vcnkgc2F2aW5nIG91
dHdlaWdoIHRoZSBwb3NzaWJsZSBzbG93LWRvd25zLgogICAgIEtVUkwoUGFyc2VkVVJMU3RyaW5n
VGFnLCBjb25zdCBTdHJpbmcmKTsKLSNpZiBVU0UoR09PR0xFVVJMKQotICAgIGV4cGxpY2l0IEtV
UkwoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fdXJsKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlKSB7IH0KLSNlbHNlCiAgICAgZXhwbGljaXQgS1VSTChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9zdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUp
IHsgfQotI2VuZGlmCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIHN0cmluZygpLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KIAogICAgIC8vIFJl
c29sdmVzIHRoZSByZWxhdGl2ZSBVUkwgd2l0aCB0aGUgZ2l2ZW4gYmFzZSBVUkwuIElmIHByb3Zp
ZGVkLCB0aGUKQEAgLTgxLDEzICs3Myw2IEBAIHB1YmxpYzoKICAgICBLVVJMKGNvbnN0IEtVUkwm
IGJhc2UsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUpOwogICAgIEtVUkwoY29uc3QgS1VSTCYgYmFz
ZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwgY29uc3QgVGV4dEVuY29kaW5nJik7CiAKLSNpZiBV
U0UoR09PR0xFVVJMKQotICAgIC8vIEZvciBjb252ZXJzaW9ucyBmcm9tIG90aGVyIHN0cnVjdHVy
ZXMgdGhhdCBoYXZlIGFscmVhZHkgcGFyc2VkIGFuZAotICAgIC8vIGNhbm9uaWNhbGl6ZWQgdGhl
IFVSTC4gVGhlIGlucHV0IG11c3QgYmUgZXhhY3RseSB3aGF0IEtVUkwgd291bGQgaGF2ZQotICAg
IC8vIGRvbmUgd2l0aCB0aGUgc2FtZSBpbnB1dC4KLSAgICBLVVJMKGNvbnN0IENTdHJpbmcmIGNh
bm9uaWNhbFNwZWMsIGNvbnN0IHVybF9wYXJzZTo6UGFyc2VkJiwgYm9vbCBpc1ZhbGlkKTsKLSNl
bmRpZgotCiAgICAgU3RyaW5nIHN0cmlwcGVkRm9yVXNlQXNSZWZlcnJlcigpIGNvbnN0OwogCiAg
ICAgLy8gRklYTUU6IFRoZSBhYm92ZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGhhcm1vbml6ZWQgc28g
dGhhdCBwYXNzaW5nIGEKQEAgLTExNSwxMSArMTAwLDcgQEAgcHVibGljOgogICAgIGJvb2wgY2Fu
U2V0UGF0aG5hbWUoKSBjb25zdCB7IHJldHVybiBpc0hpZXJhcmNoaWNhbCgpOyB9CiAgICAgYm9v
bCBpc0hpZXJhcmNoaWNhbCgpIGNvbnN0OwogCi0jaWYgVVNFKEdPT0dMRVVSTCkKLSAgICBjb25z
dCBTdHJpbmcmIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fdXJsLnN0cmluZygpOyB9Ci0jZWxz
ZQogICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0K
LSNlbmRpZgogCiAgICAgU3RyaW5nIGVsaWRlZFN0cmluZygpIGNvbnN0OwogCkBAIC0yMDIsMTgg
KzE4Myw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBRVXJsKCkgY29uc3Q7CiAjZW5kaWYKIAot
I2lmIFVTRShHT09HTEVVUkwpCi0gICAgLy8gR2V0dGVycyBmb3IgdGhlIHBhcnNlZCBzdHJ1Y3R1
cmUgYW5kIGl0cyBjb3JyZXNwb25kaW5nIDgtYml0IHN0cmluZy4KLSAgICBjb25zdCB1cmxfcGFy
c2U6OlBhcnNlZCYgcGFyc2VkKCkgY29uc3QgeyByZXR1cm4gbV91cmwubV9wYXJzZWQ7IH0KLSAg
ICBjb25zdCBDU3RyaW5nJiB1dGY4U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV91cmwudXRmOFN0
cmluZygpOyB9Ci0jZW5kaWYKLQotCi0jaWYgVVNFKEdPT0dMRVVSTCkKLSAgICBjb25zdCBLVVJM
KiBpbm5lclVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsLmlubmVyVVJMKCk7IH0KLSNlbHNlCiAg
ICAgY29uc3QgS1VSTCogaW5uZXJVUkwoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0jZW5kaWYKIAog
I2lmbmRlZiBOREVCVUcKICAgICB2b2lkIHByaW50KCkgY29uc3Q7CkBAIC0yMjUsMTAgKzE5NSw2
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICAgc3RhdGlj
IGJvb2wgcHJvdG9jb2xJcyhjb25zdCBTdHJpbmcmLCBjb25zdCBjaGFyKik7Ci0jaWYgVVNFKEdP
T0dMRVVSTCkKLSAgICBmcmllbmQgY2xhc3MgS1VSTEdvb2dsZVByaXZhdGU7Ci0gICAgS1VSTEdv
b2dsZVByaXZhdGUgbV91cmw7Ci0jZWxzZSAgLy8gIVVTRShHT09HTEVVUkwpCiAgICAgdm9pZCBp
bml0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKICAg
ICB2b2lkIGNvcHlUb0J1ZmZlcihWZWN0b3I8Y2hhciwgNTEyPiYgYnVmZmVyKSBjb25zdDsKIApA
QCAtMjUyLDcgKzIxOCw2IEBAIHByaXZhdGU6CiAgICAgaW50IG1fcGF0aEVuZDsKICAgICBpbnQg
bV9xdWVyeUVuZDsKICAgICBpbnQgbV9mcmFnbWVudEVuZDsKLSNlbmRpZgogfTsKIAogYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CkBAIC0zMjMsOCArMjg4LDYgQEAg
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IEtVUkwmIGIpCiAg
ICAgcmV0dXJuIGEgIT0gYi5zdHJpbmcoKTsKIH0KIAotI2lmICFVU0UoR09PR0xFVVJMKQotCiAv
LyBJbmxpbmUgdmVyc2lvbnMgb2Ygc29tZSBub24tR29vZ2xlVVJMIGZ1bmN0aW9ucyBzbyB3ZSBj
YW4gZ2V0IGlubGluaW5nCiAvLyB3aXRob3V0IGhhdmluZyB0byBoYXZlIGEgbG90IG9mIHVnbHkg
aWZkZWZzIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgogCkBAIC0zODMsOCArMzQ2LDYgQEAgaW5s
aW5lIHVuc2lnbmVkIEtVUkw6OnBhdGhBZnRlckxhc3RTbGFzaCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fcGF0aEFmdGVyTGFzdFNsYXNoOwogfQogCi0jZW5kaWYgLy8gIVVTRShHT09HTEVVUkwpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tVUkxHb29nbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjdj
YzM0NTVlY2EwNTJlNDhkODcyOTA2N2RhZTA5YzY3MGY4YTEyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkxH
b29nbGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKEdPT0dMRVVSTCkK
LSNpbmNsdWRlICJLVVJMLmgiCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4K
LSNlbmRpZgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1
ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL01lbW9yeUluc3RydW1lbnRhdGlvblN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotI2luY2x1ZGUgPGdv
b2dsZXVybC9zcmMvdXJsX3V0aWwuaD4KLQotdXNpbmcgV1RGOjppc0FTQ0lJTG93ZXI7Ci11c2lu
ZyBXVEY6OnRvQVNDSUlMb3dlcjsKLXVzaW5nIHN0ZDo6YmluYXJ5X3NlYXJjaDsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgaW50IG1heGltdW1WYWxpZFBvcnROdW1iZXIg
PSAweEZGRkU7Ci1zdGF0aWMgY29uc3QgaW50IGludmFsaWRQb3J0TnVtYmVyID0gMHhGRkZGOwot
Ci0vLyBXcmFwcyBXZWJDb3JlJ3MgdGV4dCBlbmNvZGluZyBpbiBhIGNoYXJhY3RlciBzZXQgY29u
dmVydGVyIGZvciB0aGUKLS8vIGNhbm9uaWNhbGl6ZXIuCi1jbGFzcyBLVVJMQ2hhcnNldENvbnZl
cnRlciA6IHB1YmxpYyB1cmxfY2Fub246OkNoYXJzZXRDb252ZXJ0ZXIgewotcHVibGljOgotICAg
IC8vIFRoZSBlbmNvZGluZyBwYXJhbWV0ZXIgbWF5IGJlIDAsIGJ1dCBpbiB0aGlzIGNhc2UgdGhl
IG9iamVjdCBtdXN0IG5vdCBiZSBjYWxsZWQuCi0gICAgS1VSTENoYXJzZXRDb252ZXJ0ZXIoY29u
c3QgVGV4dEVuY29kaW5nKiBlbmNvZGluZykKLSAgICAgICAgOiBtX2VuY29kaW5nKGVuY29kaW5n
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgQ29udmVydEZyb21VVEYxNihjb25z
dCB1cmxfcGFyc2U6OlVURjE2Q2hhciogaW5wdXQsIGludCBpbnB1dExlbmd0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxfY2Fub246OkNhbm9uT3V0cHV0KiBvdXRwdXQp
Ci0gICAgewotICAgICAgICBDU3RyaW5nIGVuY29kZWQgPSBtX2VuY29kaW5nLT5lbmNvZGUoaW5w
dXQsIGlucHV0TGVuZ3RoLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAg
ICAgICBvdXRwdXQtPkFwcGVuZChlbmNvZGVkLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihlbmNv
ZGVkLmxlbmd0aCgpKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFRleHRFbmNvZGlu
ZyogbV9lbmNvZGluZzsKLX07Ci0KLS8vIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUg
bmFtZWQgZGlmZmVyZW50bHkgdGhhbiB0aGUgb25lIGluIEtVUkwuY3BwCi0vLyBzaW5jZSBvdXIg
dW5pdCB0ZXN0cyBldmlsbHkgaW5jbHVkZSBib3RoIGZpbGVzLCBhbmQgdGhlaXIgbG9jYWwgZGVm
aW5pdGlvbgotLy8gd2lsbCBiZSBhbWJpZ3VvdXMuCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0
UHJvdG9jb2xJc0dvb2QoY29uc3QgY2hhciogcHJvdG9jb2wpCi17Ci0jaWZuZGVmIE5ERUJVRwot
ICAgIGNvbnN0IGNoYXIqIHAgPSBwcm90b2NvbDsKLSAgICB3aGlsZSAoKnApIHsKLSAgICAgICAg
QVNTRVJUKCpwID4gJyAnICYmICpwIDwgMHg3RiAmJiAhKCpwID49ICdBJyAmJiAqcCA8PSAnWicp
KTsKLSAgICAgICAgKytwOwotICAgIH0KLSNlbmRpZgotfQotCi0vLyBSZXR1cm5zIHRoZSBjaGFy
YWN0ZXJzIGZvciB0aGUgZ2l2ZW4gc3RyaW5nLCBvciBhIHBvaW50ZXIgdG8gYSBzdGF0aWMgZW1w
dHkKLS8vIHN0cmluZyBpZiB0aGUgaW5wdXQgc3RyaW5nIGlzIG51bGwuIFRoaXMgd2lsbCBhbHdh
eXMgZW5zdXJlIHdlIGhhdmUgYSBub24tCi0vLyBudWxsIGNoYXJhY3RlciBwb2ludGVyIHNpbmNl
IFJlcGxhY2VDb21wb25lbnRzIGhhcyBzcGVjaWFsIG1lYW5pbmcgZm9yIG51bGwuCi1zdGF0aWMg
aW5saW5lIGNvbnN0IHVybF9wYXJzZTo6VVRGMTZDaGFyKiBDaGFyYWN0ZXJzT3JFbXB0eShjb25z
dCBTdHJpbmcmIHN0cikKLXsKLSAgICBzdGF0aWMgY29uc3QgdXJsX3BhcnNlOjpVVEYxNkNoYXIg
emVybyA9IDA7Ci0gICAgcmV0dXJuIHN0ci5jaGFyYWN0ZXJzKCkgPwotICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVybF9wYXJzZTo6VVRGMTZDaGFyKj4oc3RyLmNoYXJhY3RlcnMo
KSkgOgotICAgICAgICAgICAmemVybzsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzVW5pY29k
ZUVuY29kaW5nKGNvbnN0IFRleHRFbmNvZGluZyogZW5jb2RpbmcpCi17Ci0gICAgcmV0dXJuIGVu
Y29kaW5nLT5lbmNvZGluZ0ZvckZvcm1TdWJtaXNzaW9uKCkgPT0gVVRGOEVuY29kaW5nKCk7Ci19
Ci0KLXN0YXRpYyBib29sIGxvd2VyQ2FzZUVxdWFsc0FTQ0lJKGNvbnN0IGNoYXIqIGJlZ2luLCBj
b25zdCBjaGFyKiBlbmQsIGNvbnN0IGNoYXIqIHN0cikKLXsKLSAgICB3aGlsZSAoYmVnaW4gIT0g
ZW5kICYmICpzdHIpIHsKLSAgICAgICAgQVNTRVJUKHRvQVNDSUlMb3dlcigqc3RyKSA9PSAqc3Ry
KTsKLSAgICAgICAgaWYgKHRvQVNDSUlMb3dlcigqYmVnaW4rKykgIT0gKnN0cisrKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEJvdGggc3RyaW5ncyBhcmUgZXF1
YWwgKGlnbm9yaW5nIGNhc2UpIGlmIGFuZCBvbmx5IGlmIGFsbCBvZiB0aGUgY2hhcmFjdGVycyB3
ZXJlIGVxdWFsLAotICAgIC8vIGFuZCB0aGUgZW5kIG9mIGJvdGggaGFzIGJlZW4gcmVhY2hlZC4K
LSAgICByZXR1cm4gYmVnaW4gPT0gZW5kICYmICEqc3RyOwotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNTY2hlbWVGaXJzdENoYXIoY2hhciBjKQotewotICAgIHJldHVybiAoYyA+PSAnYScgJiYg
YyA8PSAneicpIHx8IChjID49ICdBJyAmJiBjIDw9ICdaJyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NjaGVtZUNoYXIoY2hhciBjKQotewotICAgIHJldHVybiBpc1NjaGVtZUZpcnN0Q2hh
cihjKSB8fCAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IGMgPT0gJy4nIHx8IGMgPT0gJy0nIHx8
IGMgPT0gJysnOwotfQotCi1ib29sIGlzVmFsaWRQcm90b2NvbChjb25zdCBTdHJpbmcmIHByb3Rv
Y29sKQotewotICAgIC8vIE5PVEUgVGhpcyBpcyBhIGNvcHkgb2YgdGhlIGZ1bmN0aW9uIGluIEtV
UkwuY3BwLgotICAgIC8vIFJGQzM5ODY6IEFMUEhBICooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAi
LSIgLyAiLiIgKQotICAgIGlmIChwcm90b2NvbC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIWlzU2NoZW1lRmlyc3RDaGFyKHByb3RvY29sWzBdKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIHByb3RvY29sTGVuZ3RoID0gcHJvdG9jb2wubGVu
Z3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHByb3RvY29sTGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgaWYgKCFpc1NjaGVtZUNoYXIocHJvdG9jb2xbaV0pKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi0vLyBLVVJMR29v
Z2xlUHJpdmF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1LVVJMR29vZ2xlUHJpdmF0ZTo6S1VSTEdvb2dsZVByaXZhdGUoKQot
ICAgIDogbV9pc1ZhbGlkKGZhbHNlKQotICAgICwgbV9wcm90b2NvbElzSW5IVFRQRmFtaWx5KGZh
bHNlKQotICAgICwgbV91dGY4SXNBU0NJSSh0cnVlKQotICAgICwgbV9zdHJpbmdJc1ZhbGlkKGZh
bHNlKQotewotfQotCi1LVVJMR29vZ2xlUHJpdmF0ZTo6S1VSTEdvb2dsZVByaXZhdGUoY29uc3Qg
dXJsX3BhcnNlOjpQYXJzZWQmIHBhcnNlZCwgYm9vbCBpc1ZhbGlkKQotICAgIDogbV9pc1ZhbGlk
KGlzVmFsaWQpCi0gICAgLCBtX3Byb3RvY29sSXNJbkhUVFBGYW1pbHkoZmFsc2UpCi0gICAgLCBt
X3BhcnNlZChwYXJzZWQpCi0gICAgLCBtX3V0ZjhJc0FTQ0lJKHRydWUpCi0gICAgLCBtX3N0cmlu
Z0lzVmFsaWQoZmFsc2UpCi17Ci19Ci0KLUtVUkxHb29nbGVQcml2YXRlOjpLVVJMR29vZ2xlUHJp
dmF0ZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgOiBtX3N0cmluZyhXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKLXsKLX0KLSAKLUtVUkxHb29nbGVQcml2YXRlOjpLVVJM
R29vZ2xlUHJpdmF0ZShjb25zdCBLVVJMR29vZ2xlUHJpdmF0ZSYgbykKLSAgICA6IG1faXNWYWxp
ZChvLm1faXNWYWxpZCkKLSAgICAsIG1fcHJvdG9jb2xJc0luSFRUUEZhbWlseShvLm1fcHJvdG9j
b2xJc0luSFRUUEZhbWlseSkKLSAgICAsIG1fcGFyc2VkKG8ubV9wYXJzZWQpCi0gICAgLCBtX3V0
Zjgoby5tX3V0ZjgpCi0gICAgLCBtX3V0ZjhJc0FTQ0lJKG8ubV91dGY4SXNBU0NJSSkKLSAgICAs
IG1fc3RyaW5nSXNWYWxpZChvLm1fc3RyaW5nSXNWYWxpZCkKLSAgICAsIG1fc3RyaW5nKG8ubV9z
dHJpbmcpCi17Ci0gICAgaWYgKG8ubV9pbm5lclVSTC5nZXQoKSkKLSAgICAgICAgbV9pbm5lclVS
TCA9IGFkb3B0UHRyKG5ldyBLVVJMKG8ubV9pbm5lclVSTC0+Y29weSgpKSk7Ci19Ci0KLUtVUkxH
b29nbGVQcml2YXRlJiBLVVJMR29vZ2xlUHJpdmF0ZTo6b3BlcmF0b3I9KGNvbnN0IEtVUkxHb29n
bGVQcml2YXRlJiBvKQotewotICAgIG1faXNWYWxpZCA9IG8ubV9pc1ZhbGlkOwotICAgIG1fcHJv
dG9jb2xJc0luSFRUUEZhbWlseSA9IG8ubV9wcm90b2NvbElzSW5IVFRQRmFtaWx5OwotICAgIG1f
cGFyc2VkID0gby5tX3BhcnNlZDsKLSAgICBtX3V0ZjggPSBvLm1fdXRmODsKLSAgICBtX3V0ZjhJ
c0FTQ0lJID0gby5tX3V0ZjhJc0FTQ0lJOwotICAgIG1fc3RyaW5nSXNWYWxpZCA9IG8ubV9zdHJp
bmdJc1ZhbGlkOwotICAgIG1fc3RyaW5nID0gby5tX3N0cmluZzsKLSAgICBpZiAoby5tX2lubmVy
VVJMLmdldCgpKQotICAgICAgICBtX2lubmVyVVJMID0gYWRvcHRQdHIobmV3IEtVUkwoby5tX2lu
bmVyVVJMLT5jb3B5KCkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1faW5uZXJVUkwuY2xlYXIoKTsK
LSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLS8vIFNldHRlcnMgZm9yIHRoZSBkYXRhLiBVc2luZyB0
aGUgQVNDSUkgdmVyc2lvbiB3aGVuIHlvdSBrbm93IHRoZQotLy8gZGF0YSBpcyBBU0NJSSB3aWxs
IGJlIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50LiBUaGUgVVRGLTggdmVyc2lvbgotLy8gd2lsbCBh
bHdheXMgYmUgY29ycmVjdCBpZiB0aGUgY2FsbGVyIGlzIHVuc3VyZS4KLXZvaWQgS1VSTEdvb2ds
ZVByaXZhdGU6OnNldFV0ZjgoY29uc3QgQ1N0cmluZyYgc3RyKQotewotICAgIGNvbnN0IGNoYXIq
IGRhdGEgPSBzdHIuZGF0YSgpOwotICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBzdHIubGVuZ3Ro
KCk7Ci0KLSAgICAvLyBUaGUgbV91dGY4SXNBU0NJSSBtdXN0IGFsd2F5cyBiZSBjb3JyZWN0IHNp
bmNlIHRoZSBEZXByZWNhdGVkU3RyaW5nCi0gICAgLy8gZ2V0dGVyIG11c3QgY3JlYXRlIGl0IHdp
dGggdGhlIHByb3BlciBjb25zdHJ1Y3Rvci4gVGhpcyB0ZXN0IGNhbiBiZQotICAgIC8vIHJlbW92
ZWQgd2hlbiBEZXByZWNhdGVkU3RyaW5nIGlzIGdvbmUsIGJ1dCBpdCBzdGlsbCBtaWdodCBiZSBh
Ci0gICAgLy8gcGVyZm9ybWFuY2Ugd2luLgotICAgIG1fdXRmOElzQVNDSUkgPSB0cnVlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGFbaV0pID49IDB4ODApIHsKLSAgICAgICAg
ICAgIG1fdXRmOElzQVNDSUkgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgbV91dGY4ID0gc3RyOwotICAgIG1fc3RyaW5nSXNWYWxpZCA9IGZhbHNl
OwotICAgIGluaXRQcm90b2NvbElzSW5IVFRQRmFtaWx5KCk7Ci0gICAgaW5pdElubmVyVVJMKCk7
Ci19Ci0KLXZvaWQgS1VSTEdvb2dsZVByaXZhdGU6OnNldEFzY2lpKGNvbnN0IENTdHJpbmcmIHN0
cikKLXsKLSAgICBtX3V0ZjggPSBzdHI7Ci0gICAgbV91dGY4SXNBU0NJSSA9IHRydWU7Ci0gICAg
bV9zdHJpbmdJc1ZhbGlkID0gZmFsc2U7Ci0gICAgaW5pdFByb3RvY29sSXNJbkhUVFBGYW1pbHko
KTsKLSAgICBpbml0SW5uZXJVUkwoKTsKLX0KLQotdm9pZCBLVVJMR29vZ2xlUHJpdmF0ZTo6aW5p
dChjb25zdCBLVVJMJiBiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHJlbGF0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0
RW5jb2RpbmcqIHF1ZXJ5RW5jb2RpbmcpCi17Ci0gICAgaW5pdChiYXNlLCByZWxhdGl2ZS5jaGFy
YWN0ZXJzKCksIHJlbGF0aXZlLmxlbmd0aCgpLCBxdWVyeUVuY29kaW5nKTsKLX0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIENIQVI+Ci12b2lkIEtVUkxHb29nbGVQcml2YXRlOjppbml0KGNvbnN0IEtV
UkwmIGJhc2UsIGNvbnN0IENIQVIqIHJlbCwgaW50IHJlbExlbmd0aCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVGV4dEVuY29kaW5nKiBxdWVyeUVuY29kaW5nKQotewotICAg
IC8vIEFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCB3ZSBkbyBub3QgdXNlIHRoZSBjaGFy
c2V0IGNvbnZlcnRlcgotICAgIC8vIGlmIGVuY29kaW5nIGlzIFVURi04IG9yIG90aGVyIFVuaWNv
ZGUgZW5jb2RpbmdzLiBOb3RlIHRoYXQgdGhpcyBpcwotICAgIC8vIHBlciBIVE1MNSAyLjUuMyAo
cmVzb2x2aW5nIFVSTCkuIFRoZSBVUkwgY2Fub25pY2FsaXplciB3aWxsIGJlIG1vcmUKLSAgICAv
LyBlZmZpY2llbnQgd2l0aCBubyBjaGFyc2V0IGNvbnZlcnRlciBvYmplY3QgYmVjYXVzZSBpdCBj
YW4gZG8gVVRGLTgKLSAgICAvLyBpbnRlcm5hbGx5IHdpdGggbm8gZXh0cmEgY29waWVzLgotCi0g
ICAgLy8gV2UgZmVlbCBmcmVlIHRvIG1ha2UgdGhlIGNoYXJzZXQgY29udmVydGVyIG9iamVjdCBl
dmVyeSB0aW1lIHNpbmNlIGl0J3MKLSAgICAvLyBqdXN0IGEgd3JhcHBlciBhcm91bmQgYSByZWZl
cmVuY2UuCi0gICAgS1VSTENoYXJzZXRDb252ZXJ0ZXIgY2hhcnNldENvbnZlcnRlck9iamVjdChx
dWVyeUVuY29kaW5nKTsKLSAgICBLVVJMQ2hhcnNldENvbnZlcnRlciogY2hhcnNldENvbnZlcnRl
ciA9Ci0gICAgICAgICghcXVlcnlFbmNvZGluZyB8fCBpc1VuaWNvZGVFbmNvZGluZyhxdWVyeUVu
Y29kaW5nKSkgPyAwIDoKLSAgICAgICAgJmNoYXJzZXRDb252ZXJ0ZXJPYmplY3Q7Ci0KLSAgICB1
cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0VDxjaGFyPiBvdXRwdXQ7Ci0gICAgY29uc3QgQ1N0cmlu
ZyYgYmFzZVN0ciA9IGJhc2UubV91cmwudXRmOFN0cmluZygpOwotICAgIG1faXNWYWxpZCA9IHVy
bF91dGlsOjpSZXNvbHZlUmVsYXRpdmUoYmFzZVN0ci5kYXRhKCksIGJhc2VTdHIubGVuZ3RoKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLm1fdXJsLm1f
cGFyc2VkLCByZWwsIHJlbExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmb3V0cHV0LCAmbV9wYXJzZWQpOwotCi0gICAgLy8gU2VlIEZJWE1FIGlu
IEtVUkxHb29nbGVQcml2YXRlIGluIHRoZSBoZWFkZXIuIElmIGNhbm9uaWNhbGl6YXRpb24gaGFz
IG5vdAotICAgIC8vIGNoYW5nZWQgdGhlIHN0cmluZywgd2UgY2FuIGF2b2lkIGFuIGV4dHJhIGFs
bG9jYXRpb24gYnkgdXNpbmcgYXNzaWdubWVudC4KLSAgICAvLwotICAgIC8vIFdoZW4gS1VSTCBl
bmNvdW50ZXJzIGFuIGVycm9yIHN1Y2ggdGhhdCB0aGUgVVJMIGlzIGludmFsaWQgYW5kIGVtcHR5
Ci0gICAgLy8gKGZvciBleGFtcGxlLCByZXNvbHZpbmcgYSByZWxhdGl2ZSBVUkwgb24gYSBub24t
aGllcmFyY2hpY2FsIGJhc2UpLCBpdAotICAgIC8vIHdpbGwgcHJvZHVjZSBhbiBpc051bGwgVVJM
LCBhbmQgY2FsbGluZyBzZXRVdGY4IHdpbGwgcHJvZHVjZSBhbiBlbXB0eQotICAgIC8vIG5vbi1u
dWxsIFVSTC4gVGhpcyBpcyB1bmxpa2VseSB0byBhZmZlY3QgYW55dGhpbmcsIGJ1dCB3ZSBwcmVz
ZXJ2ZSB0aGlzCi0gICAgLy8ganVzdCBpbiBjYXNlLgotICAgIGlmIChtX2lzVmFsaWQgfHwgb3V0
cHV0Lmxlbmd0aCgpKSB7Ci0gICAgICAgIC8vIFdpdGhvdXQgcmVmLCB0aGUgd2hvbGUgdXJsIGlz
IGd1YXJhbnRlZWQgdG8gYmUgQVNDSUktb25seS4KLSAgICAgICAgaWYgKG1fcGFyc2VkLnJlZi5p
c19ub25lbXB0eSgpKQotICAgICAgICAgICAgc2V0VXRmOChDU3RyaW5nKG91dHB1dC5kYXRhKCks
IG91dHB1dC5sZW5ndGgoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRBc2NpaShD
U3RyaW5nKG91dHB1dC5kYXRhKCksIG91dHB1dC5sZW5ndGgoKSkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIFdlYkNvcmUgZXhwZWN0cyByZXNvbHZlZCBVUkxzIHRvIGJlIGVtcHR5IHJhdGhl
ciB0aGFuIG51bGwuCi0gICAgICAgIHNldFV0ZjgoQ1N0cmluZygiIiwgMCkpOwotICAgIH0KLX0K
LQotdm9pZCBLVVJMR29vZ2xlUHJpdmF0ZTo6aW5pdElubmVyVVJMKCkKLXsKLSAgICBpZiAoIW1f
aXNWYWxpZCkgewotICAgICAgICBtX2lubmVyVVJMLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgdXJsX3BhcnNlOjpQYXJzZWQqIGlubmVyUGFyc2VkID0gbV9wYXJzZWQuaW5u
ZXJfcGFyc2VkKCk7Ci0gICAgaWYgKGlubmVyUGFyc2VkKQotICAgICAgICBtX2lubmVyVVJMID0g
YWRvcHRQdHIobmV3IEtVUkwoCi0gICAgICAgICAgICBQYXJzZWRVUkxTdHJpbmcsCi0gICAgICAg
ICAgICBTdHJpbmcobV91dGY4LmRhdGEoKSArIGlubmVyUGFyc2VkLT5zY2hlbWUuYmVnaW4sIGlu
bmVyUGFyc2VkLT5MZW5ndGgoKSAtIGlubmVyUGFyc2VkLT5zY2hlbWUuYmVnaW4pKSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2lubmVyVVJMLmNsZWFyKCk7Ci19Ci0KLXZvaWQgS1VSTEdvb2dsZVBy
aXZhdGU6OmluaXRQcm90b2NvbElzSW5IVFRQRmFtaWx5KCkKLXsKLSAgICBpZiAoIW1faXNWYWxp
ZCkgewotICAgICAgICBtX3Byb3RvY29sSXNJbkhUVFBGYW1pbHkgPSBmYWxzZTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIHNjaGVtZSA9IG1fdXRmOC5kYXRhKCkg
KyBtX3BhcnNlZC5zY2hlbWUuYmVnaW47Ci0gICAgaWYgKG1fcGFyc2VkLnNjaGVtZS5sZW4gPT0g
NCkKLSAgICAgICAgbV9wcm90b2NvbElzSW5IVFRQRmFtaWx5ID0gbG93ZXJDYXNlRXF1YWxzQVND
SUkoc2NoZW1lLCBzY2hlbWUgKyA0LCAiaHR0cCIpOwotICAgIGVsc2UgaWYgKG1fcGFyc2VkLnNj
aGVtZS5sZW4gPT0gNSkKLSAgICAgICAgbV9wcm90b2NvbElzSW5IVFRQRmFtaWx5ID0gbG93ZXJD
YXNlRXF1YWxzQVNDSUkoc2NoZW1lLCBzY2hlbWUgKyA1LCAiaHR0cHMiKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fcHJvdG9jb2xJc0luSFRUUEZhbWlseSA9IGZhbHNlOwotfQotCi12b2lkIEtVUkxH
b29nbGVQcml2YXRlOjpjb3B5VG8oS1VSTEdvb2dsZVByaXZhdGUqIGRlc3QpIGNvbnN0Ci17Ci0g
ICAgZGVzdC0+bV9pc1ZhbGlkID0gbV9pc1ZhbGlkOwotICAgIGRlc3QtPm1fcHJvdG9jb2xJc0lu
SFRUUEZhbWlseSA9IG1fcHJvdG9jb2xJc0luSFRUUEZhbWlseTsKLSAgICBkZXN0LT5tX3BhcnNl
ZCA9IG1fcGFyc2VkOwotCi0gICAgLy8gRG9uJ3QgY29weSB0aGUgMTYtYml0IHN0cmluZyBzaW5j
ZSB0aGF0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgYXMgbmVlZGVkLgotICAgIGRlc3QtPm1fdXRmOCA9
IENTdHJpbmcobV91dGY4LmRhdGEoKSwgbV91dGY4Lmxlbmd0aCgpKTsKLSAgICBkZXN0LT5tX3V0
ZjhJc0FTQ0lJID0gbV91dGY4SXNBU0NJSTsKLSAgICBkZXN0LT5tX3N0cmluZ0lzVmFsaWQgPSBm
YWxzZTsKLSAgICBkZXN0LT5tX3N0cmluZyA9IFN0cmluZygpOyAvLyBDbGVhciB0aGUgaW52YWxp
ZCBzdHJpbmcgdG8gYXZvaWQgY3Jvc3MgdGhyZWFkIHJlZiBjb3VudGluZy4KLSAgICBpZiAobV9p
bm5lclVSTCkKLSAgICAgICAgZGVzdC0+bV9pbm5lclVSTCA9IGFkb3B0UHRyKG5ldyBLVVJMKG1f
aW5uZXJVUkwtPmNvcHkoKSkpOwotICAgIGVsc2UKLSAgICAgICAgZGVzdC0+bV9pbm5lclVSTC5j
bGVhcigpOwotfQotCi1TdHJpbmcgS1VSTEdvb2dsZVByaXZhdGU6OmNvbXBvbmVudFN0cmluZyhj
b25zdCB1cmxfcGFyc2U6OkNvbXBvbmVudCYgY29tcCkgY29uc3QKLXsKLSAgICBpZiAoIW1faXNW
YWxpZCB8fCBjb21wLmxlbiA8PSAwKSB7Ci0gICAgICAgIC8vIEtVUkwgcmV0dXJucyBhIG51bGwg
c3RyaW5nIGlmIHRoZSBVUkwgaXMgaXRzZWxmIGEgbnVsbCBzdHJpbmcsIGFuZCBhbgotICAgICAg
ICAvLyBlbXB0eSBzdHJpbmcgZm9yIG90aGVyIG5vbmV4aXN0ZW50IGVudGl0aWVzLgotICAgICAg
ICBpZiAodXRmOFN0cmluZygpLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgICAgICByZXR1cm4gU3RyaW5nKCIiLCAwKTsKLSAgICB9Ci0gICAgLy8gYmVnaW4gYW5k
IGxlbiBhcmUgaW4gdGVybXMgb2YgYnl0ZXMgd2hpY2ggZG8gbm90IG1hdGNoCi0gICAgLy8gaWYg
c3RyaW5nKCkgaXMgVVRGLTE2IGFuZCBpbnB1dCBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVy
cy4KLSAgICAvLyBIb3dldmVyLCB0aGUgb25seSBwYXJ0IGluIHVybFN0cmluZyB0aGF0IGNhbiBj
b250YWluIG5vbi1BU0NJSQotICAgIC8vIGNoYXJhY3RlcnMgaXMgJ3JlZicgYXQgdGhlIGVuZCBv
ZiB0aGUgc3RyaW5nLiBJbiB0aGF0IGNhc2UsCi0gICAgLy8gYmVnaW4gd2lsbCBhbHdheXMgbWF0
Y2ggdGhlIGFjdHVhbCB2YWx1ZSBhbmQgbGVuIChpbiB0ZXJtcyBvZgotICAgIC8vIGJ5dGUpIHdp
bGwgYmUgbG9uZ2VyIHRoYW4gd2hhdCdzIG5lZWRlZCBieSAnbWlkJy4gSG93ZXZlciwgbWlkCi0g
ICAgLy8gdHJ1bmNhdGVzIGxlbiB0byBhdm9pZCBnbyBwYXN0IHRoZSBlbmQgb2YgYSBzdHJpbmcg
c28gdGhhdCB3ZSBjYW4KLSAgICAvLyBnZXQgYXdheSB3aXRodG91dCBkb2luZyBhbnl0aGluZyBo
ZXJlLgotICAgIHJldHVybiBzdHJpbmcoKS5zdWJzdHJpbmcoY29tcC5iZWdpbiwgY29tcC5sZW4p
OwotfQotCi12b2lkIEtVUkxHb29nbGVQcml2YXRlOjpyZXBsYWNlQ29tcG9uZW50cyhjb25zdCBS
ZXBsYWNlbWVudHMmIHJlcGxhY2VtZW50cykKLXsKLSAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0
cHV0VDxjaGFyPiBvdXRwdXQ7Ci0gICAgdXJsX3BhcnNlOjpQYXJzZWQgbmV3UGFyc2VkOwotCi0g
ICAgbV9pc1ZhbGlkID0gdXJsX3V0aWw6OlJlcGxhY2VDb21wb25lbnRzKHV0ZjhTdHJpbmcoKS5k
YXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhT
dHJpbmcoKS5sZW5ndGgoKSwgbV9wYXJzZWQsIHJlcGxhY2VtZW50cywgMCwgJm91dHB1dCwgJm5l
d1BhcnNlZCk7Ci0KLSAgICBtX3BhcnNlZCA9IG5ld1BhcnNlZDsKLSAgICBpZiAobV9wYXJzZWQu
cmVmLmlzX25vbmVtcHR5KCkpCi0gICAgICAgIHNldFV0ZjgoQ1N0cmluZyhvdXRwdXQuZGF0YSgp
LCBvdXRwdXQubGVuZ3RoKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIHNldEFzY2lpKENTdHJpbmco
b3V0cHV0LmRhdGEoKSwgb3V0cHV0Lmxlbmd0aCgpKSk7Ci19Ci0KLWNvbnN0IFN0cmluZyYgS1VS
TEdvb2dsZVByaXZhdGU6OnN0cmluZygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3N0cmluZ0lzVmFs
aWQpIHsKLSAgICAgICAgLy8gSGFuZGxlIHRoZSBudWxsIGNhc2Ugc2VwYXJhdGVseS4gT3RoZXJ3
aXNlLCBjb25zdHJ1Y3RpbmcKLSAgICAgICAgLy8gdGhlIHN0cmluZyBsaWtlIHdlIGRvIGJlbG93
IHdvdWxkIGdlbmVyYXRlIHRoZSBlbXB0eSBzdHJpbmcsCi0gICAgICAgIC8vIG5vdCB0aGUgbnVs
bCBzdHJpbmcuCi0gICAgICAgIGlmIChtX3V0ZjguaXNOdWxsKCkpCi0gICAgICAgICAgICBtX3N0
cmluZyA9IFN0cmluZygpOwotICAgICAgICBlbHNlIGlmIChtX3V0ZjhJc0FTQ0lJKQotICAgICAg
ICAgICAgbV9zdHJpbmcgPSBTdHJpbmcobV91dGY4LmRhdGEoKSwgbV91dGY4Lmxlbmd0aCgpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG1f
dXRmOC5kYXRhKCksIG1fdXRmOC5sZW5ndGgoKSk7Ci0gICAgICAgIG1fc3RyaW5nSXNWYWxpZCA9
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBtX3N0cmluZzsKLX0KLQotdm9pZCBLVVJMR29vZ2xl
UHJpdmF0ZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0
SW5mbykgY29uc3QKLXsKLSAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZv
LCB0aGlzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3V0ZjgsICJ1dGY4Iik7Ci0gICAgaW5mby5h
ZGRNZW1iZXIobV9zdHJpbmcsICJzdHJpbmciKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2lubmVy
VVJMLCAiaW5uZXJVUkwiKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BhcnNlZCwgInBhcnNlZCIp
OwotfQotCi1ib29sIEtVUkxHb29nbGVQcml2YXRlOjppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJl
YWQoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0cmluZy5pc1NhZmVUb1NlbmRUb0Fub3RoZXJU
aHJlYWQoKQotICAgICAgICAmJiBtX3V0ZjguaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkK
LSAgICAgICAgJiYgKCFtX2lubmVyVVJMIHx8IG1faW5uZXJVUkwtPmlzU2FmZVRvU2VuZFRvQW5v
dGhlclRocmVhZCgpKTsKLX0KLQotLy8gS1VSTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSW5pdGlh
bGl6ZXMgd2l0aCBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gYWJzb2x1dGUgVVJMLiBObyBlbmNv
ZGluZwotLy8gaW5mb3JtYXRpb24gaXMgc3BlY2lmaWVkLiBUaGlzIGdlbmVyYWxseSBoYXBwZW5z
IHdoZW4gYSBLVVJMIGlzIGNvbnZlcnRlZAotLy8gdG8gYSBzdHJpbmcgYW5kIHRoZW4gY29udmVy
dGVkIGJhY2suIEluIHRoaXMgY2FzZSwgdGhlIFVSTCBpcyBhbHJlYWR5Ci0vLyBjYW5vbmljYWwg
YW5kIGluIHByb3BlciBlc2NhcGVkIGZvcm0gc28gbmVlZHMgbm8gZW5jb2RpbmcuIFdlIHRyZWF0
IGl0IGFzCi0vLyBVVEYtOCBqdXN0IGluIGNhc2UuCi1LVVJMOjpLVVJMKFBhcnNlZFVSTFN0cmlu
Z1RhZywgY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKCF1cmwuaXNOdWxsKCkpCi0gICAg
ICAgIG1fdXJsLmluaXQoS1VSTCgpLCB1cmwsIDApOwotICAgIGVsc2UgewotICAgICAgICAvLyBX
ZWJDb3JlIGV4cGVjdHMgdXMgdG8gcHJlc2VydmUgdGhlIG51bGxuZXNzIG9mIHN0cmluZ3Mgd2hl
biB0aGlzCi0gICAgICAgIC8vIGNvbnN0cnVjdG9yIGlzIHVzZWQuIEluIGFsbCBvdGhlciBjYXNl
cywgaXQgZXhwZWN0cyBhIG5vbi1udWxsCi0gICAgICAgIC8vIGVtcHR5IHN0cmluZywgd2hpY2gg
aXMgd2hhdCBpbml0KCkgd2lsbCBjcmVhdGUuCi0gICAgICAgIG1fdXJsLm1faXNWYWxpZCA9IGZh
bHNlOwotICAgICAgICBtX3VybC5tX3Byb3RvY29sSXNJbkhUVFBGYW1pbHkgPSBmYWxzZTsKLSAg
ICB9Ci19Ci0KLS8vIENvbnN0cnVjdHMgYSBuZXcgVVJMIGdpdmVuIGEgYmFzZSBVUkwgYW5kIGEg
cG9zc2libHkgcmVsYXRpdmUgaW5wdXQgVVJMLgotLy8gVGhpcyBhc3N1bWVzIFVURi04IGVuY29k
aW5nLgotS1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZl
KQotewotICAgIG1fdXJsLmluaXQoYmFzZSwgcmVsYXRpdmUsIDApOwotfQotCi0vLyBDb25zdHJ1
Y3RzIGEgbmV3IFVSTCBnaXZlbiBhIGJhc2UgVVJMIGFuZCBhIHBvc3NpYmx5IHJlbGF0aXZlIGlu
cHV0IFVSTC4KLS8vIEFueSBxdWVyeSBwb3J0aW9uIG9mIHRoZSByZWxhdGl2ZSBVUkwgd2lsbCBi
ZSBlbmNvZGVkIGluIHRoZSBnaXZlbiBlbmNvZGluZy4KLUtVUkw6OktVUkwoY29uc3QgS1VSTCYg
YmFzZSwKLSAgICAgICAgICAgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwKLSAgICAgICAgICAgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKLXsKLSAgICBtX3VybC5pbml0KGJhc2UsIHJlbGF0
aXZlLCAmZW5jb2RpbmcuZW5jb2RpbmdGb3JGb3JtU3VibWlzc2lvbigpKTsKLX0KLQotS1VSTDo6
S1VSTChjb25zdCBDU3RyaW5nJiBjYW5vbmljYWxTcGVjLAotICAgICAgICAgICBjb25zdCB1cmxf
cGFyc2U6OlBhcnNlZCYgcGFyc2VkLCBib29sIGlzVmFsaWQpCi0gICAgOiBtX3VybChwYXJzZWQs
IGlzVmFsaWQpCi17Ci0gICAgLy8gV2Uga25vdyB0aGUgcmVmZXJlbmNlIGZyYWdtZW50IGlzIHRo
ZSBvbmx5IHBhcnQgdGhhdCBjYW4gYmUgVVRGLTgsIHNvCi0gICAgLy8gd2Uga25vdyBpdCdzIEFT
Q0lJIHdoZW4gdGhlcmUgaXMgbm8gcmVmLgotICAgIGlmIChwYXJzZWQucmVmLmlzX25vbmVtcHR5
KCkpCi0gICAgICAgIG1fdXJsLnNldFV0ZjgoY2Fub25pY2FsU3BlYyk7Ci0gICAgZWxzZQotICAg
ICAgICBtX3VybC5zZXRBc2NpaShjYW5vbmljYWxTcGVjKTsKLX0KLQotI2lmIFVTRShDRikKLUtV
Ukw6OktVUkwoQ0ZVUkxSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBpbnZhbGlk
YXRlKCk7Ci19Ci0KLUNGVVJMUmVmIEtVUkw6OmNyZWF0ZUNGVVJMKCkgY29uc3QKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLUtVUkwgS1VSTDo6
Y29weSgpIGNvbnN0Ci17Ci0gICAgS1VSTCByZXN1bHQgPSAqdGhpczsKLSAgICBtX3VybC5jb3B5
VG8oJnJlc3VsdC5tX3VybCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBLVVJMOjpp
c051bGwoKSBjb25zdAotewotICAgIHJldHVybiBtX3VybC51dGY4U3RyaW5nKCkuaXNOdWxsKCk7
Ci19Ci0KLWJvb2wgS1VSTDo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX3VybC51
dGY4U3RyaW5nKCkubGVuZ3RoKCk7Ci19Ci0KLWJvb2wgS1VSTDo6aXNWYWxpZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fdXJsLm1faXNWYWxpZDsKLX0KLQotYm9vbCBLVVJMOjpoYXNQb3J0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gaG9zdEVuZCgpIDwgcGF0aFN0YXJ0KCk7Ci19Ci0KLWJvb2wg
S1VSTDo6cHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdXJs
Lm1fcHJvdG9jb2xJc0luSFRUUEZhbWlseTsKLX0KLQotYm9vbCBLVVJMOjpoYXNQYXRoKCkgY29u
c3QKLXsKLSAgICAvLyBOb3RlIHRoYXQgaHR0cDovL3d3dy5nb29nbGUuY29tLyIgaGFzIGEgcGF0
aCwgdGhlIHBhdGggaXMgIi8iLiBUaGlzIGNhbgotICAgIC8vIHJldHVybiBmYWxzZSBvbmx5IGZv
ciBpbnZhbGlkIG9yIG5vbnN0YW5kYXJkIFVSTHMuCi0gICAgcmV0dXJuIG1fdXJsLm1fcGFyc2Vk
LnBhdGgubGVuID49IDA7Ci19Ci0KLS8vIFdlIGhhbmRsZSAicGFyYW1ldGVycyIgc2VwYXJhdGVk
IGJ5IGEgc2VtaWNvbG9uLCB3aGlsZSBLVVJMLmNwcCBkb2VzIG5vdCwKLS8vIHdoaWNoIGNhbiBs
ZWFkIHRvIGRpZmZlcmVudCByZXN1bHRzIGluIHNvbWUgY2FzZXMuCi1TdHJpbmcgS1VSTDo6bGFz
dFBhdGhDb21wb25lbnQoKSBjb25zdAotewotICAgIC8vIFdoZW4gdGhlIG91dHB1dCBlbmRzIGlu
IGEgc2xhc2gsIFdlYkNvcmUgaGFzIGRpZmZlcmVudCBleHBlY3RhdGlvbnMgdGhhbgotICAgIC8v
IHRoZSBHb29nbGVVUkwgbGlicmFyeS4gRm9yICIvZm9vL2Jhci8iIHRoZSBsaWJyYXJ5IHdpbGwg
cmV0dXJuIHRoZSBlbXB0eQotICAgIC8vIHN0cmluZywgYnV0IFdlYkNvcmUgd2FudHMgImJhciIu
Ci0gICAgdXJsX3BhcnNlOjpDb21wb25lbnQgcGF0aCA9IG1fdXJsLm1fcGFyc2VkLnBhdGg7Ci0g
ICAgaWYgKHBhdGgubGVuID4gMCAmJiBtX3VybC51dGY4U3RyaW5nKCkuZGF0YSgpW3BhdGguZW5k
KCkgLSAxXSA9PSAnLycpCi0gICAgICAgIHBhdGgubGVuLS07Ci0KLSAgICB1cmxfcGFyc2U6OkNv
bXBvbmVudCBmaWxlOwotICAgIHVybF9wYXJzZTo6RXh0cmFjdEZpbGVOYW1lKG1fdXJsLnV0ZjhT
dHJpbmcoKS5kYXRhKCksIHBhdGgsICZmaWxlKTsKLQotICAgIC8vIEJ1ZzogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE1IHRoaXMgZnVuY3Rpb24gcmV0dXJucwot
ICAgIC8vIGEgbnVsbCBzdHJpbmcgd2hlbiB0aGUgcGF0aCBpcyBlbXB0eSwgd2hpY2ggd2UgZHVw
bGljYXRlIGhlcmUuCi0gICAgaWYgKCFmaWxlLmlzX25vbmVtcHR5KCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV91cmwuY29tcG9uZW50U3RyaW5nKGZpbGUpOwotfQot
Ci1TdHJpbmcgS1VSTDo6cHJvdG9jb2woKSBjb25zdAotewotICAgIHJldHVybiBtX3VybC5jb21w
b25lbnRTdHJpbmcobV91cmwubV9wYXJzZWQuc2NoZW1lKTsKLX0KLQotU3RyaW5nIEtVUkw6Omhv
c3QoKSBjb25zdAotewotICAgIC8vIE5vdGU6IEtVUkwuY3BwIHVuZXNjYXBlcyBoZXJlLgotICAg
IHJldHVybiBtX3VybC5jb21wb25lbnRTdHJpbmcobV91cmwubV9wYXJzZWQuaG9zdCk7Ci19Ci0K
LS8vIFJldHVybnMgMCB3aGVuIHRoZXJlIGlzIG5vIHBvcnQuCi0vLwotLy8gV2UgdHJlYXQgVVJM
J3Mgd2l0aCBvdXQtb2YtcmFuZ2UgcG9ydCBudW1iZXJzIGFzIGludmFsaWQgVVJMcywgYW5kIHRo
ZXkgd2lsbAotLy8gYmUgcmVqZWN0ZWQgYnkgdGhlIGNhbm9uaWNhbGl6ZXIuIEtVUkwuY3BwIHdp
bGwgYWxsb3cgdGhlbSBpbiBwYXJzaW5nLCBidXQKLS8vIHJldHVybiBpbnZhbGlkUG9ydE51bWJl
ciBmcm9tIHRoaXMgcG9ydCgpIGZ1bmN0aW9uLCBzbyB3ZSBtaXJyb3IgdGhhdCBiZWhhdmlvciBo
ZXJlLgotdW5zaWduZWQgc2hvcnQgS1VSTDo6cG9ydCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3Vy
bC5tX2lzVmFsaWQgfHwgbV91cmwubV9wYXJzZWQucG9ydC5sZW4gPD0gMCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaW50IHBvcnQgPSB1cmxfcGFyc2U6OlBhcnNlUG9ydChtX3VybC51dGY4U3Ry
aW5nKCkuZGF0YSgpLCBtX3VybC5tX3BhcnNlZC5wb3J0KTsKLSAgICBBU1NFUlQocG9ydCAhPSB1
cmxfcGFyc2U6OlBPUlRfVU5TUEVDSUZJRUQpOyAvLyBDaGVja2VkIHBvcnQubGVuIDw9IDAgYmVm
b3JlLgotCi0gICAgaWYgKHBvcnQgPT0gdXJsX3BhcnNlOjpQT1JUX0lOVkFMSUQgfHwgcG9ydCA+
IG1heGltdW1WYWxpZFBvcnROdW1iZXIpIC8vIE1pbWljIEtVUkw6OnBvcnQoKQotICAgICAgICBw
b3J0ID0gaW52YWxpZFBvcnROdW1iZXI7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQ+KHBvcnQpOwotfQotCi0vLyBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhl
cmUgaXMgbm8gcGFzc3dvcmQuCi1TdHJpbmcgS1VSTDo6cGFzcygpIGNvbnN0Ci17Ci0gICAgLy8g
QnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTUgdGhpcyBm
dW5jdGlvbiByZXR1cm5zCi0gICAgLy8gYSBudWxsIHN0cmluZyB3aGVuIHRoZSBwYXNzd29yZCBp
cyBlbXB0eSwgd2hpY2ggd2UgZHVwbGljYXRlIGhlcmUuCi0gICAgaWYgKCFtX3VybC5tX3BhcnNl
ZC5wYXNzd29yZC5pc19ub25lbXB0eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAg
ICAvLyBOb3RlOiBLVVJMLmNwcCB1bmVzY2FwZXMgaGVyZS4KLSAgICByZXR1cm4gbV91cmwuY29t
cG9uZW50U3RyaW5nKG1fdXJsLm1fcGFyc2VkLnBhc3N3b3JkKTsKLX0KLQotLy8gUmV0dXJucyB0
aGUgZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIHVzZXJuYW1lLgotU3RyaW5nIEtVUkw6OnVz
ZXIoKSBjb25zdAotewotICAgIC8vIE5vdGU6IEtVUkwuY3BwIHVuZXNjYXBlcyBoZXJlLgotICAg
IHJldHVybiBtX3VybC5jb21wb25lbnRTdHJpbmcobV91cmwubV9wYXJzZWQudXNlcm5hbWUpOwot
fQotCi1TdHJpbmcgS1VSTDo6ZnJhZ21lbnRJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICAvLyBF
bXB0eSBidXQgcHJlc2VudCByZWZzICgiZm9vLmNvbS9iYXIjIikgc2hvdWxkIHJlc3VsdCBpbiB0
aGUgZW1wdHkKLSAgICAvLyBzdHJpbmcsIHdoaWNoIG1fdXJsLmNvbXBvbmVudFN0cmluZyB3aWxs
IHByb2R1Y2UuIE5vbmV4aXN0ZW50IHJlZnMKLSAgICAvLyBzaG91bGQgYmUgdGhlIG51bGwgc3Ry
aW5nLgotICAgIGlmICghbV91cmwubV9wYXJzZWQucmVmLmlzX3ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgIC8vIE5vdGU6IEtVUkwuY3BwIHVuZXNjYXBlcyBoZXJlLgot
ICAgIHJldHVybiBtX3VybC5jb21wb25lbnRTdHJpbmcobV91cmwubV9wYXJzZWQucmVmKTsKLX0K
LQotYm9vbCBLVVJMOjpoYXNGcmFnbWVudElkZW50aWZpZXIoKSBjb25zdAotewotICAgIC8vIE5v
dGU6IEtVUkwuY3BwIHVuZXNjYXBlcyBoZXJlLgotICAgIC8vIEZJWE1FIGRldGVybWluZSBpZiBL
VVJMLmNwcCBhZ3JlZXMgYWJvdXQgYW4gZW1wdHkgcmVmCi0gICAgcmV0dXJuIG1fdXJsLm1fcGFy
c2VkLnJlZi5sZW4gPj0gMDsKLX0KLQotU3RyaW5nIEtVUkw6OmJhc2VBc1N0cmluZygpIGNvbnN0
Ci17Ci0gICAgLy8gRklYTUU6IFRoZXJlIGlzIHByb2JhYmx5IGEgbW9yZSBlZmZpY2llbnQgd2F5
IHRvIGRvIHRoaXM/Ci0gICAgcmV0dXJuIHN0cmluZygpLmxlZnQocGF0aEFmdGVyTGFzdFNsYXNo
KCkpOwotfQotCi1TdHJpbmcgS1VSTDo6cXVlcnkoKSBjb25zdAotewotICAgIGlmIChtX3VybC5t
X3BhcnNlZC5xdWVyeS5sZW4gPj0gMCkKLSAgICAgICAgcmV0dXJuIG1fdXJsLmNvbXBvbmVudFN0
cmluZyhtX3VybC5tX3BhcnNlZC5xdWVyeSk7Ci0KLSAgICAvLyBCdWc6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNSB0aGlzIGZ1bmN0aW9uIHJldHVybnMKLSAg
ICAvLyBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGUgcXVlcnkgaXMgZW1wdHkgcmF0aGVyIHRoYW4g
YSBudWxsIChub3Qgc3VyZQotICAgIC8vIHdoaWNoIGlzIHJpZ2h0KS4KLSAgICAvLyBSZXR1cm5z
IGEgbnVsbCBpZiB0aGUgcXVlcnkgaXMgbm90IHNwZWNpZmllZCwgaW5zdGVhZCBvZiBlbXB0eS4K
LSAgICBpZiAobV91cmwubV9wYXJzZWQucXVlcnkuaXNfdmFsaWQoKSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygiIiwgMCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgS1VSTDo6
cGF0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdXJsLmNvbXBvbmVudFN0cmluZyhtX3VybC5t
X3BhcnNlZC5wYXRoKTsKLX0KLQotYm9vbCBLVVJMOjpzZXRQcm90b2NvbChjb25zdCBTdHJpbmcm
IHByb3RvY29sKQotewotICAgIC8vIEZpcmVmb3ggYW5kIElFIHJlbW92ZSBldmVyeXRoaW5nIGFm
dGVyIHRoZSBmaXJzdCAnOicuCi0gICAgaW50IHNlcGFyYXRvclBvc2l0aW9uID0gcHJvdG9jb2wu
ZmluZCgnOicpOwotICAgIFN0cmluZyBuZXdQcm90b2NvbCA9IHByb3RvY29sLnN1YnN0cmluZygw
LCBzZXBhcmF0b3JQb3NpdGlvbik7Ci0KLSAgICAvLyBJZiBLVVJMIGlzIGdpdmVuIGFuIGludmFs
aWQgc2NoZW1lLCBpdCByZXR1cm5zIGZhaWx1cmUgd2l0aG91dCBtb2RpZnlpbmcKLSAgICAvLyB0
aGUgVVJMIGF0IGFsbC4gVGhpcyBpcyBpbiBjb250cmFzdCB0byBtb3N0IG90aGVyIHNldHRlcnMg
d2hpY2ggbW9kaWZ5Ci0gICAgLy8gdGhlIFVSTCBhbmQgc2V0ICJtX2lzVmFsaWQuIgotICAgIHVy
bF9jYW5vbjo6UmF3Q2Fub25PdXRwdXRUPGNoYXI+IGNhbm9uUHJvdG9jb2w7Ci0gICAgdXJsX3Bh
cnNlOjpDb21wb25lbnQgcHJvdG9jb2xDb21wb25lbnQ7Ci0gICAgaWYgKCF1cmxfY2Fub246OkNh
bm9uaWNhbGl6ZVNjaGVtZShuZXdQcm90b2NvbC5jaGFyYWN0ZXJzKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxfcGFyc2U6OkNvbXBvbmVudCgwLCBuZXdQcm90
b2NvbC5sZW5ndGgoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
Y2Fub25Qcm90b2NvbCwgJnByb3RvY29sQ29tcG9uZW50KQotICAgICAgICB8fCAhcHJvdG9jb2xD
b21wb25lbnQuaXNfbm9uZW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgS1VS
TEdvb2dsZVByaXZhdGU6OlJlcGxhY2VtZW50cyByZXBsYWNlbWVudHM7Ci0gICAgcmVwbGFjZW1l
bnRzLlNldFNjaGVtZShDaGFyYWN0ZXJzT3JFbXB0eShuZXdQcm90b2NvbCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cmxfcGFyc2U6OkNvbXBvbmVudCgwLCBuZXdQcm90b2NvbC5sZW5n
dGgoKSkpOwotICAgIG1fdXJsLnJlcGxhY2VDb21wb25lbnRzKHJlcGxhY2VtZW50cyk7Ci0KLSAg
ICAvLyBpc1ZhbGlkIGNvdWxkIGJlIGZhbHNlIGJ1dCB3ZSBzdGlsbCByZXR1cm4gdHJ1ZSBoZXJl
LiBUaGlzIGlzIGJlY2F1c2UKLSAgICAvLyBXZWJDb3JlIG9yIEpTIHNjcmlwdHMgY2FuIGJ1aWxk
IHVwIGEgVVJMIGJ5IHNldHRpbmcgaW5kaXZpZHVhbAotICAgIC8vIGNvbXBvbmVudHMsIGFuZCBh
IEpTIGV4Y2VwdGlvbiBpcyBiYXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMKLSAgICAv
LyBmdW5jdGlvbi4gV2Ugd2FudCB0byB0aHJvdyB0aGUgZXhjZXB0aW9uIGFuZCBzdG9wIHRoZSBz
Y3JpcHQgb25seSB3aGVuCi0gICAgLy8gaXRzIHRyeWluZyB0byBzZXQgYSBiYWQgcHJvdG9jb2ws
IGFuZCBub3Qgd2hlbiBpdCBtYXliZSBqdXN0IGhhc24ndAotICAgIC8vIGZpbmlzaGVkIGJ1aWxk
aW5nIHVwIGl0cyBmaW5hbCBzY2hlbWUuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgS1VS
TDo6c2V0SG9zdChjb25zdCBTdHJpbmcmIGhvc3QpCi17Ci0gICAgS1VSTEdvb2dsZVByaXZhdGU6
OlJlcGxhY2VtZW50cyByZXBsYWNlbWVudHM7Ci0gICAgcmVwbGFjZW1lbnRzLlNldEhvc3QoQ2hh
cmFjdGVyc09yRW1wdHkoaG9zdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXJsX3BhcnNl
OjpDb21wb25lbnQoMCwgaG9zdC5sZW5ndGgoKSkpOwotICAgIG1fdXJsLnJlcGxhY2VDb21wb25l
bnRzKHJlcGxhY2VtZW50cyk7Ci19Ci0KLXZvaWQgS1VSTDo6c2V0SG9zdEFuZFBvcnQoY29uc3Qg
U3RyaW5nJiBzKQotewotICAgIFN0cmluZyBob3N0ID0gczsKLSAgICBTdHJpbmcgcG9ydDsKLSAg
ICBpbnQgaG9zdEVuZCA9IHMuZmluZCgiOiIpOwotICAgIGlmIChob3N0RW5kICE9IC0xKSB7Ci0g
ICAgICAgIGhvc3QgPSBzLmxlZnQoaG9zdEVuZCk7Ci0gICAgICAgIHBvcnQgPSBzLnN1YnN0cmlu
Zyhob3N0RW5kICsgMSk7Ci0gICAgfQotCi0gICAgS1VSTEdvb2dsZVByaXZhdGU6OlJlcGxhY2Vt
ZW50cyByZXBsYWNlbWVudHM7Ci0gICAgLy8gSG9zdCBjYW4ndCBiZSByZW1vdmVkLCBzbyB3ZSBh
bHdheXMgc2V0LgotICAgIHJlcGxhY2VtZW50cy5TZXRIb3N0KENoYXJhY3RlcnNPckVtcHR5KGhv
c3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVybF9wYXJzZTo6Q29tcG9uZW50KDAsIGhv
c3QubGVuZ3RoKCkpKTsKLQotICAgIGlmIChwb3J0LmlzRW1wdHkoKSkgIC8vIFBvcnQgbWF5IGJl
IHJlbW92ZWQsIHNvIHdlIHN1cHBvcnQgY2xlYXJpbmcuCi0gICAgICAgIHJlcGxhY2VtZW50cy5D
bGVhclBvcnQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcGxhY2VtZW50cy5TZXRQb3J0KENoYXJh
Y3RlcnNPckVtcHR5KHBvcnQpLCB1cmxfcGFyc2U6OkNvbXBvbmVudCgwLCBwb3J0Lmxlbmd0aCgp
KSk7Ci0gICAgbV91cmwucmVwbGFjZUNvbXBvbmVudHMocmVwbGFjZW1lbnRzKTsKLX0KLQotdm9p
ZCBLVVJMOjpyZW1vdmVQb3J0KCkKLXsKLSAgICBpZiAoaGFzUG9ydCgpKSB7Ci0gICAgICAgIFN0
cmluZyB1cmxXaXRob3V0UG9ydCA9IG1fdXJsLnN0cmluZygpLmxlZnQoaG9zdEVuZCgpKSArIG1f
dXJsLnN0cmluZygpLnN1YnN0cmluZyhwYXRoU3RhcnQoKSk7Ci0gICAgICAgIG1fdXJsLnNldFV0
ZjgodXJsV2l0aG91dFBvcnQudXRmOCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgS1VSTDo6c2V0UG9y
dCh1bnNpZ25lZCBzaG9ydCBpKQotewotICAgIEtVUkxHb29nbGVQcml2YXRlOjpSZXBsYWNlbWVu
dHMgcmVwbGFjZW1lbnRzOwotICAgIFN0cmluZyBwb3J0U3RyOwotCi0gICAgcG9ydFN0ciA9IFN0
cmluZzo6bnVtYmVyKGkpOwotICAgIHJlcGxhY2VtZW50cy5TZXRQb3J0KAotICAgICAgICByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVybF9wYXJzZTo6VVRGMTZDaGFyKj4ocG9ydFN0ci5jaGFyYWN0
ZXJzKCkpLAotICAgICAgICB1cmxfcGFyc2U6OkNvbXBvbmVudCgwLCBwb3J0U3RyLmxlbmd0aCgp
KSk7Ci0KLSAgICBtX3VybC5yZXBsYWNlQ29tcG9uZW50cyhyZXBsYWNlbWVudHMpOwotfQotCi12
b2lkIEtVUkw6OnNldFVzZXIoY29uc3QgU3RyaW5nJiB1c2VyKQotewotICAgIC8vIFRoaXMgZnVu
Y3Rpb24gaXMgY29tbW9ubHkgY2FsbGVkIHRvIGNsZWFyIHRoZSB1c2VybmFtZSwgd2hpY2ggd2UK
LSAgICAvLyBub3JtYWxseSBkb24ndCBoYXZlLCBzbyB3ZSBvcHRpbWl6ZSB0aGlzIGNhc2UuCi0g
ICAgaWYgKHVzZXIuaXNFbXB0eSgpICYmICFtX3VybC5tX3BhcnNlZC51c2VybmFtZS5pc192YWxp
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgY2Fub25pY2FsaXplciB3aWxsIGNs
ZWFyIGFueSB1c2VybmFtZXMgdGhhdCBhcmUgZW1wdHksIHNvIHdlCi0gICAgLy8gZG9uJ3QgaGF2
ZSB0byBleHBsaWNpdGx5IGNhbGwgQ2xlYXJVc2VybmFtZSgpIGhlcmUuCi0gICAgS1VSTEdvb2ds
ZVByaXZhdGU6OlJlcGxhY2VtZW50cyByZXBsYWNlbWVudHM7Ci0gICAgcmVwbGFjZW1lbnRzLlNl
dFVzZXJuYW1lKENoYXJhY3RlcnNPckVtcHR5KHVzZXIpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cmxfcGFyc2U6OkNvbXBvbmVudCgwLCB1c2VyLmxlbmd0aCgpKSk7Ci0gICAgbV91
cmwucmVwbGFjZUNvbXBvbmVudHMocmVwbGFjZW1lbnRzKTsKLX0KLQotdm9pZCBLVVJMOjpzZXRQ
YXNzKGNvbnN0IFN0cmluZyYgcGFzcykKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNvbW1v
bmx5IGNhbGxlZCB0byBjbGVhciB0aGUgcGFzc3dvcmQsIHdoaWNoIHdlCi0gICAgLy8gbm9ybWFs
bHkgZG9uJ3QgaGF2ZSwgc28gd2Ugb3B0aW1pemUgdGhpcyBjYXNlLgotICAgIGlmIChwYXNzLmlz
RW1wdHkoKSAmJiAhbV91cmwubV9wYXJzZWQucGFzc3dvcmQuaXNfdmFsaWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gVGhlIGNhbm9uaWNhbGl6ZXIgd2lsbCBjbGVhciBhbnkgcGFzc3dv
cmRzIHRoYXQgYXJlIGVtcHR5LCBzbyB3ZQotICAgIC8vIGRvbid0IGhhdmUgdG8gZXhwbGljaXRs
eSBjYWxsIENsZWFyVXNlcm5hbWUoKSBoZXJlLgotICAgIEtVUkxHb29nbGVQcml2YXRlOjpSZXBs
YWNlbWVudHMgcmVwbGFjZW1lbnRzOwotICAgIHJlcGxhY2VtZW50cy5TZXRQYXNzd29yZChDaGFy
YWN0ZXJzT3JFbXB0eShwYXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsX3Bh
cnNlOjpDb21wb25lbnQoMCwgcGFzcy5sZW5ndGgoKSkpOwotICAgIG1fdXJsLnJlcGxhY2VDb21w
b25lbnRzKHJlcGxhY2VtZW50cyk7Ci19Ci0KLXZvaWQgS1VSTDo6c2V0RnJhZ21lbnRJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNvbW1vbmx5
IGNhbGxlZCB0byBjbGVhciB0aGUgcmVmLCB3aGljaCB3ZQotICAgIC8vIG5vcm1hbGx5IGRvbid0
IGhhdmUsIHNvIHdlIG9wdGltaXplIHRoaXMgY2FzZS4KLSAgICBpZiAocy5pc051bGwoKSAmJiAh
bV91cmwubV9wYXJzZWQucmVmLmlzX3ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEtV
UkxHb29nbGVQcml2YXRlOjpSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRzOwotICAgIGlmIChzLmlz
TnVsbCgpKQotICAgICAgICByZXBsYWNlbWVudHMuQ2xlYXJSZWYoKTsKLSAgICBlbHNlCi0gICAg
ICAgIHJlcGxhY2VtZW50cy5TZXRSZWYoQ2hhcmFjdGVyc09yRW1wdHkocyksIHVybF9wYXJzZTo6
Q29tcG9uZW50KDAsIHMubGVuZ3RoKCkpKTsKLSAgICBtX3VybC5yZXBsYWNlQ29tcG9uZW50cyhy
ZXBsYWNlbWVudHMpOwotfQotCi12b2lkIEtVUkw6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigp
Ci17Ci0gICAgS1VSTEdvb2dsZVByaXZhdGU6OlJlcGxhY2VtZW50cyByZXBsYWNlbWVudHM7Ci0g
ICAgcmVwbGFjZW1lbnRzLkNsZWFyUmVmKCk7Ci0gICAgbV91cmwucmVwbGFjZUNvbXBvbmVudHMo
cmVwbGFjZW1lbnRzKTsKLX0KLQotdm9pZCBLVVJMOjpzZXRRdWVyeShjb25zdCBTdHJpbmcmIHF1
ZXJ5KQotewotICAgIEtVUkxHb29nbGVQcml2YXRlOjpSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRz
OwotICAgIGlmIChxdWVyeS5pc051bGwoKSkgewotICAgICAgICAvLyBLVVJMLmNwcCBzZXRzIHRv
IG51bGwgdG8gY2xlYXIgYW55IHF1ZXJ5LgotICAgICAgICByZXBsYWNlbWVudHMuQ2xlYXJRdWVy
eSgpOwotICAgIH0gZWxzZSBpZiAocXVlcnkubGVuZ3RoKCkgPiAwICYmIHF1ZXJ5WzBdID09ICc/
JykgewotICAgICAgICAvLyBXZWJDb3JlIGV4cGVjdHMgdGhlIHF1ZXJ5IHN0cmluZyB0byBiZWdp
biB3aXRoIGEgcXVlc3Rpb24gbWFyaywgYnV0Ci0gICAgICAgIC8vIEdvb2dsZVVSTCBkb2Vzbid0
LiBTbyB3ZSB0cmltIG9mZiB0aGUgcXVlc3Rpb24gbWFyayB3aGVuIHNldHRpbmcuCi0gICAgICAg
IHJlcGxhY2VtZW50cy5TZXRRdWVyeShDaGFyYWN0ZXJzT3JFbXB0eShxdWVyeSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cmxfcGFyc2U6OkNvbXBvbmVudCgxLCBxdWVyeS5sZW5n
dGgoKSAtIDEpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXaGVuIHNldCB3aXRoIHRoZSBl
bXB0eSBzdHJpbmcgb3Igc29tZXRoaW5nIHRoYXQgZG9lc24ndCBiZWdpbiB3aXRoCi0gICAgICAg
IC8vIGEgcXVlc3Rpb24gbWFyaywgS1VSTC5jcHAgd2lsbCBhZGQgYSBxdWVzdGlvbiBtYXJrIGZv
ciB5b3UuIFRoZSBvbmx5Ci0gICAgICAgIC8vIHdheSB0aGlzIGlzbid0IGNvbXBhdGlibGUgaXMg
aWYgeW91IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGFuIGVtcHR5Ci0gICAgICAgIC8vIHN0cmlu
Zy4gS1VSTC5jcHAgd2lsbCBsZWF2ZSBhICc/JyB3aXRoIG5vdGhpbmcgZm9sbG93aW5nIGl0IGlu
IHRoZQotICAgICAgICAvLyBVUkwsIHdoZXJlYXMgd2UnbGwgY2xlYXIgaXQuCi0gICAgICAgIC8v
IEZJWE1FIFdlIHNob3VsZCBlbGltaW5hdGUgdGhpcyBkaWZmZXJlbmNlLgotICAgICAgICByZXBs
YWNlbWVudHMuU2V0UXVlcnkoQ2hhcmFjdGVyc09yRW1wdHkocXVlcnkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXJsX3BhcnNlOjpDb21wb25lbnQoMCwgcXVlcnkubGVuZ3RoKCkp
KTsKLSAgICB9Ci0gICAgbV91cmwucmVwbGFjZUNvbXBvbmVudHMocmVwbGFjZW1lbnRzKTsKLX0K
LQotdm9pZCBLVVJMOjpzZXRQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICAvLyBFbXB0
eSBwYXRocyB3aWxsIGJlIGNhbm9uaWNhbGl6ZWQgdG8gIi8iLCBzbyB3ZSBkb24ndCBoYXZlIHRv
IHdvcnJ5Ci0gICAgLy8gYWJvdXQgY2FsbGluZyBDbGVhclBhdGgoKS4KLSAgICBLVVJMR29vZ2xl
UHJpdmF0ZTo6UmVwbGFjZW1lbnRzIHJlcGxhY2VtZW50czsKLSAgICByZXBsYWNlbWVudHMuU2V0
UGF0aChDaGFyYWN0ZXJzT3JFbXB0eShwYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1
cmxfcGFyc2U6OkNvbXBvbmVudCgwLCBwYXRoLmxlbmd0aCgpKSk7Ci0gICAgbV91cmwucmVwbGFj
ZUNvbXBvbmVudHMocmVwbGFjZW1lbnRzKTsKLX0KLQotU3RyaW5nIGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlcyhjb25zdCBTdHJpbmcmIHN0cikKLXsKLSAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKHN0ciwgVVRGOEVuY29kaW5nKCkpOwotfQotCi0vLyBJbiBLVVJMLmNwcCdzIGlt
cGxlbWVudGF0aW9uLCB0aGlzIGlzIGNhbGxlZCBieSBldmVyeSBjb21wb25lbnQgZ2V0dGVyLgot
Ly8gSXQgd2lsbCB1bmVzY2FwZSBldmVyeSBjaGFyYWN0ZXIsIGluY2x1ZGluZyAnXDAnLiBUaGlz
IGlzIHNjYXJ5LCBhbmQgbWF5Ci0vLyBjYXVzZSBzZWN1cml0eSBob2xlcy4gV2UgbmV2ZXIgY2Fs
bCB0aGlzIGZ1bmN0aW9uIGZvciBjb21wb25lbnRzLCBhbmQKLS8vIGp1c3QgcmV0dXJuIHRoZSBB
U0NJSSB2ZXJzaW9ucyBpbnN0ZWFkLgotLy8KLS8vIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2Vk
IHRvIGRlY29kZSBqYXZhc2NyaXB0OiBVUkxzIGFuZCBhcyBhIGdlbmVyYWwKLS8vIHB1cnBvc2Ug
dW5lc2NhcGluZyBmdW5jdGlvbi4KLS8vCi0vLyBGSVhNRSBUaGVzZSBzaG91bGQgYmUgbWVyZ2Vk
IHRvIHRoZSBLVVJMLmNwcCBpbXBsZW1lbnRhdGlvbi4KLVN0cmluZyBkZWNvZGVVUkxFc2NhcGVT
ZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHIsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rpbmcp
Ci17Ci0gICAgLy8gRklYTUUgV2UgY2FuIHByb2JhYmx5IHVzZSBLVVJMLmNwcCdzIHZlcnNpb24g
b2YgdGhpcyBmdW5jdGlvbgotICAgIC8vIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBIb3dldmVyLCBJ
J20gY29uY2VybmVkIGFib3V0Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNTU5IHNvIGFtIGtlZXBpbmcgdGhpcyBvbGQKLSAgICAvLyBjdXN0b20gY29k
ZSBmb3Igbm93LiBVc2luZyB0aGVpciB2ZXJzaW9uIHdpbGwgYWxzbyBmaXggdGhlIGJ1ZyB0aGF0
Ci0gICAgLy8gd2UgaWdub3JlIHRoZSBlbmNvZGluZy4KLSAgICAvLwotICAgIC8vIEZJWE1FIGIv
MTM1MDI5MTogVGhpcyBkb2VzIG5vdCBnZXQgY2FsbGVkIHZlcnkgb2Z0ZW4uIFdlIGp1c3QgY29u
dmVydAotICAgIC8vIGZpcnN0IHRvIDgtYml0IFVURi04LCB0aGVuIHVuZXNjYXBlLCB0aGVuIGJh
Y2sgdG8gMTYtYml0LiBUaGlzIGtpbmQgb2YKLSAgICAvLyBzdWNrcywgYW5kIHdlIGRvbid0IHVz
ZSB0aGUgZW5jb2RpbmcgcHJvcGVybHksIHdoaWNoIHdpbGwgbWFrZSBzb21lCi0gICAgLy8gb2Jz
Y3VyZSBhbmNob3IgbmF2aWdhdGlvbnMgZmFpbC4KLSAgICBDU3RyaW5nIGNzdHIgPSBzdHIudXRm
OCgpOwotCi0gICAgY29uc3QgY2hhciogaW5wdXQgPSBjc3RyLmRhdGEoKTsKLSAgICBpbnQgaW5w
dXRMZW5ndGggPSBjc3RyLmxlbmd0aCgpOwotCi0gICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91dHB1
dFQ8dXJsX3BhcnNlOjpVVEYxNkNoYXI+IHVuZXNjYXBlZDsKLQotICAgIHVybF91dGlsOjpEZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXMoaW5wdXQsIGlucHV0TGVuZ3RoLCAmdW5lc2NhcGVkKTsKLQot
ICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHVuZXNjYXBlZC5kYXRh
KCkpLAotICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkLmxlbmd0aCgpKTsKLX0KLQotYm9vbCBL
VVJMOjpwcm90b2NvbElzKGNvbnN0IGNoYXIqIHByb3RvY29sKSBjb25zdAotewotICAgIGFzc2Vy
dFByb3RvY29sSXNHb29kKHByb3RvY29sKTsKLQotICAgIC8vIEphdmFTY3JpcHQgVVJMcyBhcmUg
InZhbGlkIiBhbmQgc2hvdWxkIGJlIGV4ZWN1dGVkIGV2ZW4gaWYgS1VSTCBkZWNpZGVzIHRoZXkg
YXJlIGludmFsaWQuCi0gICAgLy8gVGhlIGZyZWUgZnVuY3Rpb24gcHJvdG9jb2xJc0phdmFTY3Jp
cHQoKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgotICAgIC8vIEZJWE1FOiBDaHJvbWl1bSBjb2Rl
IG5lZWRzIHRvIGJlIGZpeGVkIGZvciB0aGlzIGFzc2VydCB0byBiZSBlbmFibGVkLiBBU1NFUlQo
c3RyY21wKHByb3RvY29sLCAiamF2YXNjcmlwdCIpKTsKLQotICAgIGlmIChtX3VybC5tX3BhcnNl
ZC5zY2hlbWUubGVuIDw9IDApCi0gICAgICAgIHJldHVybiAhcHJvdG9jb2w7Ci0gICAgcmV0dXJu
IGxvd2VyQ2FzZUVxdWFsc0FTQ0lJKAotICAgICAgICBtX3VybC51dGY4U3RyaW5nKCkuZGF0YSgp
ICsgbV91cmwubV9wYXJzZWQuc2NoZW1lLmJlZ2luLAotICAgICAgICBtX3VybC51dGY4U3RyaW5n
KCkuZGF0YSgpICsgbV91cmwubV9wYXJzZWQuc2NoZW1lLmVuZCgpLAotICAgICAgICBwcm90b2Nv
bCk7Ci19Ci0KLVN0cmluZyBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmlu
ZyYgbm90RW5jb2RlZFN0cmluZykKLXsKLSAgICBDU3RyaW5nIHV0ZjggPSBVVEY4RW5jb2Rpbmco
KS5lbmNvZGUoCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihub3RFbmNv
ZGVkU3RyaW5nLmNoYXJhY3RlcnMoKSksCi0gICAgICAgIG5vdEVuY29kZWRTdHJpbmcubGVuZ3Ro
KCksCi0gICAgICAgIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgY29u
c3QgY2hhciogaW5wdXQgPSB1dGY4LmRhdGEoKTsKLSAgICBpbnQgaW5wdXRMZW5ndGggPSB1dGY4
Lmxlbmd0aCgpOwotICAgIHVybF9jYW5vbjo6UmF3Q2Fub25PdXRwdXRUPGNoYXI+IGJ1ZmZlcjsK
LSAgICBpZiAoYnVmZmVyLmxlbmd0aCgpIDwgaW5wdXRMZW5ndGggKiAzKQotICAgICAgICBidWZm
ZXIuUmVzaXplKGlucHV0TGVuZ3RoICogMyk7Ci0KLSAgICB1cmxfdXRpbDo6RW5jb2RlVVJJQ29t
cG9uZW50KGlucHV0LCBpbnB1dExlbmd0aCwgJmJ1ZmZlcik7Ci0gICAgU3RyaW5nIGVzY2FwZWQo
YnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKLSAgICAvLyBVbmVzY2FwZSAnLyc7IGl0
J3Mgc2FmZSBhbmQgbXVjaCBwcmV0dGllci4KLSAgICBlc2NhcGVkLnJlcGxhY2UoIiUyRiIsICIv
Iik7Ci0gICAgcmV0dXJuIGVzY2FwZWQ7Ci19Ci0KLWJvb2wgS1VSTDo6aXNIaWVyYXJjaGljYWwo
KSBjb25zdAotewotICAgIGlmICghbV91cmwubV9wYXJzZWQuc2NoZW1lLmlzX25vbmVtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdXJsX3V0aWw6OklzU3RhbmRhcmQo
Ci0gICAgICAgICZtX3VybC51dGY4U3RyaW5nKCkuZGF0YSgpW21fdXJsLm1fcGFyc2VkLnNjaGVt
ZS5iZWdpbl0sCi0gICAgICAgIG1fdXJsLm1fcGFyc2VkLnNjaGVtZSk7Ci19Ci0KLSNpZm5kZWYg
TkRFQlVHCi12b2lkIEtVUkw6OnByaW50KCkgY29uc3QKLXsKLSAgICBwcmludGYoIiVzXG4iLCBt
X3VybC51dGY4U3RyaW5nKCkuZGF0YSgpKTsKLX0KLSNlbmRpZgotCi12b2lkIEtVUkw6OmludmFs
aWRhdGUoKQotewotICAgIC8vIFRoaXMgaXMgb25seSBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0
b3Igc28gcmVzZXR0aW5nIHRoZSAoYXV0b21hdGljYWxseQotICAgIC8vIGluaXRpYWxpemVkKSBz
dHJpbmcgYW5kIHBhcnNlZCBzdHJ1Y3R1cmUgd291bGQgYmUgYSB3YXN0ZSBvZiB0aW1lLgotICAg
IG1fdXJsLm1faXNWYWxpZCA9IGZhbHNlOwotICAgIG1fdXJsLm1fcHJvdG9jb2xJc0luSFRUUEZh
bWlseSA9IGZhbHNlOwotfQotCi0vLyBFcXVhbCB1cCB0byByZWZlcmVuY2UgZnJhZ21lbnRzLCBp
ZiBhbnkuCi1ib29sIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoY29uc3QgS1VSTCYg
YSwgY29uc3QgS1VSTCYgYikKLXsKLSAgICAvLyBDb21wdXRlIHRoZSBsZW5ndGggb2YgZWFjaCBV
Ukwgd2l0aG91dCBpdHMgcmVmLiBOb3RlIHRoYXQgdGhlIHJlZmVyZW5jZQotICAgIC8vIGJlZ2lu
IChpZiBpdCBleGlzdHMpIHBvaW50cyB0byB0aGUgY2hhcmFjdGVyICphZnRlciogdGhlICcjJywg
c28gd2UgbmVlZAotICAgIC8vIHRvIHN1YnRyYWN0IG9uZS4KLSAgICBpbnQgYUxlbmd0aCA9IGEu
bV91cmwudXRmOFN0cmluZygpLmxlbmd0aCgpOwotICAgIGlmIChhLm1fdXJsLm1fcGFyc2VkLnJl
Zi5sZW4gPj0gMCkKLSAgICAgICAgYUxlbmd0aCA9IGEubV91cmwubV9wYXJzZWQucmVmLmJlZ2lu
IC0gMTsKLQotICAgIGludCBiTGVuZ3RoID0gYi5tX3VybC51dGY4U3RyaW5nKCkubGVuZ3RoKCk7
Ci0gICAgaWYgKGIubV91cmwubV9wYXJzZWQucmVmLmxlbiA+PSAwKQotICAgICAgICBiTGVuZ3Ro
ID0gYi5tX3VybC5tX3BhcnNlZC5yZWYuYmVnaW4gLSAxOwotCi0gICAgcmV0dXJuIGFMZW5ndGgg
PT0gYkxlbmd0aAotICAgICAgICAmJiAhc3RybmNtcChhLm1fdXJsLnV0ZjhTdHJpbmcoKS5kYXRh
KCksIGIubV91cmwudXRmOFN0cmluZygpLmRhdGEoKSwgYUxlbmd0aCk7Ci19Ci0KLXVuc2lnbmVk
IEtVUkw6Omhvc3RTdGFydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdXJsLm1fcGFyc2VkLkNv
dW50Q2hhcmFjdGVyc0JlZm9yZSh1cmxfcGFyc2U6OlBhcnNlZDo6SE9TVCwgZmFsc2UpOwotfQot
Ci11bnNpZ25lZCBLVVJMOjpob3N0RW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV91cmwubV9w
YXJzZWQuQ291bnRDaGFyYWN0ZXJzQmVmb3JlKHVybF9wYXJzZTo6UGFyc2VkOjpQT1JULCB0cnVl
KTsKLX0KLQotdW5zaWduZWQgS1VSTDo6cGF0aFN0YXJ0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV91cmwubV9wYXJzZWQuQ291bnRDaGFyYWN0ZXJzQmVmb3JlKHVybF9wYXJzZTo6UGFyc2VkOjpQ
QVRILCBmYWxzZSk7Ci19Ci0KLXVuc2lnbmVkIEtVUkw6OnBhdGhFbmQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3VybC5tX3BhcnNlZC5Db3VudENoYXJhY3RlcnNCZWZvcmUodXJsX3BhcnNlOjpQ
YXJzZWQ6OlFVRVJZLCB0cnVlKTsKLX0KLQotdW5zaWduZWQgS1VSTDo6cGF0aEFmdGVyTGFzdFNs
YXNoKCkgY29uc3QKLXsKLSAgICAvLyBXaGVuIHRoZXJlJ3Mgbm8gcGF0aCwgYXNrIGZvciB3aGF0
IHdvdWxkIGJlIHRoZSBiZWdpbm5pbmcgb2YgaXQuCi0gICAgaWYgKCFtX3VybC5tX3BhcnNlZC5w
YXRoLmlzX3ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBtX3VybC5tX3BhcnNlZC5Db3VudENoYXJh
Y3RlcnNCZWZvcmUodXJsX3BhcnNlOjpQYXJzZWQ6OlBBVEgsIGZhbHNlKTsKLQotICAgIHVybF9w
YXJzZTo6Q29tcG9uZW50IGZpbGVuYW1lOwotICAgIHVybF9wYXJzZTo6RXh0cmFjdEZpbGVOYW1l
KG1fdXJsLnV0ZjhTdHJpbmcoKS5kYXRhKCksIG1fdXJsLm1fcGFyc2VkLnBhdGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lKTsKLSAgICByZXR1cm4gZmlsZW5hbWUu
YmVnaW47Ci19Ci0KLWJvb2wgcHJvdG9jb2xJcyhjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgY2hh
ciogcHJvdG9jb2wpCi17Ci0gICAgLy8gRG8gdGhlIGNvbXBhcmlzb24gd2l0aG91dCBtYWtpbmcg
YSBuZXcgc3RyaW5nIG9iamVjdC4KLSAgICBhc3NlcnRQcm90b2NvbElzR29vZChwcm90b2NvbCk7
Ci0KLSAgICAvLyBDaGVjayB0aGUgc2NoZW1lIGxpa2UgR1VSTCBkb2VzLgotICAgIHJldHVybiB1
cmxfdXRpbDo6RmluZEFuZENvbXBhcmVTY2hlbWUodXJsLmNoYXJhY3RlcnMoKSwgdXJsLmxlbmd0
aCgpLCAKLSAgICAgICAgcHJvdG9jb2wsIDApOwotfQotCi1pbmxpbmUgYm9vbCBLVVJMOjpwcm90
b2NvbElzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyKiBwcm90b2NvbCkKLXsKLSAg
ICByZXR1cm4gV2ViQ29yZTo6cHJvdG9jb2xJcyhzdHJpbmcsIHByb3RvY29sKTsKLX0KLQotYm9v
bCBwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwoY29uc3QgS1VSTCYgYSwgY29uc3QgS1VSTCYg
YikKLXsKLSAgICBpZiAoYS5wYXJzZWQoKS5zY2hlbWUuZW5kKCkgIT0gYi5wYXJzZWQoKS5zY2hl
bWUuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBob3N0U3RhcnRBID0g
YS5ob3N0U3RhcnQoKTsKLSAgICBpbnQgaG9zdExlbmd0aEEgPSBhLmhvc3RFbmQoKSAtIGhvc3RT
dGFydEE7Ci0gICAgaW50IGhvc3RTdGFydEIgPSBiLmhvc3RTdGFydCgpOwotICAgIGludCBob3N0
TGVuZ3RoQiA9IGIuaG9zdEVuZCgpIC0gYi5ob3N0U3RhcnQoKTsKLSAgICBpZiAoaG9zdExlbmd0
aEEgIT0gaG9zdExlbmd0aEIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENoZWNr
IHRoZSBzY2hlbWUKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGEucGFyc2VkKCkuc2NoZW1lLmVu
ZCgpOyArK2kpCi0gICAgICAgIGlmIChhLnN0cmluZygpW2ldICE9IGIuc3RyaW5nKClbaV0pCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gQW5kIHRoZSBob3N0Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBob3N0TGVuZ3RoQTsgKytpKQotICAgICAgICBpZiAoYS5zdHJp
bmcoKVtob3N0U3RhcnRBICsgaV0gIT0gYi5zdHJpbmcoKVtob3N0U3RhcnRCICsgaV0pCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGEucG9ydCgpICE9IGIucG9ydCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEdPT0dMRVVSTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGVQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlUHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0Yjk2YWVmMzc3MGY2ZTFiNTAxZDVjZGFjMjdhNGQ4ZDJiMmQzMmRlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tVUkxHb29nbGVQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgS1VSTEdvb2dsZVByaXZhdGVfaAotI2RlZmluZSBLVVJM
R29vZ2xlUHJpdmF0ZV9oCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxn
b29nbGV1cmwvc3JjL3VybF9wYXJzZS5oPgotI2luY2x1ZGUgPGdvb2dsZXVybC9zcmMvdXJsX2Nh
bm9uLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xh
c3MgVGV4dEVuY29kaW5nOwotCi0gICAgLy8gV3JhcHMgdGhlIGludGVybmFscyByZWxhdGVkIHRv
IHVzaW5nIEdvb2dsZS1VUkwgYXMgdGhlIGJhY2tlbmQgZm9yIEtVUkwuCi0gICAgLy8gVGhpcyBt
YWludGFpbnMgdGhlIHN0YXRlIGFuZCBoYXMgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBzbyB0aGF0IHdl
IGRvbid0IG5lZWQKLSAgICAvLyB0byB1Z2xpZnkgS1VSTC5oIHdoaWxlIGFsbG93aW5nIEdvb2ds
ZS1VUkwgdG8gYmUgZXZhbHVhdGVkLgotICAgIGNsYXNzIEtVUkxHb29nbGVQcml2YXRlIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIEtVUkxHb29nbGVQcml2YXRlKCk7Ci0gICAgICAgIEtVUkxHb29n
bGVQcml2YXRlKGNvbnN0IHVybF9wYXJzZTo6UGFyc2VkJiwgYm9vbCBpc1ZhbGlkKTsKLSAgICAg
ICAgZXhwbGljaXQgS1VSTEdvb2dsZVByaXZhdGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
eXBlKTsKLSAgICAgICAgZXhwbGljaXQgS1VSTEdvb2dsZVByaXZhdGUoY29uc3QgS1VSTEdvb2ds
ZVByaXZhdGUmKTsKLSAgICAgICAgS1VSTEdvb2dsZVByaXZhdGUmIG9wZXJhdG9yPShjb25zdCBL
VVJMR29vZ2xlUHJpdmF0ZSYpOwotCi0gICAgICAgIC8vIEluaXRpYWxpemVzIHRoZSBvYmplY3Qu
IFRoaXMgd2lsbCBjYWxsIHRocm91Z2ggdGhlIGJhY2tlbmQgaW5pdGlhbGl6ZXIKLSAgICAgICAg
Ly8gYmVsb3cuCi0gICAgICAgIHZvaWQgaW5pdChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBTdHJp
bmcmIHJlbGF0aXZlLAotICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dEVuY29kaW5nKiBxdWVy
eUVuY29kaW5nKTsKLQotICAgICAgICAvLyBCYWNrZW5kIGluaXRpYWxpemVyLiBUaGUgcXVlcnkg
ZW5jb2RpbmcgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYW5kIGNhbgotICAgICAgICAvLyBiZSAw
ICh0aGlzIGltcGxpZXMgVVRGLTgpLiBUaGlzIGluaXRpYWxpemVyIHJlcXVpcmVzIHRoYXQgdGhl
IG9iamVjdAotICAgICAgICAvLyBoYXMganVzdCBiZWVuIGNyZWF0ZWQgYW5kIHRoZSBzdHJpbmdz
IGFyZSBudWxsLiBEbyBub3QgY2FsbCBvbiBhbgotICAgICAgICAvLyBhbHJlYWR5LWNvbnN0cnVj
dGVkIG9iamVjdC4KLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENIQVI+Ci0gICAgICAgIHZv
aWQgaW5pdChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBDSEFSKiByZWwsIGludCByZWxMZW5ndGgs
Ci0gICAgICAgICAgICAgICAgICBjb25zdCBUZXh0RW5jb2RpbmcqIHF1ZXJ5RW5jb2RpbmcpOwot
Ci0gICAgICAgIC8vIERvZXMgYSBkZWVwIGNvcHkgdG8gdGhlIGdpdmVuIG91dHB1dCBvYmplY3Qu
Ci0gICAgICAgIHZvaWQgY29weVRvKEtVUkxHb29nbGVQcml2YXRlKiBkZXN0KSBjb25zdDsKLQot
ICAgICAgICAvLyBSZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgdGhlIGlucHV0IGlkZW50aWZpZWQg
YnkgdGhlIGdpdmVuIGNvbXBvbmVudC4KLSAgICAgICAgU3RyaW5nIGNvbXBvbmVudFN0cmluZyhj
b25zdCB1cmxfcGFyc2U6OkNvbXBvbmVudCYpIGNvbnN0OwotCi0gICAgICAgIC8vIFJlcGxhY2Vz
IHRoZSBnaXZlbiBjb21wb25lbnRzLCBtb2RpZnlpbmcgdGhlIGN1cnJlbnQgVVJMLiBUaGUgY3Vy
cmVudAotICAgICAgICAvLyBVUkwgbXVzdCBiZSB2YWxpZC4KLSAgICAgICAgdHlwZWRlZiB1cmxf
Y2Fub246OlJlcGxhY2VtZW50czx1cmxfcGFyc2U6OlVURjE2Q2hhcj4gUmVwbGFjZW1lbnRzOwot
ICAgICAgICB2b2lkIHJlcGxhY2VDb21wb25lbnRzKGNvbnN0IFJlcGxhY2VtZW50cyYpOwotCi0g
ICAgICAgIC8vIFNldHRlcnMgZm9yIHRoZSBkYXRhLiBVc2luZyB0aGUgQVNDSUkgdmVyc2lvbiB3
aGVuIHlvdSBrbm93IHRoZQotICAgICAgICAvLyBkYXRhIGlzIEFTQ0lJIHdpbGwgYmUgc2xpZ2h0
bHkgbW9yZSBlZmZpY2llbnQuIFRoZSBVVEYtOCB2ZXJzaW9uCi0gICAgICAgIC8vIHdpbGwgYWx3
YXlzIGJlIGNvcnJlY3QgaWYgdGhlIGNhbGxlciBpcyB1bnN1cmUuCi0gICAgICAgIHZvaWQgc2V0
VXRmOChjb25zdCBDU3RyaW5nJik7Ci0gICAgICAgIHZvaWQgc2V0QXNjaWkoY29uc3QgQ1N0cmlu
ZyYpOwotCi0gICAgICAgIC8vIFRPRE8oYnJldHR3KSB3ZSBjYW4gc3VwcG9ydCBhbiBhZGRpdGlv
bmFsIG9wdGltaXphdGlvbi4gIE1ha2UgdGhpcwotICAgICAgICAvLyBidWZmZXIgc3VwcG9ydCBi
b3RoIG9wdGluYWwgU3RyaW5ncyBhbmQgVVRGLTggZGF0YS4gVGhpcyB3YXksIHdlIGNhbiB1c2UK
LSAgICAgICAgLy8gdGhlIG9wdGltaXphdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBLVVJMIHdoaWNo
IHVzZXMgPSB3aXRoIHRoZSBvcmlnaW5hbAotICAgICAgICAvLyBzdHJpbmcgd2hlbiBjYW5vbmlj
YWxpemF0aW9uIGRpZCBub3QgY2hhbmdlIGl0LiBUaGlzIGFsbG93cyB0aGUgc3RyaW5ncwotICAg
ICAgICAvLyB0byBzaGFyZSBhIGJ1ZmZlciBpbnRlcm5hbGx5LCBhbmQgc2F2ZXMgYSBtYWxsb2Mu
Ci0KLSAgICAgICAgLy8gR2V0dGVycyBmb3IgdGhlIGRhdGEuCi0gICAgICAgIGNvbnN0IENTdHJp
bmcmIHV0ZjhTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3V0Zjg7IH0KLSAgICAgICAgY29uc3Qg
U3RyaW5nJiBzdHJpbmcoKSBjb25zdDsKLQotICAgICAgICBib29sIG1faXNWYWxpZDsKLSAgICAg
ICAgYm9vbCBtX3Byb3RvY29sSXNJbkhUVFBGYW1pbHk7Ci0gICAgICAgIHVybF9wYXJzZTo6UGFy
c2VkIG1fcGFyc2VkOyAvLyBJbmRleGVzIGludG8gdGhlIFVURi04IHZlcnNpb24gb2YgdGhlIHN0
cmluZy4KLQotICAgICAgICBLVVJMKiBpbm5lclVSTCgpIGNvbnN0IHsgcmV0dXJuIG1faW5uZXJV
UkwuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQo
KSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgaW5pdElubmVyVVJMKCk7Ci0g
ICAgICAgIHZvaWQgaW5pdFByb3RvY29sSXNJbkhUVFBGYW1pbHkoKTsKLQotICAgICAgICBDU3Ry
aW5nIG1fdXRmODsKLQotICAgICAgICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIHRoZSBjYWxsZXIgc2V0
IHVzIHVzaW5nIHRoZSBBU0NJSSBzZXR0ZXIuIFdlIGNhbgotICAgICAgICAvLyBiZSBtb3JlIGVm
ZmljaWVudCB3aGVuIHdlIGtub3cgdGhlcmUgaXMgbm8gVVRGLTggdG8gd29ycnkgYWJvdXQuCi0g
ICAgICAgIC8vIFRoaXMgZmxhZyBpcyBjdXJyZW50bHkgYWx3YXlzIGNvcnJlY3QsIGJ1dCBzaG91
bGQgYmUgY2hhbmdlZCB0byBiZSBhCi0gICAgICAgIC8vIGhpbnQgKHNlZSBzZXRVdGY4KS4KLSAg
ICAgICAgYm9vbCBtX3V0ZjhJc0FTQ0lJOwotCi0gICAgICAgIG11dGFibGUgYm9vbCBtX3N0cmlu
Z0lzVmFsaWQ7Ci0gICAgICAgIG11dGFibGUgU3RyaW5nIG1fc3RyaW5nOwotCi0gICAgICAgIE93
blB0cjxLVVJMPiBtX2lubmVyVVJMOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvQWJvdXREYXRhVXNlRmVhdHVyZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViQ29yZVN1cHBvcnQvQWJvdXREYXRhVXNlRmVhdHVyZXMuaW4KaW5kZXggNDZjZjk4MzEyMGQy
Y2VhZDFmYjZhZDVmZTc1ZWU2NTAzNzhmZDg0NS4uNjEyMWM3MmIzNGExMjJkYWU0ZGM5MDc3YmVh
NmQ0MzYyYTQyYmE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNv
cmVTdXBwb3J0L0Fib3V0RGF0YVVzZUZlYXR1cmVzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9BYm91dERhdGFVc2VGZWF0dXJlcy5pbgpAQCAtMzYsNyAr
MzYsNiBAQCBHQ0NfQ09NUFVURURfR09UT19XT1JLQVJPVU5ECiBHTEVTMl9SRU5ERVJJTkcKIEdM
SUJfVU5JQ09ERQogR0xYCi1HT09HTEVVUkwKIEdSQU1NQVJfQ0hFQ0tJTkcKIEdSQVBISUNTX1NV
UkZBQ0UKIEdTVFJFQU1FUgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>