<?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>220424</bug_id>
          
          <creation_ts>2021-01-07 11:19:08 -0800</creation_ts>
          <short_desc>[Mac] Prepend &quot;Media&quot; to FormatReader, SampleCursor, and TrackReader class names</short_desc>
          <delta_ts>2021-01-07 12:18:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1718008</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2021-01-07 11:19:08 -0800</bug_when>
    <thetext>[Mac] Prepend &quot;Media&quot; to FormatReader, SampleCursor, and TrackReader class names</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718013</commentid>
    <comment_count>1</comment_count>
      <attachid>417191</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2021-01-07 11:23:01 -0800</bug_when>
    <thetext>Created attachment 417191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718025</commentid>
    <comment_count>2</comment_count>
      <attachid>417194</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2021-01-07 11:44:24 -0800</bug_when>
    <thetext>Created attachment 417194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718026</commentid>
    <comment_count>3</comment_count>
      <attachid>417195</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2021-01-07 11:45:27 -0800</bug_when>
    <thetext>Created attachment 417195
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718034</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-07 12:17:25 -0800</bug_when>
    <thetext>Committed r271253: &lt;https://trac.webkit.org/changeset/271253&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 417195.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718037</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-07 12:18:41 -0800</bug_when>
    <thetext>&lt;rdar://problem/72899975&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417191</attachid>
            <date>2021-01-07 11:23:01 -0800</date>
            <delta_ts>2021-01-07 11:44:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220424-20210107112308.patch</filename>
            <type>text/plain</type>
            <size>138827</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdmYTk2MmY5YjgxOGIy
MzVjNjJmNjYxOThlNTRiOTYzYTYzNmY5Yi4uMmQ5Y2I2ZDJiMDE4ZmVjMjdjOGVlMjAwOGVkMDM2
Yzk4MWE4ZjY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIxLTAxLTA3ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBQcmVwZW5kICJNZWRp
YSIgdG8gRm9ybWF0UmVhZGVyLCBTYW1wbGVDdXJzb3IsIGFuZCBUcmFja1JlYWRlciBjbGFzcyBu
YW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIw
NDI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg6CisKIDIwMjEt
MDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBOdWxsIGNoZWNrIGdsb2JhbCBvYmplY3QgaW4gQmxvYjo6c3RyZWFtCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IDM0NWJkZDE0NWViZGY2ODc0MzNjZGZmYjk3ZjhhYTMzMGVjYjY2MjIuLmE5ODk1NDg4MGYzMzNk
NzM5ZWFiMzUyN2JjNmU4NzEwM2YzODVkZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIw
MjEtMDEtMDcgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNd
IFByZXBlbmQgIk1lZGlhIiB0byBGb3JtYXRSZWFkZXIsIFNhbXBsZUN1cnNvciwgYW5kIFRyYWNr
UmVhZGVyIGNsYXNzIG5hbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjA0MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBbHNvIG1vdmVkIE1lZGlhU2FtcGxlQnl0ZVJhbmdlIGludG8gaXRzIG93biBm
aWxlIGZyb20gTWVkaWFUcmFja1JlYWRlci5jcHAuCisKKyAgICAgICAgKiBNZWRpYUZvcm1hdFJl
YWRlclBsdWdJbi9NZWRpYUZvcm1hdFJlYWRlclBsdWdJbi5jcHA6CisgICAgICAgICogU2hhcmVk
L0FQSS9jL21hYy9XS01lZGlhRm9ybWF0UmVhZGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS0Zvcm1hdFJlYWRlci5jcHAuCisgICAgICAgICogU2hh
cmVkL0FQSS9jL21hYy9XS01lZGlhRm9ybWF0UmVhZGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tGb3JtYXRSZWFkZXIuaC4KKyAgICAgICAgKiBTaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9Gb3JtYXRSZWFk
ZXIuY3BwLgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3Jt
YXRSZWFkZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9Gb3JtYXRSZWFkZXIuaC4KKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcDogQWRkZWQuCisgICAgICAgICogU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29y
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9TYW1wbGVDdXJzb3IuY3BwLgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRS
ZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9TYW1wbGVDdXJzb3IuaC4KKyAgICAgICAgKiBTaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1RyYWNrUmVhZGVy
LmNwcC4KKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tS
ZWFkZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1h
dFJlYWRlci9UcmFja1JlYWRlci5oLgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDEtMDcgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJLaXQgSVBD
IG1lc3NhZ2UgbmFtZXMgc2hvdWxkIGluZGljYXRlIGlmIHRoZSBtZXNzYWdlIGlzIHN5bmNocm9u
b3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9T
b3VyY2VCdWZmZXJQYXJzZXJXZWJNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKaW5kZXggYjNlMTBkYTAzZjA5OTM4NzAx
NGVkZjAxNjY1NWM0MDY2NDMyNjIxMS4uYjA4Y2I4M2ZhYjUyYWZmOTliZmFiZDViZGI3YzcyMDY0
ODg3YWI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaApAQCAtMjE4LDcgKzIxOCw3
IEBAIHB1YmxpYzoKICAgICAgICAgVmVjdG9yPEF1ZGlvU3RyZWFtUGFja2V0RGVzY3JpcHRpb24+
IG1fcGFja2V0RGVzY3JpcHRpb25zOwogCiAgICAgICAgIC8vIEZJWE1FOiAwLjUgLSAxLjAgc2Vj
b25kcyBpcyBhIGJldHRlciBkdXJhdGlvbiBwZXIgc2FtcGxlIGJ1ZmZlciwgYnV0IHVzZSAyIHNl
Y29uZHMgc28gYXQgbGVhc3QgdGhlIGZpcnN0Ci0gICAgICAgIC8vIHNhbXBsZSBidWZmZXIgd2ls
bCBwbGF5IHVudGlsIHdlIGZpeCBTYW1wbGVDdXJzb3I6OmNyZWF0ZVNhbXBsZUJ1ZmZlciB0byBk
ZWFsIHdpdGggYGVuZEN1cnNvcmAuCisgICAgICAgIC8vIHNhbXBsZSBidWZmZXIgd2lsbCBwbGF5
IHVudGlsIHdlIGZpeCBNZWRpYVNhbXBsZUN1cnNvcjo6Y3JlYXRlU2FtcGxlQnVmZmVyIHRvIGRl
YWwgd2l0aCBgZW5kQ3Vyc29yYC4KICAgICAgICAgZmxvYXQgbV9taW5pbXVtU2FtcGxlRHVyYXRp
b24geyAyIH07CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9NZWRpYUZvcm1h
dFJlYWRlclBsdWdJbi9NZWRpYUZvcm1hdFJlYWRlclBsdWdJbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L01lZGlhRm9ybWF0UmVhZGVyUGx1Z0luL01lZGlhRm9ybWF0UmVhZGVyUGx1Z0luLmNwcAppbmRl
eCA2ODI0ZmJhMTIxMTk0NDg0YTZkZDc2NjAxOTBjOTg5NzQ1YWI0OTcwLi40OTZlNDJhOTUyMGE1
ZWY4NTM3ZGM2MzJjOTdkNGNmMDNlOTk3ZTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L01l
ZGlhRm9ybWF0UmVhZGVyUGx1Z0luL01lZGlhRm9ybWF0UmVhZGVyUGx1Z0luLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L01lZGlhRm9ybWF0UmVhZGVyUGx1Z0luL01lZGlhRm9ybWF0UmVhZGVyUGx1
Z0luLmNwcApAQCAtMjMsMTQgKzIzLDE0IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPFdlYktpdC9XS0Zvcm1hdFJlYWRlci5oPgorI2luY2x1
ZGUgPFdlYktpdC9XS01lZGlhRm9ybWF0UmVhZGVyLmg+CiAKIGV4dGVybiAiQyIgV0tfRVhQT1JU
IE9TU3RhdHVzIENyZWF0ZU1lZGlhRm9ybWF0UmVhZGVySW5zdGFuY2UoTVRQbHVnaW5CeXRlU291
cmNlUmVmLCBDRkFsbG9jYXRvclJlZiwgQ0ZEaWN0aW9uYXJ5UmVmLCBNVFBsdWdpbkZvcm1hdFJl
YWRlclJlZiopOwogCiBPU1N0YXR1cyBDcmVhdGVNZWRpYUZvcm1hdFJlYWRlckluc3RhbmNlKE1U
UGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlLCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Is
IENGRGljdGlvbmFyeVJlZiwgTVRQbHVnaW5Gb3JtYXRSZWFkZXJSZWYqIGZvcm1hdFJlYWRlcikK
IHsKLSAgICBPU1N0YXR1cyBzdGF0dXMgPSBXS0Zvcm1hdFJlYWRlckNyZWF0ZShhbGxvY2F0b3Is
IGZvcm1hdFJlYWRlcik7CisgICAgT1NTdGF0dXMgc3RhdHVzID0gV0tNZWRpYUZvcm1hdFJlYWRl
ckNyZWF0ZShhbGxvY2F0b3IsIGZvcm1hdFJlYWRlcik7CiAgICAgaWYgKHN0YXR1cyAhPSBub0Vy
cikKICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICByZXR1cm4gV0tGb3JtYXRSZWFkZXJTdGFy
dE9uTWFpblRocmVhZCgqZm9ybWF0UmVhZGVyLCBieXRlU291cmNlKTsKKyAgICByZXR1cm4gV0tN
ZWRpYUZvcm1hdFJlYWRlclN0YXJ0T25NYWluVGhyZWFkKCpmb3JtYXRSZWFkZXIsIGJ5dGVTb3Vy
Y2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLRm9y
bWF0UmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS0Zvcm1hdFJl
YWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2N2EwMDA0N2E4ZDE0ZDhi
N2YyMmZiZWJhNDZmOWU0MmNjNTdkMWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLRm9ybWF0UmVh
ZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV0tGb3JtYXRSZWFkZXIuaCIKLQotI2luY2x1ZGUg
IkZvcm1hdFJlYWRlci5oIgotCi0jaW5jbHVkZSA8cGFsL2NvY29hL01lZGlhVG9vbGJveFNvZnRM
aW5rLmg+Ci0KLU9TU3RhdHVzIFdLRm9ybWF0UmVhZGVyQ3JlYXRlKENGQWxsb2NhdG9yUmVmIGFs
bG9jYXRvciwgTVRQbHVnaW5Gb3JtYXRSZWFkZXJSZWYqIGZvcm1hdFJlYWRlclJlZikKLXsKLSNp
ZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQotICAgIGF1dG8gZm9ybWF0UmVhZGVyID0gV2Vi
S2l0OjpGb3JtYXRSZWFkZXI6OmNyZWF0ZShhbGxvY2F0b3IpOwotICAgIGlmICghZm9ybWF0UmVh
ZGVyKQotICAgICAgICByZXR1cm4ga01UUGx1Z2luRm9ybWF0UmVhZGVyRXJyb3JfQWxsb2NhdGlv
bkZhaWx1cmU7Ci0gICAgKmZvcm1hdFJlYWRlclJlZiA9IGZvcm1hdFJlYWRlci5sZWFrUmVmKCkt
PndyYXBwZXIoKTsKLSAgICByZXR1cm4gbm9FcnI7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShh
bGxvY2F0b3IpOwotICAgICpmb3JtYXRSZWFkZXJSZWYgPSBudWxscHRyOwotICAgIHJldHVybiAt
MTsKLSNlbmRpZgotfQotCi1PU1N0YXR1cyBXS0Zvcm1hdFJlYWRlclN0YXJ0T25NYWluVGhyZWFk
KE1UUGx1Z2luRm9ybWF0UmVhZGVyUmVmIGZvcm1hdFJlYWRlclJlZiwgTVRQbHVnaW5CeXRlU291
cmNlUmVmIGJ5dGVTb3VyY2UpCi17Ci0jaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKLSAg
ICBhdXRvIGZvcm1hdFJlYWRlciA9IFdlYktpdDo6Rm9ybWF0UmVhZGVyOjp1bndyYXAoZm9ybWF0
UmVhZGVyUmVmKTsKLSAgICBpZiAoIWZvcm1hdFJlYWRlcikKLSAgICAgICAgcmV0dXJuIHBhcmFt
RXJyOwotICAgIGZvcm1hdFJlYWRlci0+c3RhcnRPbk1haW5UaHJlYWQoYnl0ZVNvdXJjZSk7Ci0g
ICAgcmV0dXJuIG5vRXJyOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZm9ybWF0UmVhZGVyUmVm
KTsKLSAgICBVTlVTRURfUEFSQU0oYnl0ZVNvdXJjZSk7Ci0gICAgcmV0dXJuIC0xOwotI2VuZGlm
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tGb3JtYXRS
ZWFkZXIuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS0Zvcm1hdFJlYWRlci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTA1NWIyYzJiNWE2MDMzNzhhZTE0Y2Vk
OTYxMTY2ZDNiODA3Yjc1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS0Zvcm1hdFJlYWRlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVy
biAiQyIgewotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IE9wYXF1ZU1UUGx1Z2luQnl0ZVNvdXJj
ZSogTVRQbHVnaW5CeXRlU291cmNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlTVRQbHVnaW5G
b3JtYXRSZWFkZXIqIE1UUGx1Z2luRm9ybWF0UmVhZGVyUmVmOwotCi1XS19FWFBPUlQgT1NTdGF0
dXMgV0tGb3JtYXRSZWFkZXJDcmVhdGUoQ0ZBbGxvY2F0b3JSZWYsIE1UUGx1Z2luRm9ybWF0UmVh
ZGVyUmVmKik7Ci1XS19FWFBPUlQgT1NTdGF0dXMgV0tGb3JtYXRSZWFkZXJTdGFydE9uTWFpblRo
cmVhZChNVFBsdWdpbkZvcm1hdFJlYWRlclJlZiwgTVRQbHVnaW5CeXRlU291cmNlUmVmKTsKLQot
I2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0FQSS9jL21hYy9XS01lZGlhRm9ybWF0UmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0FQSS9jL21hYy9XS01lZGlhRm9ybWF0UmVhZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDMx
MjYzOWE1NzEzZDZhMDU2NjBkYmU3OTg1ZjA0NWY0NjBiMTMwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLTWVkaWFGb3JtYXRSZWFkZXIuY3BwCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV0tNZWRpYUZvcm1hdFJlYWRlci5oIgorCisjaW5jbHVkZSAiTWVkaWFGb3JtYXRSZWFkZXIu
aCIKKworI2luY2x1ZGUgPHBhbC9jb2NvYS9NZWRpYVRvb2xib3hTb2Z0TGluay5oPgorCitPU1N0
YXR1cyBXS01lZGlhRm9ybWF0UmVhZGVyQ3JlYXRlKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwg
TVRQbHVnaW5Gb3JtYXRSZWFkZXJSZWYqIGZvcm1hdFJlYWRlclJlZikKK3sKKyNpZiBFTkFCTEUo
V0VCTV9GT1JNQVRfUkVBREVSKQorICAgIGF1dG8gZm9ybWF0UmVhZGVyID0gV2ViS2l0OjpNZWRp
YUZvcm1hdFJlYWRlcjo6Y3JlYXRlKGFsbG9jYXRvcik7CisgICAgaWYgKCFmb3JtYXRSZWFkZXIp
CisgICAgICAgIHJldHVybiBrTVRQbHVnaW5Gb3JtYXRSZWFkZXJFcnJvcl9BbGxvY2F0aW9uRmFp
bHVyZTsKKyAgICAqZm9ybWF0UmVhZGVyUmVmID0gZm9ybWF0UmVhZGVyLmxlYWtSZWYoKS0+d3Jh
cHBlcigpOworICAgIHJldHVybiBub0VycjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFsbG9j
YXRvcik7CisgICAgKmZvcm1hdFJlYWRlclJlZiA9IG51bGxwdHI7CisgICAgcmV0dXJuIC0xOwor
I2VuZGlmCit9CisKK09TU3RhdHVzIFdLTWVkaWFGb3JtYXRSZWFkZXJTdGFydE9uTWFpblRocmVh
ZChNVFBsdWdpbkZvcm1hdFJlYWRlclJlZiBmb3JtYXRSZWFkZXJSZWYsIE1UUGx1Z2luQnl0ZVNv
dXJjZVJlZiBieXRlU291cmNlKQoreworI2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCisg
ICAgYXV0byBmb3JtYXRSZWFkZXIgPSBXZWJLaXQ6Ok1lZGlhRm9ybWF0UmVhZGVyOjp1bndyYXAo
Zm9ybWF0UmVhZGVyUmVmKTsKKyAgICBpZiAoIWZvcm1hdFJlYWRlcikKKyAgICAgICAgcmV0dXJu
IHBhcmFtRXJyOworICAgIGZvcm1hdFJlYWRlci0+c3RhcnRPbk1haW5UaHJlYWQoYnl0ZVNvdXJj
ZSk7CisgICAgcmV0dXJuIG5vRXJyOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZm9ybWF0UmVh
ZGVyUmVmKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZVNvdXJjZSk7CisgICAgcmV0dXJuIC0xOwor
I2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tN
ZWRpYUZvcm1hdFJlYWRlci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLTWVk
aWFGb3JtYXRSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTczOTNjYjBmNjY3OTIzMWVlODhhY2NkNjA4
NTE2MDVlMDgwZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJ
L2MvbWFjL1dLTWVkaWFGb3JtYXRSZWFkZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+CisKKyNpZmRlZiBf
X2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVl
TVRQbHVnaW5CeXRlU291cmNlKiBNVFBsdWdpbkJ5dGVTb3VyY2VSZWY7Cit0eXBlZGVmIHN0cnVj
dCBPcGFxdWVNVFBsdWdpbkZvcm1hdFJlYWRlciogTVRQbHVnaW5Gb3JtYXRSZWFkZXJSZWY7CisK
K1dLX0VYUE9SVCBPU1N0YXR1cyBXS01lZGlhRm9ybWF0UmVhZGVyQ3JlYXRlKENGQWxsb2NhdG9y
UmVmLCBNVFBsdWdpbkZvcm1hdFJlYWRlclJlZiopOworV0tfRVhQT1JUIE9TU3RhdHVzIFdLTWVk
aWFGb3JtYXRSZWFkZXJTdGFydE9uTWFpblRocmVhZChNVFBsdWdpbkZvcm1hdFJlYWRlclJlZiwg
TVRQbHVnaW5CeXRlU291cmNlUmVmKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9G
b3JtYXRSZWFkZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL0Zvcm1hdFJlYWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YmVi
NDAwNWU4NGFhNjFiNmQzNTZkOGRkYzIzNzUxNGY5OGM1OWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL0Zvcm1hdFJlYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb3JtYXRS
ZWFkZXIuaCIKLQotI2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCi0KLSNpbmNsdWRlICJU
cmFja1JlYWRlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQXVkaW9UcmFja1ByaXZhdGUuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRUeXBlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbmJhbmRU
ZXh0VHJhY2tQcml2YXRlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNhbXBsZS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvVmlkZW9UcmFja1ByaXZhdGUuaD4KLSNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlh
VGltZUFWRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KLQotI2luY2x1
ZGUgPHBhbC9jb2NvYS9NZWRpYVRvb2xib3hTb2Z0TGluay5oPgotCi1XVEZfREVDTEFSRV9DRl9U
WVBFX1RSQUlUKE1UUGx1Z2luRm9ybWF0UmVhZGVyKTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBQQUw7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQ01CYXNl
Q2xhc3NJRCBGb3JtYXRSZWFkZXI6OndyYXBwZXJDbGFzc0lEKCkKLXsKLSAgICByZXR1cm4gTVRQ
bHVnaW5Gb3JtYXRSZWFkZXJHZXRDbGFzc0lEKCk7Ci19Ci0KLUNvcmVNZWRpYVdyYXBwZWQ8Rm9y
bWF0UmVhZGVyPiogRm9ybWF0UmVhZGVyOjp1bndyYXAoQ01CYXNlT2JqZWN0UmVmIG9iamVjdCkK
LXsKLSAgICByZXR1cm4gdW53cmFwKGNoZWNrZWRfY2ZfY2FzdDxXcmFwcGVyUmVmPihvYmplY3Qp
KTsKLX0KLQotUmVmUHRyPEZvcm1hdFJlYWRlcj4gRm9ybWF0UmVhZGVyOjpjcmVhdGUoQWxsb2Nh
dG9yJiYgYWxsb2NhdG9yKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgKGFsbG9jYXRvcikg
Rm9ybWF0UmVhZGVyKFdURk1vdmUoYWxsb2NhdG9yKSkpOwotfQotCi1Gb3JtYXRSZWFkZXI6OkZv
cm1hdFJlYWRlcihBbGxvY2F0b3ImJiBhbGxvY2F0b3IpCi0gICAgOiBDb3JlTWVkaWFXcmFwcGVk
KFdURk1vdmUoYWxsb2NhdG9yKSkKLSAgICAsIG1fZHVyYXRpb24oTWVkaWFUaW1lOjppbnZhbGlk
VGltZSgpKQotewotfQotCi12b2lkIEZvcm1hdFJlYWRlcjo6c3RhcnRPbk1haW5UaHJlYWQoTVRQ
bHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCi17Ci0gICAgaWYgKGlzTWFpblRocmVhZCgp
KSB7Ci0gICAgICAgIHBhcnNlQnl0ZVNvdXJjZShXVEZNb3ZlKGJ5dGVTb3VyY2UpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYnl0ZVNvdXJjZSA9IHJldGFpblB0cihieXRlU291cmNl
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgcGFyc2VCeXRlU291cmNlKFdURk1vdmUoYnl0ZVNvdXJj
ZSkpOwotICAgIH0pOwotfQotCi1zdGF0aWMgV29ya1F1ZXVlJiByZWFkZXJRdWV1ZSgpCi17Ci0g
ICAgc3RhdGljIGF1dG8mIHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoIldlYktpdDo6Rm9ybWF0
UmVhZGVyIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpDb25jdXJyZW50KS5sZWFrUmVmKCk7Ci0g
ICAgcmV0dXJuIHF1ZXVlOwotfQotCi12b2lkIEZvcm1hdFJlYWRlcjo6cGFyc2VCeXRlU291cmNl
KFJldGFpblB0cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWY+JiYgYnl0ZVNvdXJjZSkKLXsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbnRl
bnRUeXBlPiBjb250ZW50VHlwZSgidmlkZW8vd2VibSJfcyk7Ci0gICAgYXV0byBwYXJzZXIgPSBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpjcmVhdGUoY29udGVudFR5cGUpOwotICAgIGlmICghcGFy
c2VyKSB7Ci0gICAgICAgIG1fcGFyc2VUcmFja3NTdGF0dXMgPSBrTVRQbHVnaW5Gb3JtYXRSZWFk
ZXJFcnJvcl9BbGxvY2F0aW9uRmFpbHVyZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFNldCBhIG1pbmltdW0gYXVkaW8gc2FtcGxlIGR1cmF0aW9uIG9mIDAgc28gdGhlIHBhcnNl
ciBjcmVhdGVzIGluZGl2aXNpYmxlIHNhbXBsZXMgd2l0aCBieXRlIHNvdXJjZSByYW5nZXMuCi0g
ICAgcGFyc2VyLT5zZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbigwKTsKLQotICAgIHBhcnNl
ci0+c2V0Q2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW10oRnVuY3Rpb248dm9pZCgpPiYmIGZ1
bmN0aW9uKSB7Ci0gICAgICAgIFRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKS5kaXNwYXRjaChX
VEZNb3ZlKGZ1bmN0aW9uKSk7Ci0gICAgfSk7Ci0KLSAgICBwYXJzZXItPnNldERpZFBhcnNlSW5p
dGlhbGl6YXRpb25EYXRhQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKV0oU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQmJiBpbml0aWFs
aXphdGlvblNlZ21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikgewotICAgICAgICBkaWRQYXJzZVRyYWNrcyhXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2Vn
bWVudCksIG5vRXJyKTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKLQot
ICAgIHBhcnNlci0+c2V0RGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2soW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0odWludDY0X3QgZXJyb3JDb2RlKSB7
Ci0gICAgICAgIGRpZFBhcnNlVHJhY2tzKHsgfSwgZXJyb3JDb2RlKTsKLSAgICB9KTsKLQotICAg
IHBhcnNlci0+c2V0RGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldKFJlZjxNZWRpYVNhbXBsZT4mJiBtZWRpYVNhbXBsZSwgdWlu
dDY0X3QgdHJhY2tJRCwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUpIHsKLSAgICAgICAgZGlkUHJv
dmlkZU1lZGlhRGF0YShXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgbWVkaWFUeXBlKTsK
LSAgICB9KTsKLQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJzZVRyYWNrc0xvY2sp
OwotICAgIG1fYnl0ZVNvdXJjZSA9IFdURk1vdmUoYnl0ZVNvdXJjZSk7Ci0gICAgbV9wYXJzZVRy
YWNrc1N0YXR1cyA9IFdURjo6bnVsbG9wdDsKLSAgICBtX2R1cmF0aW9uID0gTWVkaWFUaW1lOjpp
bnZhbGlkVGltZSgpOwotICAgIG1fdHJhY2tSZWFkZXJzLmNsZWFyKCk7Ci0KLSAgICByZWFkZXJR
dWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGJ5
dGVTb3VyY2UgPSBtX2J5dGVTb3VyY2UsIHBhcnNlciA9IHBhcnNlci5yZWxlYXNlTm9uTnVsbCgp
XSgpIG11dGFibGUgewotICAgICAgICBwYXJzZXItPmFwcGVuZERhdGEoV1RGTW92ZShieXRlU291
cmNlKSk7Ci0gICAgICAgIFRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKS5kaXNwYXRjaChbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwYXJzZXIgPSBXVEZNb3ZlKHBhcnNl
cildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaW5pc2hQYXJzaW5nKFdURk1vdmUocGFyc2Vy
KSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIEZvcm1hdFJlYWRlcjo6ZGlkUGFy
c2VUcmFja3MoU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50
JiYgc2VnbWVudCwgdWludDY0X3QgZXJyb3JDb2RlKQotewotICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwotCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcnNlVHJhY2tzTG9jayk7
Ci0gICAgQVNTRVJUKCFtX3BhcnNlVHJhY2tzU3RhdHVzKTsKLSAgICBBU1NFUlQobV9kdXJhdGlv
bi5pc0ludmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fdHJhY2tSZWFkZXJzLmlzRW1wdHkoKSk7Ci0K
LSAgICBtX3BhcnNlVHJhY2tzU3RhdHVzID0gZXJyb3JDb2RlID8ga01UUGx1Z2luRm9ybWF0UmVh
ZGVyRXJyb3JfUGFyc2luZ0ZhaWx1cmUgOiBub0VycjsKLSAgICBtX2R1cmF0aW9uID0gV1RGTW92
ZShzZWdtZW50LmR1cmF0aW9uKTsKLQotICAgIGZvciAoYXV0byYgdmlkZW9UcmFjayA6IHNlZ21l
bnQudmlkZW9UcmFja3MpIHsKLSAgICAgICAgYXV0byB0cmFjayA9IHZpZGVvVHJhY2sudHJhY2su
Z2V0KCk7Ci0gICAgICAgIGF1dG8gdHJhY2tSZWFkZXIgPSBUcmFja1JlYWRlcjo6Y3JlYXRlKGFs
bG9jYXRvcigpLCAqdGhpcywga0NNTWVkaWFUeXBlX1ZpZGVvLCAqdHJhY2stPnRyYWNrVUlEKCks
IHRyYWNrLT5kZWZhdWx0RW5hYmxlZCgpKTsKLSAgICAgICAgaWYgKCF0cmFja1JlYWRlcikKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG1fdHJhY2tSZWFkZXJzLmFwcGVuZCh0cmFj
a1JlYWRlci5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGF1ZGlv
VHJhY2sgOiBzZWdtZW50LmF1ZGlvVHJhY2tzKSB7Ci0gICAgICAgIGF1dG8gdHJhY2sgPSBhdWRp
b1RyYWNrLnRyYWNrLmdldCgpOwotICAgICAgICBhdXRvIHRyYWNrUmVhZGVyID0gVHJhY2tSZWFk
ZXI6OmNyZWF0ZShhbGxvY2F0b3IoKSwgKnRoaXMsIGtDTU1lZGlhVHlwZV9BdWRpbywgKnRyYWNr
LT50cmFja1VJRCgpLCB0cmFjay0+ZGVmYXVsdEVuYWJsZWQoKSk7Ci0gICAgICAgIGlmICghdHJh
Y2tSZWFkZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBtX3RyYWNrUmVhZGVy
cy5hcHBlbmQodHJhY2tSZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAgZm9y
IChhdXRvJiB0ZXh0VHJhY2sgOiBzZWdtZW50LnRleHRUcmFja3MpIHsKLSAgICAgICAgYXV0byB0
cmFjayA9IHRleHRUcmFjay50cmFjay5nZXQoKTsKLSAgICAgICAgaWYgKGF1dG8gdHJhY2tSZWFk
ZXIgPSBUcmFja1JlYWRlcjo6Y3JlYXRlKGFsbG9jYXRvcigpLCAqdGhpcywga0NNTWVkaWFUeXBl
X1RleHQsICp0cmFjay0+dHJhY2tVSUQoKSwgdHJhY2stPmRlZmF1bHRFbmFibGVkKCkpKQotICAg
ICAgICAgICAgbV90cmFja1JlYWRlcnMuYXBwZW5kKHRyYWNrUmVhZGVyLnJlbGVhc2VOb25OdWxs
KCkpOwotICAgIH0KLQotICAgIG1fcGFyc2VUcmFja3NDb25kaXRpb24ubm90aWZ5QWxsKCk7Ci19
Ci0KLXZvaWQgRm9ybWF0UmVhZGVyOjpkaWRQcm92aWRlTWVkaWFEYXRhKFJlZjxNZWRpYVNhbXBs
ZT4mJiBtZWRpYVNhbXBsZSwgdWludDY0X3QgdHJhY2tJRCwgY29uc3QgU3RyaW5nJikKLXsKLSAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9wYXJzZVRyYWNrc0xvY2spOwotICAgIGF1dG8gdHJhY2tJbmRleCA9IG1fdHJhY2tSZWFkZXJz
LmZpbmRNYXRjaGluZyhbJl0oYXV0byYgdHJhY2spIHsKLSAgICAgICAgcmV0dXJuIHRyYWNrLT50
cmFja0lEKCkgPT0gdHJhY2tJRDsKLSAgICB9KTsKLQotICAgIGlmICh0cmFja0luZGV4ICE9IG5v
dEZvdW5kKQotICAgICAgICBtX3RyYWNrUmVhZGVyc1t0cmFja0luZGV4XS0+YWRkU2FtcGxlKFdU
Rk1vdmUobWVkaWFTYW1wbGUpLCBtX2J5dGVTb3VyY2UuZ2V0KCkpOwotfQotCi12b2lkIEZvcm1h
dFJlYWRlcjo6ZmluaXNoUGFyc2luZyhSZWY8U291cmNlQnVmZmVyUGFyc2VyPiYmIHBhcnNlcikK
LXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9wYXJzZVRyYWNrc0xvY2spOwotICAgIEFTU0VSVChtX3BhcnNlVHJhY2tzU3RhdHVz
Lmhhc1ZhbHVlKCkpOwotCi0gICAgZm9yIChhdXRvJiB0cmFja1JlYWRlciA6IG1fdHJhY2tSZWFk
ZXJzKQotICAgICAgICB0cmFja1JlYWRlci0+ZmluaXNoUGFyc2luZygpOwotCi0gICAgcGFyc2Vy
LT5zZXREaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKG51bGxwdHIpOwotICAgIHBh
cnNlci0+c2V0RGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2sobnVsbHB0cik7
Ci0gICAgcGFyc2VyLT5zZXREaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2sobnVsbHB0cik7Ci0g
ICAgcGFyc2VyLT5yZXNldFBhcnNlclN0YXRlKCk7Ci19Ci0KLU9TU3RhdHVzIEZvcm1hdFJlYWRl
cjo6Y29weVByb3BlcnR5KENGU3RyaW5nUmVmIGtleSwgQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9y
LCB2b2lkKiB2YWx1ZUNvcHkpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcnNl
VHJhY2tzTG9jayk7Ci0gICAgbV9wYXJzZVRyYWNrc0NvbmRpdGlvbi53YWl0KG1fcGFyc2VUcmFj
a3NMb2NrLCBbJl0gewotICAgICAgICByZXR1cm4gbV9wYXJzZVRyYWNrc1N0YXR1cy5oYXNWYWx1
ZSgpOwotICAgIH0pOwotCi0gICAgaWYgKENGRXF1YWwoa2V5LCBQQUw6OmdldF9NZWRpYVRvb2xi
b3hfa01UUGx1Z2luRm9ybWF0UmVhZGVyUHJvcGVydHlfRHVyYXRpb24oKSkpIHsKLSAgICAgICAg
aWYgKGF1dG8gbGVha2VkRHVyYXRpb24gPSBhZG9wdENGKENNVGltZUNvcHlBc0RpY3Rpb25hcnko
UEFMOjp0b0NNVGltZShtX2R1cmF0aW9uKSwgYWxsb2NhdG9yKSkubGVha1JlZigpKSB7Ci0gICAg
ICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25hcnlSZWYqPih2YWx1ZUNvcHkpID0g
bGVha2VkRHVyYXRpb247Ci0gICAgICAgICAgICByZXR1cm4gbm9FcnI7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4ga0NNQmFzZU9iamVjdEVycm9yX1ZhbHVlTm90QXZhaWxhYmxlOwot
fQotCi1PU1N0YXR1cyBGb3JtYXRSZWFkZXI6OmNvcHlUcmFja0FycmF5KENGQXJyYXlSZWYqIHRy
YWNrQXJyYXlDb3B5KQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJzZVRyYWNr
c0xvY2spOwotICAgIG1fcGFyc2VUcmFja3NDb25kaXRpb24ud2FpdChtX3BhcnNlVHJhY2tzTG9j
aywgWyZdIHsKLSAgICAgICAgcmV0dXJuIG1fcGFyc2VUcmFja3NTdGF0dXMuaGFzVmFsdWUoKTsK
LSAgICB9KTsKLQotICAgIGlmICgqbV9wYXJzZVRyYWNrc1N0YXR1cyAhPSBub0VycikKLSAgICAg
ICAgcmV0dXJuICptX3BhcnNlVHJhY2tzU3RhdHVzOwotCi0gICAgYXV0byBtdXRhYmxlQXJyYXkg
PSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGFsbG9jYXRvcigpLCBDaGVja2VkPENGSW5k
ZXg+KG1fdHJhY2tSZWFkZXJzLnNpemUoKSkudW5zYWZlR2V0KCksICZrQ0ZUeXBlQXJyYXlDYWxs
QmFja3MpKTsKLSAgICBmb3IgKGF1dG8mIHRyYWNrUmVhZGVyIDogbV90cmFja1JlYWRlcnMpCi0g
ICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShtdXRhYmxlQXJyYXkuZ2V0KCksIHRyYWNrUmVhZGVy
LT53cmFwcGVyKCkpOwotCi0gICAgKnRyYWNrQXJyYXlDb3B5ID0gYWRvcHRDRihDRkFycmF5Q3Jl
YXRlQ29weShhbGxvY2F0b3IoKSwgbXV0YWJsZUFycmF5LmdldCgpKSkubGVha1JlZigpOwotICAg
IHJldHVybiBub0VycjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL0Zvcm1hdFJlYWRlci5oIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL0Zvcm1hdFJlYWRlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmYzliNDAzYjJiZDc0YWQ1NThjY2MzNDgzZmVmNTllYmM2ZGQ1YTk2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9Gb3JtYXRSZWFkZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCi0KLSNpbmNsdWRlICJDb3JlTWVkaWFXcmFwcGVk
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Tb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Lmg+Ci0jaW5j
bHVkZSA8d3RmL0NvbmRpdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0KLURFQ0xBUkVf
Q09SRV9NRURJQV9UUkFJVFMoRm9ybWF0UmVhZGVyKTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgU291cmNlQnVmZmVyUGFyc2VyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgVHJhY2tSZWFkZXI7Ci0KLWNsYXNzIEZvcm1hdFJlYWRlciBmaW5hbCA6IHB1YmxpYyBDb3Jl
TWVkaWFXcmFwcGVkPEZvcm1hdFJlYWRlcj4gewotcHVibGljOgotICAgIHVzaW5nIENvcmVNZWRp
YVdyYXBwZWQ8Rm9ybWF0UmVhZGVyPjo6dW53cmFwOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBX
cmFwcGVyQ2xhc3Mgd3JhcHBlckNsYXNzKCk7Ci0gICAgc3RhdGljIENNQmFzZUNsYXNzSUQgd3Jh
cHBlckNsYXNzSUQoKTsKLSAgICBzdGF0aWMgQ29yZU1lZGlhV3JhcHBlZDxGb3JtYXRSZWFkZXI+
KiB1bndyYXAoQ01CYXNlT2JqZWN0UmVmKTsKLQotICAgIHN0YXRpYyBSZWZQdHI8Rm9ybWF0UmVh
ZGVyPiBjcmVhdGUoQWxsb2NhdG9yJiYpOwotCi0gICAgdm9pZCBzdGFydE9uTWFpblRocmVhZChN
VFBsdWdpbkJ5dGVTb3VyY2VSZWYpOwotICAgIGNvbnN0IE1lZGlhVGltZSYgZHVyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgRm9y
bWF0UmVhZGVyKEFsbG9jYXRvciYmKTsKLQotICAgIHZvaWQgcGFyc2VCeXRlU291cmNlKFJldGFp
blB0cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWY+JiYpOwotICAgIHZvaWQgZGlkUGFyc2VUcmFja3Mo
V2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50
JiYsIHVpbnQ2NF90IGVycm9yQ29kZSk7Ci0gICAgdm9pZCBkaWRTZWxlY3RWaWRlb1RyYWNrKFdl
YkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlJiwgYm9vbCkgeyB9Ci0gICAgdm9pZCBkaWRFbmFibGVB
dWRpb1RyYWNrKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlJiwgYm9vbCkgeyB9Ci0gICAgdm9p
ZCBkaWRQcm92aWRlTWVkaWFEYXRhKFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4mJiwgdWludDY0
X3QsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgZmluaXNoUGFyc2luZyhSZWY8V2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyPiYmKTsKLQotICAgIC8vIENNQmFzZUNsYXNzCi0gICAgU3RyaW5n
IGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAiV2ViS2l0OjpGb3JtYXRS
ZWFkZXIiX3M7IH0KLSAgICBPU1N0YXR1cyBjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYsIENGQWxs
b2NhdG9yUmVmLCB2b2lkKiBjb3BpZWRWYWx1ZSkgZmluYWw7Ci0KLSAgICAvLyBXcmFwcGVyQ2xh
c3MKLSAgICBPU1N0YXR1cyBjb3B5VHJhY2tBcnJheShDRkFycmF5UmVmKik7Ci0KLSAgICBSZXRh
aW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiBtX2J5dGVTb3VyY2U7Ci0gICAgQ29uZGl0aW9u
IG1fcGFyc2VUcmFja3NDb25kaXRpb247Ci0gICAgTG9jayBtX3BhcnNlVHJhY2tzTG9jazsKLSAg
ICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKLSAgICBPcHRpb25hbDxPU1N0YXR1cz4gbV9wYXJzZVRy
YWNrc1N0YXR1czsKLSAgICBWZWN0b3I8UmVmPFRyYWNrUmVhZGVyPj4gbV90cmFja1JlYWRlcnM7
Ci19OwotCi1jb25zdGV4cHIgRm9ybWF0UmVhZGVyOjpXcmFwcGVyQ2xhc3MgRm9ybWF0UmVhZGVy
Ojp3cmFwcGVyQ2xhc3MoKQotewotICAgIHJldHVybiB7Ci0gICAgICAgIC52ZXJzaW9uID0ga01U
UGx1Z2luRm9ybWF0UmVhZGVyX0NsYXNzVmVyc2lvbl8xLAotICAgICAgICAuY29weVRyYWNrQXJy
YXkgPSBbXShXcmFwcGVyUmVmIHJlYWRlciwgQ0ZBcnJheVJlZiogdHJhY2tBcnJheUNvcHkpIHsK
LSAgICAgICAgICAgIHJldHVybiB1bndyYXAocmVhZGVyKS0+Y29weVRyYWNrQXJyYXkodHJhY2tB
cnJheUNvcHkpOwotICAgICAgICB9LAotICAgIH07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFG
b3JtYXRSZWFkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxMTc4YzI1YjRmMjJmYWM4NWM2ZWMwOTZlYzAx
NzIzZmFiNjY3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
TWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCkBAIC0wLDAgKzEsMjM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhRm9ybWF0
UmVhZGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQorCisjaW5jbHVkZSAi
TWVkaWFUcmFja1JlYWRlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQXVkaW9UcmFja1ByaXZhdGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRUeXBlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bmJhbmRUZXh0VHJhY2tQcml2YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNhbXBsZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvVmlkZW9UcmFja1ByaXZhdGUuaD4KKyNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9u
L01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKwor
I2luY2x1ZGUgPHBhbC9jb2NvYS9NZWRpYVRvb2xib3hTb2Z0TGluay5oPgorCitXVEZfREVDTEFS
RV9DRl9UWVBFX1RSQUlUKE1UUGx1Z2luRm9ybWF0UmVhZGVyKTsKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3VzaW5nIG5hbWVzcGFjZSBQQUw7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
Q01CYXNlQ2xhc3NJRCBNZWRpYUZvcm1hdFJlYWRlcjo6d3JhcHBlckNsYXNzSUQoKQoreworICAg
IHJldHVybiBNVFBsdWdpbkZvcm1hdFJlYWRlckdldENsYXNzSUQoKTsKK30KKworQ29yZU1lZGlh
V3JhcHBlZDxNZWRpYUZvcm1hdFJlYWRlcj4qIE1lZGlhRm9ybWF0UmVhZGVyOjp1bndyYXAoQ01C
YXNlT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICByZXR1cm4gdW53cmFwKGNoZWNrZWRfY2ZfY2Fz
dDxXcmFwcGVyUmVmPihvYmplY3QpKTsKK30KKworUmVmUHRyPE1lZGlhRm9ybWF0UmVhZGVyPiBN
ZWRpYUZvcm1hdFJlYWRlcjo6Y3JlYXRlKEFsbG9jYXRvciYmIGFsbG9jYXRvcikKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IChhbGxvY2F0b3IpIE1lZGlhRm9ybWF0UmVhZGVyKFdURk1vdmUo
YWxsb2NhdG9yKSkpOworfQorCitNZWRpYUZvcm1hdFJlYWRlcjo6TWVkaWFGb3JtYXRSZWFkZXIo
QWxsb2NhdG9yJiYgYWxsb2NhdG9yKQorICAgIDogQ29yZU1lZGlhV3JhcHBlZChXVEZNb3ZlKGFs
bG9jYXRvcikpCisgICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKK3sK
K30KKwordm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6c3RhcnRPbk1haW5UaHJlYWQoTVRQbHVnaW5C
eXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Cisg
ICAgICAgIHBhcnNlQnl0ZVNvdXJjZShXVEZNb3ZlKGJ5dGVTb3VyY2UpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgYnl0ZVNvdXJjZSA9IHJldGFpblB0cihieXRlU291cmNlKV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgcGFyc2VCeXRlU291cmNlKFdURk1vdmUoYnl0ZVNvdXJjZSkpOwor
ICAgIH0pOworfQorCitzdGF0aWMgV29ya1F1ZXVlJiByZWFkZXJRdWV1ZSgpCit7CisgICAgc3Rh
dGljIGF1dG8mIHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoIldlYktpdDo6TWVkaWFGb3JtYXRS
ZWFkZXIgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OkNvbmN1cnJlbnQpLmxlYWtSZWYoKTsKKyAg
ICByZXR1cm4gcXVldWU7Cit9CisKK3ZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNlQnl0ZVNv
dXJjZShSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiYmIGJ5dGVTb3VyY2UpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxD
b250ZW50VHlwZT4gY29udGVudFR5cGUoInZpZGVvL3dlYm0iX3MpOworICAgIGF1dG8gcGFyc2Vy
ID0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKGNvbnRlbnRUeXBlKTsKKyAgICBpZiAo
IXBhcnNlcikgeworICAgICAgICBtX3BhcnNlVHJhY2tzU3RhdHVzID0ga01UUGx1Z2luRm9ybWF0
UmVhZGVyRXJyb3JfQWxsb2NhdGlvbkZhaWx1cmU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBTZXQgYSBtaW5pbXVtIGF1ZGlvIHNhbXBsZSBkdXJhdGlvbiBvZiAwIHNvIHRoZSBw
YXJzZXIgY3JlYXRlcyBpbmRpdmlzaWJsZSBzYW1wbGVzIHdpdGggYnl0ZSBzb3VyY2UgcmFuZ2Vz
LgorICAgIHBhcnNlci0+c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oMCk7CisKKyAgICBw
YXJzZXItPnNldENhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFtdKEZ1bmN0aW9uPHZvaWQoKT4m
JiBmdW5jdGlvbikgeworICAgICAgICBNZWRpYVRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKS5k
aXNwYXRjaChXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgfSk7CisKKyAgICBwYXJzZXItPnNldERp
ZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKV0oU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQm
JiBpbml0aWFsaXphdGlvblNlZ21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgeworICAgICAgICBkaWRQYXJzZVRyYWNrcyhXVEZNb3ZlKGluaXRpYWxp
emF0aW9uU2VnbWVudCksIG5vRXJyKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAg
ICB9KTsKKworICAgIHBhcnNlci0+c2V0RGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2Fs
bGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0odWludDY0X3QgZXJy
b3JDb2RlKSB7CisgICAgICAgIGRpZFBhcnNlVHJhY2tzKHsgfSwgZXJyb3JDb2RlKTsKKyAgICB9
KTsKKworICAgIHBhcnNlci0+c2V0RGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlZjxNZWRpYVNhbXBsZT4mJiBtZWRpYVNh
bXBsZSwgdWludDY0X3QgdHJhY2tJRCwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUpIHsKKyAgICAg
ICAgZGlkUHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgbWVk
aWFUeXBlKTsKKyAgICB9KTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJzZVRy
YWNrc0xvY2spOworICAgIG1fYnl0ZVNvdXJjZSA9IFdURk1vdmUoYnl0ZVNvdXJjZSk7CisgICAg
bV9wYXJzZVRyYWNrc1N0YXR1cyA9IFdURjo6bnVsbG9wdDsKKyAgICBtX2R1cmF0aW9uID0gTWVk
aWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgIG1fdHJhY2tSZWFkZXJzLmNsZWFyKCk7CisKKyAg
ICByZWFkZXJRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGJ5dGVTb3VyY2UgPSBtX2J5dGVTb3VyY2UsIHBhcnNlciA9IHBhcnNlci5yZWxlYXNl
Tm9uTnVsbCgpXSgpIG11dGFibGUgeworICAgICAgICBwYXJzZXItPmFwcGVuZERhdGEoV1RGTW92
ZShieXRlU291cmNlKSk7CisgICAgICAgIE1lZGlhVHJhY2tSZWFkZXI6OnN0b3JhZ2VRdWV1ZSgp
LmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBhcnNlciA9
IFdURk1vdmUocGFyc2VyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGZpbmlzaFBhcnNpbmco
V1RGTW92ZShwYXJzZXIpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFG
b3JtYXRSZWFkZXI6OmRpZFBhcnNlVHJhY2tzKFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6Oklu
aXRpYWxpemF0aW9uU2VnbWVudCYmIHNlZ21lbnQsIHVpbnQ2NF90IGVycm9yQ29kZSkKK3sKKyAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9wYXJzZVRyYWNrc0xvY2spOworICAgIEFTU0VSVCghbV9wYXJzZVRyYWNrc1N0YXR1cyk7Cisg
ICAgQVNTRVJUKG1fZHVyYXRpb24uaXNJbnZhbGlkKCkpOworICAgIEFTU0VSVChtX3RyYWNrUmVh
ZGVycy5pc0VtcHR5KCkpOworCisgICAgbV9wYXJzZVRyYWNrc1N0YXR1cyA9IGVycm9yQ29kZSA/
IGtNVFBsdWdpbkZvcm1hdFJlYWRlckVycm9yX1BhcnNpbmdGYWlsdXJlIDogbm9FcnI7CisgICAg
bV9kdXJhdGlvbiA9IFdURk1vdmUoc2VnbWVudC5kdXJhdGlvbik7CisKKyAgICBmb3IgKGF1dG8m
IHZpZGVvVHJhY2sgOiBzZWdtZW50LnZpZGVvVHJhY2tzKSB7CisgICAgICAgIGF1dG8gdHJhY2sg
PSB2aWRlb1RyYWNrLnRyYWNrLmdldCgpOworICAgICAgICBhdXRvIHRyYWNrUmVhZGVyID0gTWVk
aWFUcmFja1JlYWRlcjo6Y3JlYXRlKGFsbG9jYXRvcigpLCAqdGhpcywga0NNTWVkaWFUeXBlX1Zp
ZGVvLCAqdHJhY2stPnRyYWNrVUlEKCksIHRyYWNrLT5kZWZhdWx0RW5hYmxlZCgpKTsKKyAgICAg
ICAgaWYgKCF0cmFja1JlYWRlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG1f
dHJhY2tSZWFkZXJzLmFwcGVuZCh0cmFja1JlYWRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9
CisKKyAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBzZWdtZW50LmF1ZGlvVHJhY2tzKSB7Cisg
ICAgICAgIGF1dG8gdHJhY2sgPSBhdWRpb1RyYWNrLnRyYWNrLmdldCgpOworICAgICAgICBhdXRv
IHRyYWNrUmVhZGVyID0gTWVkaWFUcmFja1JlYWRlcjo6Y3JlYXRlKGFsbG9jYXRvcigpLCAqdGhp
cywga0NNTWVkaWFUeXBlX0F1ZGlvLCAqdHJhY2stPnRyYWNrVUlEKCksIHRyYWNrLT5kZWZhdWx0
RW5hYmxlZCgpKTsKKyAgICAgICAgaWYgKCF0cmFja1JlYWRlcikKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIG1fdHJhY2tSZWFkZXJzLmFwcGVuZCh0cmFja1JlYWRlci5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHNlZ21lbnQu
dGV4dFRyYWNrcykgeworICAgICAgICBhdXRvIHRyYWNrID0gdGV4dFRyYWNrLnRyYWNrLmdldCgp
OworICAgICAgICBpZiAoYXV0byB0cmFja1JlYWRlciA9IE1lZGlhVHJhY2tSZWFkZXI6OmNyZWF0
ZShhbGxvY2F0b3IoKSwgKnRoaXMsIGtDTU1lZGlhVHlwZV9UZXh0LCAqdHJhY2stPnRyYWNrVUlE
KCksIHRyYWNrLT5kZWZhdWx0RW5hYmxlZCgpKSkKKyAgICAgICAgICAgIG1fdHJhY2tSZWFkZXJz
LmFwcGVuZCh0cmFja1JlYWRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICBtX3Bh
cnNlVHJhY2tzQ29uZGl0aW9uLm5vdGlmeUFsbCgpOworfQorCit2b2lkIE1lZGlhRm9ybWF0UmVh
ZGVyOjpkaWRQcm92aWRlTWVkaWFEYXRhKFJlZjxNZWRpYVNhbXBsZT4mJiBtZWRpYVNhbXBsZSwg
dWludDY0X3QgdHJhY2tJRCwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJzZVRyYWNrc0xvY2sp
OworICAgIGF1dG8gdHJhY2tJbmRleCA9IG1fdHJhY2tSZWFkZXJzLmZpbmRNYXRjaGluZyhbJl0o
YXV0byYgdHJhY2spIHsKKyAgICAgICAgcmV0dXJuIHRyYWNrLT50cmFja0lEKCkgPT0gdHJhY2tJ
RDsKKyAgICB9KTsKKworICAgIGlmICh0cmFja0luZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICBt
X3RyYWNrUmVhZGVyc1t0cmFja0luZGV4XS0+YWRkU2FtcGxlKFdURk1vdmUobWVkaWFTYW1wbGUp
LCBtX2J5dGVTb3VyY2UuZ2V0KCkpOworfQorCit2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpmaW5p
c2hQYXJzaW5nKFJlZjxTb3VyY2VCdWZmZXJQYXJzZXI+JiYgcGFyc2VyKQoreworICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcnNl
VHJhY2tzTG9jayk7CisgICAgQVNTRVJUKG1fcGFyc2VUcmFja3NTdGF0dXMuaGFzVmFsdWUoKSk7
CisKKyAgICBmb3IgKGF1dG8mIHRyYWNrUmVhZGVyIDogbV90cmFja1JlYWRlcnMpCisgICAgICAg
IHRyYWNrUmVhZGVyLT5maW5pc2hQYXJzaW5nKCk7CisKKyAgICBwYXJzZXItPnNldERpZFBhcnNl
SW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2sobnVsbHB0cik7CisgICAgcGFyc2VyLT5zZXREaWRF
bmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdDYWxsYmFjayhudWxscHRyKTsKKyAgICBwYXJzZXIt
PnNldERpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjayhudWxscHRyKTsKKyAgICBwYXJzZXItPnJl
c2V0UGFyc2VyU3RhdGUoKTsKK30KKworT1NTdGF0dXMgTWVkaWFGb3JtYXRSZWFkZXI6OmNvcHlQ
cm9wZXJ0eShDRlN0cmluZ1JlZiBrZXksIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgdm9pZCog
dmFsdWVDb3B5KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJzZVRyYWNrc0xv
Y2spOworICAgIG1fcGFyc2VUcmFja3NDb25kaXRpb24ud2FpdChtX3BhcnNlVHJhY2tzTG9jaywg
WyZdIHsKKyAgICAgICAgcmV0dXJuIG1fcGFyc2VUcmFja3NTdGF0dXMuaGFzVmFsdWUoKTsKKyAg
ICB9KTsKKworICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpnZXRfTWVkaWFUb29sYm94X2tNVFBs
dWdpbkZvcm1hdFJlYWRlclByb3BlcnR5X0R1cmF0aW9uKCkpKSB7CisgICAgICAgIGlmIChhdXRv
IGxlYWtlZER1cmF0aW9uID0gYWRvcHRDRihDTVRpbWVDb3B5QXNEaWN0aW9uYXJ5KFBBTDo6dG9D
TVRpbWUobV9kdXJhdGlvbiksIGFsbG9jYXRvcikpLmxlYWtSZWYoKSkgeworICAgICAgICAgICAg
KnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmKj4odmFsdWVDb3B5KSA9IGxlYWtlZER1
cmF0aW9uOworICAgICAgICAgICAgcmV0dXJuIG5vRXJyOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGtDTUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5vdEF2YWlsYWJsZTsKK30KKworT1NT
dGF0dXMgTWVkaWFGb3JtYXRSZWFkZXI6OmNvcHlUcmFja0FycmF5KENGQXJyYXlSZWYqIHRyYWNr
QXJyYXlDb3B5KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJzZVRyYWNrc0xv
Y2spOworICAgIG1fcGFyc2VUcmFja3NDb25kaXRpb24ud2FpdChtX3BhcnNlVHJhY2tzTG9jaywg
WyZdIHsKKyAgICAgICAgcmV0dXJuIG1fcGFyc2VUcmFja3NTdGF0dXMuaGFzVmFsdWUoKTsKKyAg
ICB9KTsKKworICAgIGlmICgqbV9wYXJzZVRyYWNrc1N0YXR1cyAhPSBub0VycikKKyAgICAgICAg
cmV0dXJuICptX3BhcnNlVHJhY2tzU3RhdHVzOworCisgICAgYXV0byBtdXRhYmxlQXJyYXkgPSBh
ZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGFsbG9jYXRvcigpLCBDaGVja2VkPENGSW5kZXg+
KG1fdHJhY2tSZWFkZXJzLnNpemUoKSkudW5zYWZlR2V0KCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFj
a3MpKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrUmVhZGVyIDogbV90cmFja1JlYWRlcnMpCisgICAg
ICAgIENGQXJyYXlBcHBlbmRWYWx1ZShtdXRhYmxlQXJyYXkuZ2V0KCksIHRyYWNrUmVhZGVyLT53
cmFwcGVyKCkpOworCisgICAgKnRyYWNrQXJyYXlDb3B5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRl
Q29weShhbGxvY2F0b3IoKSwgbXV0YWJsZUFycmF5LmdldCgpKSkubGVha1JlZigpOworICAgIHJl
dHVybiBub0VycjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCTV9GT1JNQVRfUkVBREVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmggYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40M2FkYmE2ZGEzMDI3ZjA2NTYxN2RkNzVkN2NlZmMzZmQ5Yzk4YTg2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlh
Rm9ybWF0UmVhZGVyLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKKworI2luY2x1ZGUgIkNvcmVNZWRp
YVdyYXBwZWQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQu
aD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKwor
REVDTEFSRV9DT1JFX01FRElBX1RSQUlUUyhNZWRpYUZvcm1hdFJlYWRlcik7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIFNvdXJjZUJ1ZmZlclBhcnNlcjsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIE1lZGlhVHJhY2tSZWFkZXI7CisKK2NsYXNzIE1lZGlhRm9ybWF0UmVh
ZGVyIGZpbmFsIDogcHVibGljIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFGb3JtYXRSZWFkZXI+IHsK
K3B1YmxpYzoKKyAgICB1c2luZyBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhRm9ybWF0UmVhZGVyPjo6
dW53cmFwOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBXcmFwcGVyQ2xhc3Mgd3JhcHBlckNsYXNz
KCk7CisgICAgc3RhdGljIENNQmFzZUNsYXNzSUQgd3JhcHBlckNsYXNzSUQoKTsKKyAgICBzdGF0
aWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYUZvcm1hdFJlYWRlcj4qIHVud3JhcChDTUJhc2VPYmpl
Y3RSZWYpOworCisgICAgc3RhdGljIFJlZlB0cjxNZWRpYUZvcm1hdFJlYWRlcj4gY3JlYXRlKEFs
bG9jYXRvciYmKTsKKworICAgIHZvaWQgc3RhcnRPbk1haW5UaHJlYWQoTVRQbHVnaW5CeXRlU291
cmNlUmVmKTsKKyAgICBjb25zdCBNZWRpYVRpbWUmIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IE1lZGlhRm9ybWF0UmVhZGVy
KEFsbG9jYXRvciYmKTsKKworICAgIHZvaWQgcGFyc2VCeXRlU291cmNlKFJldGFpblB0cjxNVFBs
dWdpbkJ5dGVTb3VyY2VSZWY+JiYpOworICAgIHZvaWQgZGlkUGFyc2VUcmFja3MoV2ViQ29yZTo6
U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYsIHVpbnQ2
NF90IGVycm9yQ29kZSk7CisgICAgdm9pZCBkaWRTZWxlY3RWaWRlb1RyYWNrKFdlYkNvcmU6OlZp
ZGVvVHJhY2tQcml2YXRlJiwgYm9vbCkgeyB9CisgICAgdm9pZCBkaWRFbmFibGVBdWRpb1RyYWNr
KFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlJiwgYm9vbCkgeyB9CisgICAgdm9pZCBkaWRQcm92
aWRlTWVkaWFEYXRhKFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4mJiwgdWludDY0X3QsIGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgZmluaXNoUGFyc2luZyhSZWY8V2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyPiYmKTsKKworICAgIC8vIENNQmFzZUNsYXNzCisgICAgU3RyaW5nIGRlYnVnRGVz
Y3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAiV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRl
ciJfczsgfQorICAgIE9TU3RhdHVzIGNvcHlQcm9wZXJ0eShDRlN0cmluZ1JlZiwgQ0ZBbGxvY2F0
b3JSZWYsIHZvaWQqIGNvcGllZFZhbHVlKSBmaW5hbDsKKworICAgIC8vIFdyYXBwZXJDbGFzcwor
ICAgIE9TU3RhdHVzIGNvcHlUcmFja0FycmF5KENGQXJyYXlSZWYqKTsKKworICAgIFJldGFpblB0
cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWY+IG1fYnl0ZVNvdXJjZTsKKyAgICBDb25kaXRpb24gbV9w
YXJzZVRyYWNrc0NvbmRpdGlvbjsKKyAgICBMb2NrIG1fcGFyc2VUcmFja3NMb2NrOworICAgIE1l
ZGlhVGltZSBtX2R1cmF0aW9uOworICAgIE9wdGlvbmFsPE9TU3RhdHVzPiBtX3BhcnNlVHJhY2tz
U3RhdHVzOworICAgIFZlY3RvcjxSZWY8TWVkaWFUcmFja1JlYWRlcj4+IG1fdHJhY2tSZWFkZXJz
OworfTsKKworY29uc3RleHByIE1lZGlhRm9ybWF0UmVhZGVyOjpXcmFwcGVyQ2xhc3MgTWVkaWFG
b3JtYXRSZWFkZXI6OndyYXBwZXJDbGFzcygpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgLnZl
cnNpb24gPSBrTVRQbHVnaW5Gb3JtYXRSZWFkZXJfQ2xhc3NWZXJzaW9uXzEsCisgICAgICAgIC5j
b3B5VHJhY2tBcnJheSA9IFtdKFdyYXBwZXJSZWYgcmVhZGVyLCBDRkFycmF5UmVmKiB0cmFja0Fy
cmF5Q29weSkgeworICAgICAgICAgICAgcmV0dXJuIHVud3JhcChyZWFkZXIpLT5jb3B5VHJhY2tB
cnJheSh0cmFja0FycmF5Q29weSk7CisgICAgICAgIH0sCisgICAgfTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlh
U2FtcGxlQnl0ZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1h
dFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTUyZjYwNDljOWQw
NjFlODcxODFhNGUxZjdlNGNiOTg5N2Q2NjZiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5j
cHAKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oIgorCisjaWYgRU5BQkxFKFdFQk1fRk9STUFU
X1JFQURFUikKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBQQUw7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTWVkaWFTYW1wbGVCeXRlUmFuZ2U6Ok1lZGlhU2Ft
cGxlQnl0ZVJhbmdlKE1lZGlhU2FtcGxlJiBzYW1wbGUsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBi
eXRlU291cmNlLCB1aW50NjRfdCB0cmFja0lEKQorICAgIDogTWVkaWFTYW1wbGVBVkZPYmpDKG51
bGxwdHIpCisgICAgLCBtX3ByZXNlbnRhdGlvblRpbWUoc2FtcGxlLnByZXNlbnRhdGlvblRpbWUo
KSkKKyAgICAsIG1fZGVjb2RlVGltZShzYW1wbGUuZGVjb2RlVGltZSgpKQorICAgICwgbV9kdXJh
dGlvbihzYW1wbGUuZHVyYXRpb24oKSkKKyAgICAsIG1fc2l6ZUluQnl0ZXMoc2FtcGxlLnNpemVJ
bkJ5dGVzKCkpCisgICAgLCBtX3ByZXNlbnRhdGlvblNpemUoc2FtcGxlLnByZXNlbnRhdGlvblNp
emUoKSkKKyAgICAsIG1fZmxhZ3Moc2FtcGxlLmZsYWdzKCkpCisgICAgLCBtX3RyYWNrSUQodHJh
Y2tJRCkKKyAgICAsIG1fYnl0ZVJhbmdlKHNhbXBsZS5ieXRlUmFuZ2UoKSkKKyAgICAsIG1fYnl0
ZVNvdXJjZShieXRlU291cmNlKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAg
IGF1dG8gcGxhdGZvcm1TYW1wbGUgPSBzYW1wbGUucGxhdGZvcm1TYW1wbGUoKTsKKyAgICBzd2l0
Y2ggKHBsYXRmb3JtU2FtcGxlLnR5cGUpIHsKKyAgICBjYXNlIFBsYXRmb3JtU2FtcGxlOjpDTVNh
bXBsZUJ1ZmZlclR5cGU6CisgICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24gPSBDTVNhbXBsZUJ1
ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHBsYXRmb3JtU2FtcGxlLnNhbXBsZS5jbVNhbXBsZUJ1
ZmZlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5n
ZVNhbXBsZVR5cGU6CisgICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24gPSBwbGF0Zm9ybVNhbXBs
ZS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworQXRvbVN0cmluZyBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6dHJhY2tJRCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEF0b21TdHJpbmc6Om51bWJlcihtX3RyYWNrSUQpOworfQorCitQbGF0
Zm9ybVNhbXBsZSBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6cGxhdGZvcm1TYW1wbGUoKQoreworICAg
IHJldHVybiB7CisgICAgICAgIFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlLAor
ICAgICAgICB7IC5ieXRlUmFuZ2VTYW1wbGUgPSBzdGQ6Om1ha2VfcGFpcihtX2J5dGVTb3VyY2Uu
Z2V0KCksIG1fZm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpIH0sCisgICAgfTsKK30KKwordm9pZCBN
ZWRpYVNhbXBsZUJ5dGVSYW5nZTo6b2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYg
b2Zmc2V0KQoreworICAgIHNldFRpbWVzdGFtcHMocHJlc2VudGF0aW9uVGltZSgpICsgb2Zmc2V0
LCBkZWNvZGVUaW1lKCkgKyBvZmZzZXQpOworfQorCit2b2lkIE1lZGlhU2FtcGxlQnl0ZVJhbmdl
OjpzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgY29uc3Qg
TWVkaWFUaW1lJiBkZWNvZGVUaW1lKQoreworICAgIG1fcHJlc2VudGF0aW9uVGltZSA9IHByZXNl
bnRhdGlvblRpbWU7CisgICAgbV9kZWNvZGVUaW1lID0gZGVjb2RlVGltZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01l
ZGlhU2FtcGxlQnl0ZVJhbmdlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3Jt
YXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjY0NmVlODI1YmFi
MzI5YTdlMWRmYmQwNzgxNTczYjEyMDc1YjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmgK
QEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQk1fRk9STUFUX1JFQURFUikKKworI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTYW1wbGVBVkZP
YmpDLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9NZWRpYVRvb2xib3hTUEkuaD4KKyNpbmNs
dWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTWVkaWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJs
aWMgV2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZPYmpDIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PE1lZGlhU2FtcGxlQnl0ZVJhbmdlPiBjcmVhdGUoV2ViQ29yZTo6TWVkaWFTYW1wbGUmIHNhbXBs
ZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UsIHVpbnQ2NF90IHRyYWNrSUQpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBsZUJ5dGVSYW5nZShz
YW1wbGUsIGJ5dGVTb3VyY2UsIHRyYWNrSUQpKTsKKyAgICB9CisKKyAgICBNZWRpYVRpbWUgcHJl
c2VudGF0aW9uVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJlc2VudGF0aW9uVGltZTsg
fQorICAgIE1lZGlhVGltZSBkZWNvZGVUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kZWNv
ZGVUaW1lOyB9CisgICAgTWVkaWFUaW1lIGR1cmF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQorICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc2l6ZUluQnl0ZXM7IH0KKyAgICBGbG9hdFNpemUgcHJlc2VudGF0aW9uU2l6ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJlc2VudGF0aW9uU2l6ZTsgfQorICAgIFNhbXBsZUZsYWdz
IGZsYWdzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9mbGFnczsgfQorICAgIE9wdGlvbmFsPEJ5
dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9ieXRlUmFuZ2U7IH0K
KworICAgIEF0b21TdHJpbmcgdHJhY2tJRCgpIGNvbnN0IGZpbmFsOworICAgIFBsYXRmb3JtU2Ft
cGxlIHBsYXRmb3JtU2FtcGxlKCkgZmluYWw7CisgICAgdm9pZCBvZmZzZXRUaW1lc3RhbXBzQnko
Y29uc3QgTWVkaWFUaW1lJikgZmluYWw7CisgICAgdm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1l
ZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOworCitwcml2YXRlOgorICAgIE1lZGlh
U2FtcGxlQnl0ZVJhbmdlKE1lZGlhU2FtcGxlJiwgTVRQbHVnaW5CeXRlU291cmNlUmVmLCB1aW50
NjRfdCB0cmFja0lEKTsKKworICAgIE1lZGlhVGltZSBtX3ByZXNlbnRhdGlvblRpbWU7CisgICAg
TWVkaWFUaW1lIG1fZGVjb2RlVGltZTsKKyAgICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKKyAgICBz
aXplX3QgbV9zaXplSW5CeXRlczsKKyAgICBGbG9hdFNpemUgbV9wcmVzZW50YXRpb25TaXplOwor
ICAgIFNhbXBsZUZsYWdzIG1fZmxhZ3M7CisgICAgdWludDY0X3QgbV90cmFja0lEOworICAgIE9w
dGlvbmFsPEJ5dGVSYW5nZT4gbV9ieXRlUmFuZ2U7CisgICAgUmV0YWluUHRyPE1UUGx1Z2luQnl0
ZVNvdXJjZVJlZj4gbV9ieXRlU291cmNlOworICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0
aW9uUmVmPiBtX2Zvcm1hdERlc2NyaXB0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29y
LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNh
bXBsZUN1cnNvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmRiOTIwYmY2MTUxMzIwZmNiMjE1M2UzYWNkNTg3
NjFlZThjZWY4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9N
ZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5jcHAKQEAgLTAsMCArMSwzNjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVD
dXJzb3IuaCIKKworI2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCisKKyNpbmNsdWRlICJN
ZWRpYVRyYWNrUmVhZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNhbXBsZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvU2FtcGxlTWFwLmg+CisjaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9N
ZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4K
KworI2luY2x1ZGUgPHBhbC9jb2NvYS9NZWRpYVRvb2xib3hTb2Z0TGluay5oPgorCitXVEZfREVD
TEFSRV9DRl9UWVBFX1RSQUlUKE1UUGx1Z2luU2FtcGxlQ3Vyc29yKTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBQQUw7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
Kworc3RhdGljIE9wdGlvbmFsPE1lZGlhU2FtcGxlQ3Vyc29yOjpEZWNvZGVPcmRlckl0ZXJhdG9y
PiBtYWtlSXRlcmF0b3IoY29uc3QgTWVkaWFTYW1wbGVDdXJzb3I6OkRlY29kZWRTYW1wbGUmIGRl
Y29kZWRTYW1wbGUsIFNhbXBsZU1hcCYgc2FtcGxlcywgYm9vbCBoYXNBbGxTYW1wbGVzKQorewor
ICAgIGF1dG8mIGRlY29kZU9yZGVyID0gc2FtcGxlcy5kZWNvZGVPcmRlcigpOworICAgIHN3aXRj
aCAoZGVjb2RlZFNhbXBsZSkgeworICAgIGNhc2UgTWVkaWFTYW1wbGVDdXJzb3I6OkRlY29kZWRT
YW1wbGU6OkZpcnN0OgorICAgICAgICBpZiAoc2FtcGxlcy5zaXplKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZGVjb2RlT3JkZXIuYmVnaW4oKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRp
YVNhbXBsZUN1cnNvcjo6RGVjb2RlZFNhbXBsZTo6TGFzdDoKKyAgICAgICAgaWYgKHNhbXBsZXMu
c2l6ZSgpICYmIGhhc0FsbFNhbXBsZXMpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpwcmV2KGRl
Y29kZU9yZGVyLmVuZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxNZWRpYVNhbXBsZUN1cnNvcjo6RGVjb2Rl
T3JkZXJJdGVyYXRvcj4gbWFrZUl0ZXJhdG9yKGNvbnN0IE1lZGlhU2FtcGxlQ3Vyc29yOjpQcmVz
ZW50YXRpb25PcmRlckl0ZXJhdG9yJiBpdGVyYXRvciwgU2FtcGxlTWFwJiBzYW1wbGVzLCBib29s
KQoreworICAgIE1lZGlhU2FtcGxlJiBzYW1wbGUgPSAqaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsK
KyAgICByZXR1cm4gc2FtcGxlcy5kZWNvZGVPcmRlcigpLmZpbmRTYW1wbGVXaXRoRGVjb2RlS2V5
KHN0ZDo6bWFrZV9wYWlyKHNhbXBsZS5kZWNvZGVUaW1lKCksIHNhbXBsZS5wcmVzZW50YXRpb25U
aW1lKCkpKTsKK30KKworc3RhdGljIE9wdGlvbmFsPE1lZGlhU2FtcGxlQ3Vyc29yOjpQcmVzZW50
YXRpb25PcmRlckl0ZXJhdG9yPiBtYWtlSXRlcmF0b3IoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50
YXRpb25UaW1lLCBTYW1wbGVNYXAmIHNhbXBsZXMsIGJvb2wgaGFzQWxsU2FtcGxlcykKK3sKKyAg
ICBhdXRvJiBwcmVzZW50YXRpb25PcmRlciA9IHNhbXBsZXMucHJlc2VudGF0aW9uT3JkZXIoKTsK
KyAgICBhdXRvIGl0ZXJhdG9yID0gcHJlc2VudGF0aW9uT3JkZXIuZmluZFNhbXBsZUNvbnRhaW5p
bmdPckFmdGVyUHJlc2VudGF0aW9uVGltZShwcmVzZW50YXRpb25UaW1lKTsKKyAgICBpZiAoaXRl
cmF0b3IgIT0gcHJlc2VudGF0aW9uT3JkZXIuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyYXRv
cjsKKyAgICBpZiAoc2FtcGxlcy5zaXplKCkgJiYgaGFzQWxsU2FtcGxlcykKKyAgICAgICAgcmV0
dXJuIHN0ZDo6cHJldihpdGVyYXRvcik7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwor
c3RhdGljIE9wdGlvbmFsPE1lZGlhU2FtcGxlQ3Vyc29yOjpQcmVzZW50YXRpb25PcmRlckl0ZXJh
dG9yPiBtYWtlSXRlcmF0b3IoY29uc3QgTWVkaWFTYW1wbGVDdXJzb3I6OkRlY29kZU9yZGVySXRl
cmF0b3ImIGl0ZXJhdG9yLCBTYW1wbGVNYXAmIHNhbXBsZXMsIGJvb2wpCit7CisgICAgTWVkaWFT
YW1wbGUmIHNhbXBsZSA9ICppdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBzYW1w
bGVzLnByZXNlbnRhdGlvbk9yZGVyKCkuZmluZFNhbXBsZVdpdGhQcmVzZW50YXRpb25UaW1lKHNh
bXBsZS5wcmVzZW50YXRpb25UaW1lKCkpOworfQorCitzdGF0aWMgTWVkaWFUaW1lIG1ha2VUaW1l
KGNvbnN0IERlY29kZU9yZGVyU2FtcGxlTWFwOjppdGVyYXRvciYgaXQpCit7CisgICAgcmV0dXJu
IGl0LT5zZWNvbmQtPmRlY29kZVRpbWUoKTsKK30KKworc3RhdGljIE1lZGlhVGltZSBtYWtlVGlt
ZShjb25zdCBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRlcmF0b3ImIGl0KQoreworICAg
IHJldHVybiBpdC0+c2Vjb25kLT5wcmVzZW50YXRpb25UaW1lKCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE9yZGVyZWRNYXA+IHN0YXRpYyBPcmRlcmVkTWFwJiBvcmRlcmVkU2FtcGxlcyhTYW1w
bGVNYXAmKTsKKwordGVtcGxhdGU8PgorRGVjb2RlT3JkZXJTYW1wbGVNYXAmIG9yZGVyZWRTYW1w
bGVzKFNhbXBsZU1hcCYgc2FtcGxlcykKK3sKKyAgICByZXR1cm4gc2FtcGxlcy5kZWNvZGVPcmRl
cigpOworfQorCit0ZW1wbGF0ZTw+CitQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcCYgb3JkZXJl
ZFNhbXBsZXMoU2FtcGxlTWFwJiBzYW1wbGVzKQoreworICAgIHJldHVybiBzYW1wbGVzLnByZXNl
bnRhdGlvbk9yZGVyKCk7Cit9CisKK3N0YXRpYyBEZWNvZGVPcmRlclNhbXBsZU1hcDo6aXRlcmF0
b3IgdXBwZXJCb3VuZChEZWNvZGVPcmRlclNhbXBsZU1hcCYgbWFwLCBjb25zdCBNZWRpYVRpbWUm
IHRpbWUpCit7CisgICAgcmV0dXJuIG1hcC5maW5kU2FtcGxlQWZ0ZXJEZWNvZGVLZXkoc3RkOjpt
YWtlX3BhaXIodGltZSwgTWVkaWFUaW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpKSk7Cit9CisK
K3N0YXRpYyBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRlcmF0b3IgdXBwZXJCb3VuZChQ
cmVzZW50YXRpb25PcmRlclNhbXBsZU1hcCYgbWFwLCBjb25zdCBNZWRpYVRpbWUmIHRpbWUpCit7
CisgICAgcmV0dXJuIG1hcC5maW5kU2FtcGxlU3RhcnRpbmdBZnRlclByZXNlbnRhdGlvblRpbWUo
dGltZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9yZGVyZWRNYXAsIHR5cGVuYW1lIFN0ZXA+
IHN0YXRpYyBTdGVwIHN0ZXBJdGVyYXRvcihTdGVwLCB0eXBlbmFtZSBPcmRlcmVkTWFwOjppdGVy
YXRvciYsIE9yZGVyZWRNYXAmKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3JkZXJlZE1hcD4KK2lu
dDY0X3Qgc3RlcEl0ZXJhdG9yKGludDY0X3Qgc3RlcHNSZW1haW5pbmcsIHR5cGVuYW1lIE9yZGVy
ZWRNYXA6Oml0ZXJhdG9yJiBpdGVyYXRvciwgT3JkZXJlZE1hcCYgc2FtcGxlcykKK3sKKyAgICBB
U1NFUlQoaXRlcmF0b3IgIT0gc2FtcGxlcy5lbmQoKSk7CisgICAgaWYgKHN0ZXBzUmVtYWluaW5n
IDwgMCkKKyAgICAgICAgZm9yICg7IHN0ZXBzUmVtYWluaW5nICYmIGl0ZXJhdG9yICE9IHNhbXBs
ZXMuYmVnaW4oKTsgKytzdGVwc1JlbWFpbmluZywgLS1pdGVyYXRvcikgeyB9CisgICAgZWxzZQor
ICAgICAgICBmb3IgKGF1dG8gbmV4dCA9IHN0ZDo6bmV4dChpdGVyYXRvcik7IHN0ZXBzUmVtYWlu
aW5nICYmIG5leHQgIT0gc2FtcGxlcy5lbmQoKTsgLS1zdGVwc1JlbWFpbmluZywgaXRlcmF0b3Ig
PSBuZXh0KyspIHsgfQorICAgIHJldHVybiBzdGVwc1JlbWFpbmluZzsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgT3JkZXJlZE1hcD4KK01lZGlhVGltZSBzdGVwSXRlcmF0b3IoTWVkaWFUaW1lIGRl
bHRhUmVtYWluaW5nLCB0eXBlbmFtZSBPcmRlcmVkTWFwOjppdGVyYXRvciYgaXRlcmF0b3IsIE9y
ZGVyZWRNYXAmIHNhbXBsZXMpCit7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IHNhbXBsZXMuZW5k
KCkpOworICAgIGF1dG8gcmVxdWVzdGVkVGltZSA9IG1ha2VUaW1lKGl0ZXJhdG9yKSArIGRlbHRh
UmVtYWluaW5nOworICAgIGl0ZXJhdG9yID0gdXBwZXJCb3VuZChzYW1wbGVzLCByZXF1ZXN0ZWRU
aW1lKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gc2FtcGxlcy5iZWdpbigpKQorICAgICAgICAtLWl0
ZXJhdG9yOworICAgIGRlbHRhUmVtYWluaW5nID0gcmVxdWVzdGVkVGltZSAtIG1ha2VUaW1lKGl0
ZXJhdG9yKTsKKyAgICBpZiAoZGVsdGFSZW1haW5pbmcgPiBNZWRpYVRpbWU6Onplcm9UaW1lKCkg
JiYgZGVsdGFSZW1haW5pbmcgPCBpdGVyYXRvci0+c2Vjb25kLT5kdXJhdGlvbigpKQorICAgICAg
ICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOworICAgIHJldHVybiBkZWx0YVJlbWFpbmlu
ZzsKK30KKworQ01CYXNlQ2xhc3NJRCBNZWRpYVNhbXBsZUN1cnNvcjo6d3JhcHBlckNsYXNzSUQo
KQoreworICAgIHJldHVybiBNVFBsdWdpblNhbXBsZUN1cnNvckdldENsYXNzSUQoKTsKK30KKwor
Q29yZU1lZGlhV3JhcHBlZDxNZWRpYVNhbXBsZUN1cnNvcj4qIE1lZGlhU2FtcGxlQ3Vyc29yOjp1
bndyYXAoQ01CYXNlT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICByZXR1cm4gdW53cmFwKGNoZWNr
ZWRfY2ZfY2FzdDxXcmFwcGVyUmVmPihvYmplY3QpKTsKK30KKworUmVmUHRyPE1lZGlhU2FtcGxl
Q3Vyc29yPiBNZWRpYVNhbXBsZUN1cnNvcjo6Y3JlYXRlQXRQcmVzZW50YXRpb25UaW1lKEFsbG9j
YXRvciYmIGFsbG9jYXRvciwgTWVkaWFUcmFja1JlYWRlciYgdHJhY2tSZWFkZXIsIE1lZGlhVGlt
ZSB0aW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgKGFsbG9jYXRvcikgTWVkaWFTYW1w
bGVDdXJzb3IoV1RGTW92ZShhbGxvY2F0b3IpLCB0cmFja1JlYWRlciwgV1RGTW92ZSh0aW1lKSkp
OworfQorCitSZWZQdHI8TWVkaWFTYW1wbGVDdXJzb3I+IE1lZGlhU2FtcGxlQ3Vyc29yOjpjcmVh
dGVBdERlY29kZWRTYW1wbGUoQWxsb2NhdG9yJiYgYWxsb2NhdG9yLCBNZWRpYVRyYWNrUmVhZGVy
JiB0cmFja1JlYWRlciwgRGVjb2RlZFNhbXBsZSBkZWNvZGVkU2FtcGxlKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgKGFsbG9jYXRvcikgTWVkaWFTYW1wbGVDdXJzb3IoV1RGTW92ZShhbGxv
Y2F0b3IpLCB0cmFja1JlYWRlciwgV1RGTW92ZShkZWNvZGVkU2FtcGxlKSkpOworfQorCitSZWZQ
dHI8TWVkaWFTYW1wbGVDdXJzb3I+IE1lZGlhU2FtcGxlQ3Vyc29yOjpjb3B5KEFsbG9jYXRvciYm
IGFsbG9jYXRvciwgY29uc3QgTWVkaWFTYW1wbGVDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKGN1cnNvci5tX2xvY2F0b3JMb2NrKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IChhbGxvY2F0b3IpIE1lZGlhU2FtcGxlQ3Vyc29yKFdURk1vdmUoYWxsb2NhdG9y
KSwgY3Vyc29yKSk7Cit9CisKK01lZGlhU2FtcGxlQ3Vyc29yOjpNZWRpYVNhbXBsZUN1cnNvcihB
bGxvY2F0b3ImJiBhbGxvY2F0b3IsIE1lZGlhVHJhY2tSZWFkZXImIHRyYWNrUmVhZGVyLCBMb2Nh
dG9yIGxvY2F0b3IpCisgICAgOiBDb3JlTWVkaWFXcmFwcGVkKFdURk1vdmUoYWxsb2NhdG9yKSkK
KyAgICAsIG1fdHJhY2tSZWFkZXIodHJhY2tSZWFkZXIpCisgICAgLCBtX2xvY2F0b3IoV1RGTW92
ZShsb2NhdG9yKSkKK3sKK30KKworTWVkaWFTYW1wbGVDdXJzb3I6Ok1lZGlhU2FtcGxlQ3Vyc29y
KEFsbG9jYXRvciYmIGFsbG9jYXRvciwgY29uc3QgTWVkaWFTYW1wbGVDdXJzb3ImIGN1cnNvcikK
KyAgICA6IENvcmVNZWRpYVdyYXBwZWQoV1RGTW92ZShhbGxvY2F0b3IpKQorICAgICwgbV90cmFj
a1JlYWRlcihjdXJzb3IubV90cmFja1JlYWRlci5jb3B5UmVmKCkpCisgICAgLCBtX2xvY2F0b3Io
Y3Vyc29yLm1fbG9jYXRvcikKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+CitP
cHRpb25hbDxJdGVyYXRvcj4gTWVkaWFTYW1wbGVDdXJzb3I6OmxvY2F0ZUl0ZXJhdG9yKFNhbXBs
ZU1hcCYgc2FtcGxlcywgYm9vbCBoYXNBbGxTYW1wbGVzKSBjb25zdAoreworICAgIEFTU0VSVCht
X2xvY2F0b3JMb2NrLmlzTG9ja2VkKCkpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fbG9j
YXRvciwKKyAgICAgICAgWyZdKGNvbnN0IGF1dG8mIGxvY2F0b3IpIC0+IE9wdGlvbmFsPEl0ZXJh
dG9yPiB7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbWFrZUl0ZXJhdG9yKGxvY2F0b3Is
IHNhbXBsZXMsIGhhc0FsbFNhbXBsZXMpOworICAgICAgICAgICAgaWYgKCFpdGVyYXRvcikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgbV9sb2NhdG9y
ID0gV1RGTW92ZSgqaXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuIGxvY2F0ZUl0ZXJhdG9y
PEl0ZXJhdG9yPihzYW1wbGVzLCBoYXNBbGxTYW1wbGVzKTsKKyAgICAgICAgfSwKKyAgICAgICAg
WyZdKGNvbnN0IEl0ZXJhdG9yJiBpdGVyYXRvcikgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJh
dG9yOworICAgICAgICB9CisgICAgKTsKK30KKworTWVkaWFTYW1wbGUqIE1lZGlhU2FtcGxlQ3Vy
c29yOjpsb2NhdGVNZWRpYVNhbXBsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbG9jYXRvckxv
Y2suaXNMb2NrZWQoKSk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9sb2NhdG9yLAorICAg
ICAgICBbJl0oY29uc3QgYXV0byYgbG9jYXRvcikgeworICAgICAgICAgICAgbV90cmFja1JlYWRl
ci0+d2FpdEZvclNhbXBsZShbJl0oU2FtcGxlTWFwJiBzYW1wbGVzLCBib29sIGhhc0FsbFNhbXBs
ZXMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbWFrZUl0ZXJhdG9yKGxvY2F0
b3IsIHNhbXBsZXMsIGhhc0FsbFNhbXBsZXMpOworICAgICAgICAgICAgICAgIGlmICghaXRlcmF0
b3IpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNBbGxTYW1wbGVzOworICAgICAgICAg
ICAgICAgIG1fbG9jYXRvciA9IFdURk1vdmUoKml0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIGxvY2F0ZU1l
ZGlhU2FtcGxlKCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXShjb25zdCBNZWRpYVNhbXBsZUN1
cnNvcjo6RGVjb2RlT3JkZXJJdGVyYXRvciYgaXRlcmF0b3IpIHsKKyAgICAgICAgICAgIHJldHVy
biBpdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAgICB9LAorICAgICAgICBbJl0oY29uc3Qg
TWVkaWFTYW1wbGVDdXJzb3I6OlByZXNlbnRhdGlvbk9yZGVySXRlcmF0b3ImIGl0ZXJhdG9yKSB7
CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgfQor
ICAgICk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9yZGVyZWRNYXAsIHR5cGVuYW1lIFN0ZXA+
CitTdGVwIE1lZGlhU2FtcGxlQ3Vyc29yOjpzdGVwSW5PcmRlcmVkTWFwKFN0ZXAgc3RlcHNSZW1h
aW5pbmcpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2F0b3JMb2NrKTsKKyAg
ICBtX3RyYWNrUmVhZGVyLT53YWl0Rm9yU2FtcGxlKFsmXShTYW1wbGVNYXAmIHNhbXBsZXMsIGJv
b2wgaGFzQWxsU2FtcGxlcykgeworICAgICAgICBpZiAoYXV0byBpdGVyYXRvciA9IGxvY2F0ZUl0
ZXJhdG9yPHR5cGVuYW1lIE9yZGVyZWRNYXA6Oml0ZXJhdG9yPihzYW1wbGVzLCBoYXNBbGxTYW1w
bGVzKSkgeworICAgICAgICAgICAgc3RlcHNSZW1haW5pbmcgPSBzdGVwSXRlcmF0b3Ioc3RlcHNS
ZW1haW5pbmcsICppdGVyYXRvciwgb3JkZXJlZFNhbXBsZXM8T3JkZXJlZE1hcD4oc2FtcGxlcykp
OworICAgICAgICAgICAgbV9sb2NhdG9yID0gV1RGTW92ZSgqaXRlcmF0b3IpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBoYXNBbGxTYW1wbGVzIHx8ICFzdGVwc1JlbWFpbmluZzsKKyAgICB9
KTsKKyAgICByZXR1cm4gc3RlcHNSZW1haW5pbmc7Cit9CisKK09TU3RhdHVzIE1lZGlhU2FtcGxl
Q3Vyc29yOjpnZXRNZWRpYVNhbXBsZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE1lZGlhU2FtcGxl
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2F0b3JMb2NrKTsKKyAgICBhdXRvIHNhbXBsZSA9IGxvY2F0ZU1lZGlhU2FtcGxl
KCk7CisgICAgaWYgKCFzYW1wbGUpCisgICAgICAgIHJldHVybiBrTVRQbHVnaW5TYW1wbGVDdXJz
b3JFcnJvcl9Ob1NhbXBsZXM7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKnNhbXBsZSk7CisgICAg
cmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1cyBNZWRpYVNhbXBsZUN1cnNvcjo6Y29weVByb3Bl
cnR5KENGU3RyaW5nUmVmLCBDRkFsbG9jYXRvclJlZiwgdm9pZCopCit7CisgICAgcmV0dXJuIGtD
TUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5vdEF2YWlsYWJsZTsKK30KKworT1NTdGF0dXMgTWVkaWFT
YW1wbGVDdXJzb3I6OmNvcHkoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqIHNhbXBsZUN1cnNvcikg
Y29uc3QKK3sKKyAgICAqc2FtcGxlQ3Vyc29yID0gTWVkaWFTYW1wbGVDdXJzb3I6OmNvcHkoYWxs
b2NhdG9yKCksICp0aGlzKS5sZWFrUmVmKCktPndyYXBwZXIoKTsKKyAgICByZXR1cm4gbm9FcnI7
Cit9CisKK09TU3RhdHVzIE1lZGlhU2FtcGxlQ3Vyc29yOjpzdGVwSW5EZWNvZGVPcmRlckFuZFJl
cG9ydFN0ZXBzVGFrZW4oaW50NjRfdCBzdGVwc1RvVGFrZSwgaW50NjRfdCogc3RlcHNUYWtlbikK
K3sKKyAgICBhdXRvIHN0ZXBzUmVtYWluaW5nID0gc3RlcEluT3JkZXJlZE1hcDxEZWNvZGVPcmRl
clNhbXBsZU1hcD4oc3RlcHNUb1Rha2UpOworICAgICpzdGVwc1Rha2VuID0gc3RlcHNUb1Rha2Ug
LSBzdGVwc1JlbWFpbmluZzsKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK09TU3RhdHVzIE1lZGlh
U2FtcGxlQ3Vyc29yOjpzdGVwSW5QcmVzZW50YXRpb25PcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4o
aW50NjRfdCBzdGVwc1RvVGFrZSwgaW50NjRfdCogc3RlcHNUYWtlbikKK3sKKyAgICBhdXRvIHN0
ZXBzUmVtYWluaW5nID0gc3RlcEluT3JkZXJlZE1hcDxQcmVzZW50YXRpb25PcmRlclNhbXBsZU1h
cD4oc3RlcHNUb1Rha2UpOworICAgICpzdGVwc1Rha2VuID0gc3RlcHNUb1Rha2UgLSBzdGVwc1Jl
bWFpbmluZzsKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK09TU3RhdHVzIE1lZGlhU2FtcGxlQ3Vy
c29yOjpzdGVwQnlEZWNvZGVUaW1lKENNVGltZSB0aW1lLCBCb29sZWFuKiB3YXNQaW5uZWQpCit7
CisgICAgYXV0byB0aW1lUmVtYWluaW5nID0gc3RlcEluT3JkZXJlZE1hcDxEZWNvZGVPcmRlclNh
bXBsZU1hcD4oUEFMOjp0b01lZGlhVGltZSh0aW1lKSk7CisgICAgKndhc1Bpbm5lZCA9ICEhdGlt
ZVJlbWFpbmluZzsKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK09TU3RhdHVzIE1lZGlhU2FtcGxl
Q3Vyc29yOjpzdGVwQnlQcmVzZW50YXRpb25UaW1lKENNVGltZSB0aW1lLCBCb29sZWFuKiB3YXNQ
aW5uZWQpCit7CisgICAgYXV0byB0aW1lUmVtYWluaW5nID0gc3RlcEluT3JkZXJlZE1hcDxQcmVz
ZW50YXRpb25PcmRlclNhbXBsZU1hcD4oUEFMOjp0b01lZGlhVGltZSh0aW1lKSk7CisgICAgKndh
c1Bpbm5lZCA9ICEhdGltZVJlbWFpbmluZzsKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK0NGQ29t
cGFyaXNvblJlc3VsdCBNZWRpYVNhbXBsZUN1cnNvcjo6Y29tcGFyZUluRGVjb2RlT3JkZXIoTVRQ
bHVnaW5TYW1wbGVDdXJzb3JSZWYgb3RoZXJDdXJzb3JSZWYpIGNvbnN0Cit7CisgICAgaWYgKHdy
YXBwZXIoKSA9PSBvdGhlckN1cnNvclJlZikKKyAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVFcXVh
bFRvOworCisgICAgYXV0byBkZWNvZGVUaW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwor
ICAgIGdldE1lZGlhU2FtcGxlKFsmXShNZWRpYVNhbXBsZSYgc2FtcGxlKSB7CisgICAgICAgIGRl
Y29kZVRpbWUgPSBzYW1wbGUuZGVjb2RlVGltZSgpOworICAgIH0pOworCisgICAgYXV0byBvdGhl
ckRlY29kZVRpbWUgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisgICAgaWYgKGF1dG8gb3Ro
ZXJDdXJzb3IgPSB1bndyYXAob3RoZXJDdXJzb3JSZWYpKSB7CisgICAgICAgIG90aGVyQ3Vyc29y
LT5nZXRNZWRpYVNhbXBsZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgeworICAgICAgICAgICAg
b3RoZXJEZWNvZGVUaW1lID0gc2FtcGxlLmRlY29kZVRpbWUoKTsKKyAgICAgICAgfSk7CisgICAg
fQorCisgICAgc3dpdGNoIChkZWNvZGVUaW1lLmNvbXBhcmUob3RoZXJEZWNvZGVUaW1lKSkgewor
ICAgIGNhc2UgTWVkaWFUaW1lOjpMZXNzVGhhbjoKKyAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVM
ZXNzVGhhbjsKKyAgICBjYXNlIE1lZGlhVGltZTo6RXF1YWxUbzoKKyAgICAgICAgcmV0dXJuIGtD
RkNvbXBhcmVFcXVhbFRvOworICAgIGNhc2UgTWVkaWFUaW1lOjpHcmVhdGVyVGhhbjoKKyAgICAg
ICAgcmV0dXJuIGtDRkNvbXBhcmVHcmVhdGVyVGhhbjsKKyAgICB9Cit9CisKK09TU3RhdHVzIE1l
ZGlhU2FtcGxlQ3Vyc29yOjpnZXRTYW1wbGVUaW1pbmcoQ01TYW1wbGVUaW1pbmdJbmZvKiBzYW1w
bGVUaW1pbmcpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldE1lZGlhU2FtcGxlKFsmXShNZWRpYVNh
bXBsZSYgc2FtcGxlKSB7CisgICAgICAgICpzYW1wbGVUaW1pbmcgPSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogRHVyYXRpb24gc2hvdWxkIGJlIHRoZSBkaWZmZXJlbmNlIGluIHByZXNlbnRhdGlv
biB0aW1lIGJldHdlZW4gdGhpcyBzYW1wbGUgYW5kIHRoZSBuZXh0IGluIHByZXNlbnRhdGlvbiBv
cmRlciAob3IgdHJhY2sgZHVyYXRpb24gaWYgdGhpcyBpcyB0aGUgbGFzdCBzYW1wbGUpLgorICAg
ICAgICAgICAgLmR1cmF0aW9uID0gUEFMOjp0b0NNVGltZShzYW1wbGUuZHVyYXRpb24oKSksCisg
ICAgICAgICAgICAucHJlc2VudGF0aW9uVGltZVN0YW1wID0gUEFMOjp0b0NNVGltZShzYW1wbGUu
cHJlc2VudGF0aW9uVGltZSgpKSwKKyAgICAgICAgICAgIC5kZWNvZGVUaW1lU3RhbXAgPSBQQUw6
OnRvQ01UaW1lKHNhbXBsZS5kZWNvZGVUaW1lKCkpLAorICAgICAgICB9OworICAgIH0pOworfQor
CitPU1N0YXR1cyBNZWRpYVNhbXBsZUN1cnNvcjo6Z2V0U3luY0luZm8oTVRQbHVnaW5TYW1wbGVD
dXJzb3JTeW5jSW5mbyogc3luY0luZm8pIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldE1lZGlhU2Ft
cGxlKFsmXShNZWRpYVNhbXBsZSYgc2FtcGxlKSB7CisgICAgICAgICpzeW5jSW5mbyA9IHsKKyAg
ICAgICAgICAgIC5mdWxsU3luYyA9IHNhbXBsZS5pc1N5bmMoKQorICAgICAgICB9OworICAgIH0p
OworfQorCitPU1N0YXR1cyBNZWRpYVNhbXBsZUN1cnNvcjo6Y29weUZvcm1hdERlc2NyaXB0aW9u
KENNRm9ybWF0RGVzY3JpcHRpb25SZWYqIGZvcm1hdERlc2NyaXB0aW9uT3V0KSBjb25zdAorewor
ICAgIHJldHVybiBnZXRNZWRpYVNhbXBsZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNhbXBsZS5wbGF0
Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGUp
OworICAgICAgICAqZm9ybWF0RGVzY3JpcHRpb25PdXQgPSByZXRhaW5QdHIoc2FtcGxlLnBsYXRm
b3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQpLmxlYWtSZWYoKTsKKyAg
ICB9KTsKK30KKworT1NTdGF0dXMgTWVkaWFTYW1wbGVDdXJzb3I6OmNvcHlTYW1wbGVMb2NhdGlv
bihNVFBsdWdpblNhbXBsZUN1cnNvclN0b3JhZ2VSYW5nZSogc3RvcmFnZVJhbmdlLCBNVFBsdWdp
bkJ5dGVTb3VyY2VSZWYqIGJ5dGVTb3VyY2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldE1lZGlh
U2FtcGxlKFsmXShNZWRpYVNhbXBsZSYgc2FtcGxlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9
PSBQbGF0Zm9ybVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZSk7CisgICAgICAgIGF1dG8gYnl0
ZVJhbmdlID0gKnNhbXBsZS5ieXRlUmFuZ2UoKTsKKyAgICAgICAgKnN0b3JhZ2VSYW5nZSA9IHsK
KyAgICAgICAgICAgIC5vZmZzZXQgPSBDaGVja2VkSW50NjQoYnl0ZVJhbmdlLmJ5dGVPZmZzZXQp
LnVuc2FmZUdldCgpLAorICAgICAgICAgICAgLmxlbmd0aCA9IENoZWNrZWRJbnQ2NChieXRlUmFu
Z2UuYnl0ZUxlbmd0aCkudW5zYWZlR2V0KCksCisgICAgICAgIH07CisgICAgICAgICpieXRlU291
cmNlID0gcmV0YWluUHRyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5ieXRlUmFuZ2VT
YW1wbGUuZmlyc3QpLmxlYWtSZWYoKTsKKyAgICB9KTsKK30KKworT1NTdGF0dXMgTWVkaWFTYW1w
bGVDdXJzb3I6OmdldFBsYXlhYmxlSG9yaXpvbihDTVRpbWUqKSBjb25zdAoreworICAgIHJldHVy
biBrQ01CYXNlT2JqZWN0RXJyb3JfVmFsdWVOb3RBdmFpbGFibGU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNh
bXBsZUN1cnNvci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVy
L01lZGlhU2FtcGxlQ3Vyc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM5ZmU1M2QyNGU4OGYwY2MzM2JlMWE5
MDAyNGZiY2Y1ZDFkYzYyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5oCkBAIC0wLDAgKzEsMTUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCTV9GT1JNQVRf
UkVBREVSKQorCisjaW5jbHVkZSAiQ29yZU1lZGlhV3JhcHBlZC5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvU2FtcGxlTWFwLmg+CisjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgorI2luY2x1ZGUgPHd0
Zi9WYXJpYW50Lmg+CisKK0RFQ0xBUkVfQ09SRV9NRURJQV9UUkFJVFMoTWVkaWFTYW1wbGVDdXJz
b3IpOworCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBrTVRQbHVnaW5TYW1wbGVDdXJzb3Jf
Q2xhc3NWZXJzaW9uXzQgaXMgYXZhaWxhYmxlIGluIFNES3MuCisjaWYgZGVmaW5lZChIQVZFX01U
X1BMVUdJTl9TQU1QTEVfQ1VSU09SX1BMQVlBQkxFX0hPUklaT04pCisjdW5kZWYgSEFWRV9NVF9Q
TFVHSU5fU0FNUExFX0NVUlNPUl9QTEFZQUJMRV9IT1JJWk9OCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgTWVkaWFTYW1wbGU7Cit9OworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgTWVkaWFUcmFja1JlYWRlcjsKKworY2xhc3MgTWVkaWFTYW1wbGVDdXJzb3IgOiBw
dWJsaWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYVNhbXBsZUN1cnNvcj4geworcHVibGljOgorICAg
IHVzaW5nIERlY29kZU9yZGVySXRlcmF0b3IgPSBEZWNvZGVPcmRlclNhbXBsZU1hcDo6aXRlcmF0
b3I7CisgICAgdXNpbmcgUHJlc2VudGF0aW9uT3JkZXJJdGVyYXRvciA9IFByZXNlbnRhdGlvbk9y
ZGVyU2FtcGxlTWFwOjppdGVyYXRvcjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgV3JhcHBlckNs
YXNzIHdyYXBwZXJDbGFzcygpOworICAgIHN0YXRpYyBDTUJhc2VDbGFzc0lEIHdyYXBwZXJDbGFz
c0lEKCk7CisgICAgc3RhdGljIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFTYW1wbGVDdXJzb3I+KiB1
bndyYXAoQ01CYXNlT2JqZWN0UmVmKTsKKworICAgIGVudW0gY2xhc3MgRGVjb2RlZFNhbXBsZSB7
CisgICAgICAgIEZpcnN0LAorICAgICAgICBMYXN0LAorICAgIH07CisKKyAgICBzdGF0aWMgUmVm
UHRyPE1lZGlhU2FtcGxlQ3Vyc29yPiBjb3B5KEFsbG9jYXRvciYmLCBjb25zdCBNZWRpYVNhbXBs
ZUN1cnNvciYpOworICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFTYW1wbGVDdXJzb3I+IGNyZWF0ZUF0
RGVjb2RlZFNhbXBsZShBbGxvY2F0b3ImJiwgTWVkaWFUcmFja1JlYWRlciYsIERlY29kZWRTYW1w
bGUpOworICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFTYW1wbGVDdXJzb3I+IGNyZWF0ZUF0UHJlc2Vu
dGF0aW9uVGltZShBbGxvY2F0b3ImJiwgTWVkaWFUcmFja1JlYWRlciYsIE1lZGlhVGltZSk7CisK
K3ByaXZhdGU6CisgICAgdXNpbmcgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYVNhbXBsZUN1cnNvcj46
OnVud3JhcDsKKyAgICB1c2luZyBMb2NhdG9yID0gVmFyaWFudDxNZWRpYVRpbWUsIERlY29kZWRT
YW1wbGUsIERlY29kZU9yZGVySXRlcmF0b3IsIFByZXNlbnRhdGlvbk9yZGVySXRlcmF0b3I+Owor
CisgICAgTWVkaWFTYW1wbGVDdXJzb3IoQWxsb2NhdG9yJiYsIE1lZGlhVHJhY2tSZWFkZXImLCBM
b2NhdG9yKTsKKyAgICBNZWRpYVNhbXBsZUN1cnNvcihBbGxvY2F0b3ImJiwgY29uc3QgTWVkaWFT
YW1wbGVDdXJzb3ImKTsKKworICAgIFdlYkNvcmU6Ok1lZGlhU2FtcGxlKiBsb2NhdGVNZWRpYVNh
bXBsZSgpIGNvbnN0OworICAgIE9TU3RhdHVzIGdldE1lZGlhU2FtcGxlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoV2ViQ29yZTo6TWVkaWFTYW1wbGUmKT4mJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSXRlcmF0b3I+IE9wdGlvbmFsPEl0ZXJhdG9yPiBsb2NhdGVJdGVyYXRvcihTYW1w
bGVNYXAmLCBib29sIGhhc0FsbFNhbXBsZXMpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3JkZXJlZE1hcCwgdHlwZW5hbWUgU3RlcD4gU3RlcCBzdGVwSW5PcmRlcmVkTWFwKFN0ZXAp
OworCisgICAgLy8gQ29yZU1lZGlhV3JhcHBlZAorICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9u
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIldlYktpdDo6TWVkaWFTYW1wbGVDdXJzb3IiX3M7IH0K
KyAgICBPU1N0YXR1cyBjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYsIENGQWxsb2NhdG9yUmVmLCB2
b2lkKiBjb3BpZWRWYWx1ZSkgZmluYWw7CisKKyAgICAvLyBXcmFwcGVyQ2xhc3MKKyAgICBPU1N0
YXR1cyBjb3B5KE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKikgY29uc3Q7CisgICAgT1NTdGF0dXMg
c3RlcEluRGVjb2RlT3JkZXJBbmRSZXBvcnRTdGVwc1Rha2VuKGludDY0X3QsIGludDY0X3QqKTsK
KyAgICBPU1N0YXR1cyBzdGVwSW5QcmVzZW50YXRpb25PcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4o
aW50NjRfdCwgaW50NjRfdCopOworICAgIE9TU3RhdHVzIHN0ZXBCeURlY29kZVRpbWUoQ01UaW1l
LCBCb29sZWFuKik7CisgICAgT1NTdGF0dXMgc3RlcEJ5UHJlc2VudGF0aW9uVGltZShDTVRpbWUs
IEJvb2xlYW4qKTsKKyAgICBDRkNvbXBhcmlzb25SZXN1bHQgY29tcGFyZUluRGVjb2RlT3JkZXIo
TVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYpIGNvbnN0OworICAgIE9TU3RhdHVzIGdldFNhbXBsZVRp
bWluZyhDTVNhbXBsZVRpbWluZ0luZm8qKSBjb25zdDsKKyAgICBPU1N0YXR1cyBnZXRTeW5jSW5m
byhNVFBsdWdpblNhbXBsZUN1cnNvclN5bmNJbmZvKikgY29uc3Q7CisgICAgT1NTdGF0dXMgY29w
eUZvcm1hdERlc2NyaXB0aW9uKENNRm9ybWF0RGVzY3JpcHRpb25SZWYqKSBjb25zdDsKKyAgICBP
U1N0YXR1cyBjb3B5U2FtcGxlTG9jYXRpb24oTVRQbHVnaW5TYW1wbGVDdXJzb3JTdG9yYWdlUmFu
Z2UqLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYqKSBjb25zdDsKKyAgICBPU1N0YXR1cyBnZXRQbGF5
YWJsZUhvcml6b24oQ01UaW1lKikgY29uc3Q7CisKKyAgICBSZWY8TWVkaWFUcmFja1JlYWRlcj4g
bV90cmFja1JlYWRlcjsKKyAgICBtdXRhYmxlIExvY2F0b3IgbV9sb2NhdG9yOworICAgIG11dGFi
bGUgTG9jayBtX2xvY2F0b3JMb2NrOworfTsKKworY29uc3RleHByIE1lZGlhU2FtcGxlQ3Vyc29y
OjpXcmFwcGVyQ2xhc3MgTWVkaWFTYW1wbGVDdXJzb3I6OndyYXBwZXJDbGFzcygpCit7CisgICAg
cmV0dXJuIHsKKyNpZiBIQVZFKE1UX1BMVUdJTl9TQU1QTEVfQ1VSU09SX1BMQVlBQkxFX0hPUkla
T04pCisgICAgICAgIC52ZXJzaW9uID0ga01UUGx1Z2luU2FtcGxlQ3Vyc29yX0NsYXNzVmVyc2lv
bl80LAorI2Vsc2UKKyAgICAgICAgLnZlcnNpb24gPSBrTVRQbHVnaW5TYW1wbGVDdXJzb3JfQ2xh
c3NWZXJzaW9uXzMsCisjZW5kaWYKKyAgICAgICAgLmNvcHkgPSBbXShNVFBsdWdpblNhbXBsZUN1
cnNvclJlZiBzYW1wbGVDdXJzb3IsIE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKiBzYW1wbGVDdXJz
b3JDb3B5KSB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPmNvcHko
c2FtcGxlQ3Vyc29yQ29weSk7CisgICAgICAgIH0sCisgICAgICAgIC5zdGVwSW5EZWNvZGVPcmRl
ckFuZFJlcG9ydFN0ZXBzVGFrZW4gPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVD
dXJzb3IsIGludDY0X3Qgc3RlcENvdW50LCBpbnQ2NF90KiBzdGVwc1Rha2VuKSB7CisgICAgICAg
ICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPnN0ZXBJbkRlY29kZU9yZGVyQW5kUmVw
b3J0U3RlcHNUYWtlbihzdGVwQ291bnQsIHN0ZXBzVGFrZW4pOworICAgICAgICB9LAorICAgICAg
ICAuc3RlcEluUHJlc2VudGF0aW9uT3JkZXJBbmRSZXBvcnRTdGVwc1Rha2VuID0gW10oTVRQbHVn
aW5TYW1wbGVDdXJzb3JSZWYgc2FtcGxlQ3Vyc29yLCBpbnQ2NF90IHN0ZXBDb3VudCwgaW50NjRf
dCogc3RlcHNUYWtlbikgeworICAgICAgICAgICAgcmV0dXJuIHVud3JhcChzYW1wbGVDdXJzb3Ip
LT5zdGVwSW5QcmVzZW50YXRpb25PcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4oc3RlcENvdW50LCBz
dGVwc1Rha2VuKTsKKyAgICAgICAgfSwKKyAgICAgICAgLnN0ZXBCeURlY29kZVRpbWUgPSBbXShN
VFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIENNVGltZSBkZWx0YURlY29kZVRp
bWUsIEJvb2xlYW4qIHBvc2l0aW9uV2FzUGlubmVkKSB7CisgICAgICAgICAgICByZXR1cm4gdW53
cmFwKHNhbXBsZUN1cnNvciktPnN0ZXBCeURlY29kZVRpbWUoZGVsdGFEZWNvZGVUaW1lLCBwb3Np
dGlvbldhc1Bpbm5lZCk7CisgICAgICAgIH0sCisgICAgICAgIC5zdGVwQnlQcmVzZW50YXRpb25U
aW1lID0gW10oTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYgc2FtcGxlQ3Vyc29yLCBDTVRpbWUgZGVs
dGFQcmVzZW50YXRpb25UaW1lLCBCb29sZWFuKiBwb3NpdGlvbldhc1Bpbm5lZCkgeworICAgICAg
ICAgICAgcmV0dXJuIHVud3JhcChzYW1wbGVDdXJzb3IpLT5zdGVwQnlQcmVzZW50YXRpb25UaW1l
KGRlbHRhUHJlc2VudGF0aW9uVGltZSwgcG9zaXRpb25XYXNQaW5uZWQpOworICAgICAgICB9LAor
ICAgICAgICAuY29tcGFyZUluRGVjb2RlT3JkZXIgPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJl
ZiBzYW1wbGVDdXJzb3IsIE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIG90aGVyU2FtcGxlQ3Vyc29y
KSB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPmNvbXBhcmVJbkRl
Y29kZU9yZGVyKG90aGVyU2FtcGxlQ3Vyc29yKTsKKyAgICAgICAgfSwKKyAgICAgICAgLmdldFNh
bXBsZVRpbWluZyA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgQ01T
YW1wbGVUaW1pbmdJbmZvKiBzYW1wbGVUaW1pbmdJbmZvKSB7CisgICAgICAgICAgICByZXR1cm4g
dW53cmFwKHNhbXBsZUN1cnNvciktPmdldFNhbXBsZVRpbWluZyhzYW1wbGVUaW1pbmdJbmZvKTsK
KyAgICAgICAgfSwKKyAgICAgICAgLmdldFN5bmNJbmZvID0gW10oTVRQbHVnaW5TYW1wbGVDdXJz
b3JSZWYgc2FtcGxlQ3Vyc29yLCBNVFBsdWdpblNhbXBsZUN1cnNvclN5bmNJbmZvKiBzeW5jSW5m
bykgLT4gT1NTdGF0dXMgeworICAgICAgICAgICAgcmV0dXJuIHVud3JhcChzYW1wbGVDdXJzb3Ip
LT5nZXRTeW5jSW5mbyhzeW5jSW5mbyk7CisgICAgICAgIH0sCisgICAgICAgIC5jb3B5Rm9ybWF0
RGVzY3JpcHRpb24gPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIENN
Rm9ybWF0RGVzY3JpcHRpb25SZWYqIGZvcm1hdERlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPmNvcHlGb3JtYXREZXNjcmlwdGlvbihmb3JtYXRE
ZXNjcmlwdGlvbik7CisgICAgICAgIH0sCisgICAgICAgIC5jb3B5U2FtcGxlTG9jYXRpb24gPSBb
XShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIE1UUGx1Z2luU2FtcGxlQ3Vy
c29yU3RvcmFnZVJhbmdlKiBzdG9yYWdlUmFuZ2UsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiogYnl0
ZVNvdXJjZSkgeworICAgICAgICAgICAgcmV0dXJuIHVud3JhcChzYW1wbGVDdXJzb3IpLT5jb3B5
U2FtcGxlTG9jYXRpb24oc3RvcmFnZVJhbmdlLCBieXRlU291cmNlKTsKKyAgICAgICAgfSwKKyNp
ZiBIQVZFKE1UX1BMVUdJTl9TQU1QTEVfQ1VSU09SX1BMQVlBQkxFX0hPUklaT04pCisgICAgICAg
IC5nZXRQbGF5YWJsZUhvcml6b24gPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVD
dXJzb3IsIENNVGltZSogcGxheWFibGVIb3Jpem9uKSB7CisgICAgICAgICAgICByZXR1cm4gdW53
cmFwKHNhbXBsZUN1cnNvciktPmdldFBsYXlhYmxlSG9yaXpvbihwbGF5YWJsZUhvcml6b24pOwor
ICAgICAgICB9LAorI2VuZGlmCisgICAgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tS
ZWFkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiMWNkMWRlMGVmOTAwY2ZlYzA4ZDI4MGY0M2I0ZGVhMjg5
M2E0NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHAKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFUcmFja1JlYWRlci5o
IgorCisjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKKworI2luY2x1ZGUgIk1lZGlhRm9y
bWF0UmVhZGVyLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCIKKyNpbmNsdWRl
ICJNZWRpYVNhbXBsZUN1cnNvci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQXVkaW9UcmFja1ByaXZh
dGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luYmFuZFRleHRUcmFja1ByaXZhdGUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL01lZGlhRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NhbXBs
ZU1hcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9UcmFja1ByaXZhdGUuaD4KKyNpbmNsdWRl
IDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgorCisjaW5jbHVkZSA8
cGFsL2NvY29hL01lZGlhVG9vbGJveFNvZnRMaW5rLmg+CisKK1dURl9ERUNMQVJFX0NGX1RZUEVf
VFJBSVQoTVRQbHVnaW5UcmFja1JlYWRlcik7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2lu
ZyBuYW1lc3BhY2UgUEFMOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0NNQmFzZUNsYXNz
SUQgTWVkaWFUcmFja1JlYWRlcjo6d3JhcHBlckNsYXNzSUQoKQoreworICAgIHJldHVybiBNVFBs
dWdpblRyYWNrUmVhZGVyR2V0Q2xhc3NJRCgpOworfQorCitDb3JlTWVkaWFXcmFwcGVkPE1lZGlh
VHJhY2tSZWFkZXI+KiBNZWRpYVRyYWNrUmVhZGVyOjp1bndyYXAoQ01CYXNlT2JqZWN0UmVmIG9i
amVjdCkKK3sKKyAgICByZXR1cm4gdW53cmFwKGNoZWNrZWRfY2ZfY2FzdDxXcmFwcGVyUmVmPihv
YmplY3QpKTsKK30KKworUmVmUHRyPE1lZGlhVHJhY2tSZWFkZXI+IE1lZGlhVHJhY2tSZWFkZXI6
OmNyZWF0ZShBbGxvY2F0b3ImJiBhbGxvY2F0b3IsIGNvbnN0IE1lZGlhRm9ybWF0UmVhZGVyJiBm
b3JtYXRSZWFkZXIsIENNTWVkaWFUeXBlIG1lZGlhVHlwZSwgdWludDY0X3QgdHJhY2tJRCwgT3B0
aW9uYWw8Ym9vbD4gZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IChhbGxvY2F0
b3IpIE1lZGlhVHJhY2tSZWFkZXIoV1RGTW92ZShhbGxvY2F0b3IpLCBmb3JtYXRSZWFkZXIsIG1l
ZGlhVHlwZSwgdHJhY2tJRCwgZW5hYmxlZCkpOworfQorCitXb3JrUXVldWUmIE1lZGlhVHJhY2tS
ZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpCit7CisgICAgc3RhdGljIGF1dG8mIHF1ZXVlID0gV29ya1F1
ZXVlOjpjcmVhdGUoIldlYktpdDo6TWVkaWFUcmFja1JlYWRlciBTdG9yYWdlIFF1ZXVlIiwgV29y
a1F1ZXVlOjpUeXBlOjpTZXJpYWwpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisK
K01lZGlhVHJhY2tSZWFkZXI6Ok1lZGlhVHJhY2tSZWFkZXIoQWxsb2NhdG9yJiYgYWxsb2NhdG9y
LCBjb25zdCBNZWRpYUZvcm1hdFJlYWRlciYgZm9ybWF0UmVhZGVyLCBDTU1lZGlhVHlwZSBtZWRp
YVR5cGUsIHVpbnQ2NF90IHRyYWNrSUQsIE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCisgICAgOiBD
b3JlTWVkaWFXcmFwcGVkKFdURk1vdmUoYWxsb2NhdG9yKSkKKyAgICAsIG1fdHJhY2tJRCh0cmFj
a0lEKQorICAgICwgbV9tZWRpYVR5cGUobWVkaWFUeXBlKQorICAgICwgbV9kdXJhdGlvbihmb3Jt
YXRSZWFkZXIuZHVyYXRpb24oKSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKwor
ICAgIGlmIChlbmFibGVkKQorICAgICAgICBtX2lzRW5hYmxlZCA9IGVuYWJsZWQudmFsdWUoKSA/
IEVuYWJsZWQ6OlRydWUgOiBFbmFibGVkOjpGYWxzZTsKK30KKwordm9pZCBNZWRpYVRyYWNrUmVh
ZGVyOjphZGRTYW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291
cmNlUmVmIGJ5dGVTb3VyY2UpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZVN0b3JhZ2VMb2NrKTsKKyAgICBpZiAoIW1f
c2FtcGxlU3RvcmFnZSkKKyAgICAgICAgbV9zYW1wbGVTdG9yYWdlID0gbWFrZVVuaXF1ZTxTYW1w
bGVTdG9yYWdlPigpOworCisgICAgQVNTRVJUKCFzYW1wbGUtPmlzRGl2aXNhYmxlKCkgJiYgc2Ft
cGxlLT5ieXRlUmFuZ2UoKSk7CisgICAgYXV0byBzYW1wbGVUb0FkZCA9IE1lZGlhU2FtcGxlQnl0
ZVJhbmdlOjpjcmVhdGUoc2FtcGxlLmdldCgpLCBieXRlU291cmNlLCBtX3RyYWNrSUQpOworCisg
ICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIFdlYk0gbXV4ZXIgZ3VpZGVsaW5lcyBzYXkgdGhpcyBt
dXN0IG5vdCBoYXBwZW4sIHNvbWUgdmlkZW8gdHJhY2tzIGhhdmUgdHdvCisgICAgLy8gY29uc2Vj
dXRpdmUgZnJhbWVzIHdpdGggdGhlIHNhbWUgcHJlc2VudGF0aW9uIHRpbWUuIFNhbXBsZU1hcCB3
aWxsIG5vdCBzdG9yZSB0aGUgc2Vjb25kIGZyYW1lCisgICAgLy8gaW4gdGhlc2UgY2FzZXMsIGNv
cnJ1cHRpbmcgYWxsIHN1YnNlcXVlbnQgbm9uLWtleSBmcmFtZXMuIEZpbmQgYSB3YXkgdG8gc3Rv
cmUgZnJhbWVzIHdpdGgKKyAgICAvLyBkdXBsaWNhdGUgcHJlc2VudGF0aW9uIHRpbWVzLgorCisg
ICAgbV9zYW1wbGVTdG9yYWdlLT5zYW1wbGVNYXAuYWRkU2FtcGxlKHNhbXBsZVRvQWRkLmdldCgp
KTsKKyAgICBtX3NhbXBsZVN0b3JhZ2VDb25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQg
TWVkaWFUcmFja1JlYWRlcjo6d2FpdEZvclNhbXBsZShGdW5jdGlvbjxib29sKFNhbXBsZU1hcCYs
IGJvb2wpPiYmIHByZWRpY2F0ZSkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fc2FtcGxlU3RvcmFnZUxvY2spOworICAgIGlmICghbV9zYW1wbGVTdG9yYWdlKQorICAgICAg
ICBtX3NhbXBsZVN0b3JhZ2UgPSBtYWtlVW5pcXVlPFNhbXBsZVN0b3JhZ2U+KCk7CisgICAgbV9z
YW1wbGVTdG9yYWdlQ29uZGl0aW9uLndhaXQobV9zYW1wbGVTdG9yYWdlTG9jaywgW3ByZWRpY2F0
ZSA9IFdURk1vdmUocHJlZGljYXRlKSwgdGhpc10geworICAgICAgICByZXR1cm4gcHJlZGljYXRl
KG1fc2FtcGxlU3RvcmFnZS0+c2FtcGxlTWFwLCBtX3NhbXBsZVN0b3JhZ2UtPmhhc0FsbFNhbXBs
ZXMpOworICAgIH0pOworfQorCit2b2lkIE1lZGlhVHJhY2tSZWFkZXI6OmZpbmlzaFBhcnNpbmco
KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9zYW1wbGVTdG9yYWdlTG9jayk7CisgICAgaWYgKCFtX3NhbXBsZVN0b3JhZ2UpCisg
ICAgICAgIG1fc2FtcGxlU3RvcmFnZSA9IG1ha2VVbmlxdWU8U2FtcGxlU3RvcmFnZT4oKTsKKyAg
ICBtX3NhbXBsZVN0b3JhZ2UtPmhhc0FsbFNhbXBsZXMgPSB0cnVlOworICAgIGlmIChtX2lzRW5h
YmxlZCA9PSBFbmFibGVkOjpVbmtub3duKQorICAgICAgICBtX2lzRW5hYmxlZCA9IG1fc2FtcGxl
U3RvcmFnZS0+c2FtcGxlTWFwLmVtcHR5KCkgPyBFbmFibGVkOjpGYWxzZSA6IEVuYWJsZWQ6OlRy
dWU7CisgICAgbV9zYW1wbGVTdG9yYWdlQ29uZGl0aW9uLm5vdGlmeUFsbCgpOworfQorCitPU1N0
YXR1cyBNZWRpYVRyYWNrUmVhZGVyOjpjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYga2V5LCBDRkFs
bG9jYXRvclJlZiBhbGxvY2F0b3IsIHZvaWQqIGNvcGllZFZhbHVlKQoreworICAgIC8vIERvbid0
IGJsb2NrIHdhaXRpbmcgZm9yIG1lZGlhIGlmIHRoZSB3ZSBrbm93IHRoZSBlbmFibGVkIHN0YXRl
LgorICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpnZXRfTWVkaWFUb29sYm94X2tNVFBsdWdpblRy
YWNrUmVhZGVyUHJvcGVydHlfRW5hYmxlZCgpKSAmJiBtX2lzRW5hYmxlZCAhPSBFbmFibGVkOjpV
bmtub3duKSB7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PENGQm9vbGVhblJlZio+KGNvcGll
ZFZhbHVlKSA9IHJldGFpblB0cihtX2lzRW5hYmxlZCA9PSBFbmFibGVkOjpUcnVlID8ga0NGQm9v
bGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2UpLmxlYWtSZWYoKTsKKyAgICAgICAgcmV0dXJuIG5v
RXJyOworICAgIH0KKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVTdG9yYWdl
TG9jayk7CisgICAgbV9zYW1wbGVTdG9yYWdlQ29uZGl0aW9uLndhaXQobV9zYW1wbGVTdG9yYWdl
TG9jaywgWyZdIHsKKyAgICAgICAgcmV0dXJuICEhbV9zYW1wbGVTdG9yYWdlOworICAgIH0pOwor
CisgICAgYXV0byYgc2FtcGxlTWFwID0gbV9zYW1wbGVTdG9yYWdlLT5zYW1wbGVNYXA7CisKKyAg
ICBpZiAoQ0ZFcXVhbChrZXksIFBBTDo6Z2V0X01lZGlhVG9vbGJveF9rTVRQbHVnaW5UcmFja1Jl
YWRlclByb3BlcnR5X0VuYWJsZWQoKSkpIHsKKyAgICAgICAgaWYgKG1faXNFbmFibGVkID09IEVu
YWJsZWQ6OlVua25vd24pCisgICAgICAgICAgICBtX2lzRW5hYmxlZCA9IHNhbXBsZU1hcC5lbXB0
eSgpID8gRW5hYmxlZDo6RmFsc2UgOiBFbmFibGVkOjpUcnVlOworCisgICAgICAgICpyZWludGVy
cHJldF9jYXN0PENGQm9vbGVhblJlZio+KGNvcGllZFZhbHVlKSA9IHJldGFpblB0cihtX2lzRW5h
YmxlZCA9PSBFbmFibGVkOjpUcnVlID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2Up
LmxlYWtSZWYoKTsKKyAgICAgICAgcmV0dXJuIG5vRXJyOworICAgIH0KKworICAgIGlmIChzYW1w
bGVNYXAuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGtDTUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5v
dEF2YWlsYWJsZTsKKworICAgIGF1dG8mIGxhc3RTYW1wbGUgPSAqc2FtcGxlTWFwLmRlY29kZU9y
ZGVyKCkucmJlZ2luKCktPnNlY29uZDsKKworICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpnZXRf
TWVkaWFUb29sYm94X2tNVFBsdWdpblRyYWNrUmVhZGVyUHJvcGVydHlfRm9ybWF0RGVzY3JpcHRp
b25BcnJheSgpKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGxhc3RTYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxl
OjpCeXRlUmFuZ2VTYW1wbGVUeXBlKTsKKyAgICAgICAgY29uc3Qgdm9pZCogZGVzY3JpcHRpb25z
WzFdID0geyBsYXN0U2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBs
ZS5zZWNvbmQgfTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZBcnJheVJlZio+KGNvcGll
ZFZhbHVlKSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZShhbGxvY2F0b3IsIGRlc2NyaXB0aW9ucywg
MSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpLmxlYWtSZWYoKTsKKyAgICAgICAgcmV0dXJuIG5v
RXJyOworICAgIH0KKworICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpnZXRfTWVkaWFUb29sYm94
X2tNVFBsdWdpblRyYWNrUmVhZGVyUHJvcGVydHlfTm9taW5hbEZyYW1lUmF0ZSgpKSkgeworICAg
ICAgICBmbG9hdCBmcmFtZVJhdGUgPSAxIC8gbGFzdFNhbXBsZS5kdXJhdGlvbigpLnRvRmxvYXQo
KTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZOdW1iZXJSZWYqPihjb3BpZWRWYWx1ZSkg
PSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGFsbG9jYXRvciwga0NGTnVtYmVyRmxvYXQzMlR5cGUs
ICZmcmFtZVJhdGUpKS5sZWFrUmVmKCk7CisgICAgICAgIHJldHVybiBub0VycjsKKyAgICB9CisK
KyAgICByZXR1cm4ga0NNQmFzZU9iamVjdEVycm9yX1ZhbHVlTm90QXZhaWxhYmxlOworfQorCit2
b2lkIE1lZGlhVHJhY2tSZWFkZXI6OmZpbmFsaXplKCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2spOworICAgIHN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNo
KFtzYW1wbGVTdG9yYWdlID0gc3RkOjpleGNoYW5nZShtX3NhbXBsZVN0b3JhZ2UsIG51bGxwdHIp
XSgpIG11dGFibGUgeworICAgICAgICBzYW1wbGVTdG9yYWdlID0gbnVsbHB0cjsKKyAgICB9KTsK
KyAgICBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhVHJhY2tSZWFkZXI+OjpmaW5hbGl6ZSgpOworfQor
CitPU1N0YXR1cyBNZWRpYVRyYWNrUmVhZGVyOjpnZXRUcmFja0luZm8oTVRQZXJzaXN0ZW50VHJh
Y2tJRCogdHJhY2tJRCwgQ01NZWRpYVR5cGUqIG1lZGlhVHlwZSkKK3sKKyAgICAqdHJhY2tJRCA9
IG1fdHJhY2tJRDsKKyAgICAqbWVkaWFUeXBlID0gbV9tZWRpYVR5cGU7CisgICAgcmV0dXJuIG5v
RXJyOworfQorCitPU1N0YXR1cyBNZWRpYVRyYWNrUmVhZGVyOjpjcmVhdGVDdXJzb3JBdFByZXNl
bnRhdGlvblRpbWVTdGFtcChDTVRpbWUgdGltZSwgTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqIHNh
bXBsZUN1cnNvcikKK3sKKyAgICAqc2FtcGxlQ3Vyc29yID0gTWVkaWFTYW1wbGVDdXJzb3I6OmNy
ZWF0ZUF0UHJlc2VudGF0aW9uVGltZShhbGxvY2F0b3IoKSwgKnRoaXMsIFBBTDo6dG9NZWRpYVRp
bWUodGltZSkpLmxlYWtSZWYoKS0+d3JhcHBlcigpOworICAgIHJldHVybiBub0VycjsKK30KKwor
T1NTdGF0dXMgTWVkaWFUcmFja1JlYWRlcjo6Y3JlYXRlQ3Vyc29yQXRGaXJzdFNhbXBsZUluRGVj
b2RlT3JkZXIoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqIHNhbXBsZUN1cnNvcikKK3sKKyAgICAq
c2FtcGxlQ3Vyc29yID0gTWVkaWFTYW1wbGVDdXJzb3I6OmNyZWF0ZUF0RGVjb2RlZFNhbXBsZShh
bGxvY2F0b3IoKSwgKnRoaXMsIE1lZGlhU2FtcGxlQ3Vyc29yOjpEZWNvZGVkU2FtcGxlOjpGaXJz
dCkubGVha1JlZigpLT53cmFwcGVyKCk7CisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1
cyBNZWRpYVRyYWNrUmVhZGVyOjpjcmVhdGVDdXJzb3JBdExhc3RTYW1wbGVJbkRlY29kZU9yZGVy
KE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKiBzYW1wbGVDdXJzb3IpCit7CisgICAgKnNhbXBsZUN1
cnNvciA9IE1lZGlhU2FtcGxlQ3Vyc29yOjpjcmVhdGVBdERlY29kZWRTYW1wbGUoYWxsb2NhdG9y
KCksICp0aGlzLCBNZWRpYVNhbXBsZUN1cnNvcjo6RGVjb2RlZFNhbXBsZTo6TGFzdCkubGVha1Jl
ZigpLT53cmFwcGVyKCk7CisgICAgcmV0dXJuIG5vRXJyOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1Jl
YWRlci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlh
VHJhY2tSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2M1NTlkMGQxYjgyODkyMmNlM2YwNDAxNjc5ZTk2
OGMyYjJlZTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuaApAQCAtMCwwICsxLDEyNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikK
KworI2luY2x1ZGUgIkNvcmVNZWRpYVdyYXBwZWQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NhbXBs
ZU1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKworREVDTEFSRV9DT1JFX01FRElB
X1RSQUlUUyhNZWRpYVRyYWNrUmVhZGVyKTsKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBXb3Jr
UXVldWU7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEF1ZGlvVHJhY2tQcml2YXRl
OworY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTsKK2NsYXNzIE1lZGlhU2FtcGxlOworY2xh
c3MgVHJhY2tQcml2YXRlQmFzZTsKK2NsYXNzIFZpZGVvVHJhY2tQcml2YXRlOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTWVkaWFGb3JtYXRSZWFkZXI7CisKK2NsYXNzIE1lZGlh
VHJhY2tSZWFkZXIgZmluYWwgOiBwdWJsaWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYVRyYWNrUmVh
ZGVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBXcmFwcGVyQ2xhc3Mgd3JhcHBl
ckNsYXNzKCk7CisgICAgc3RhdGljIENNQmFzZUNsYXNzSUQgd3JhcHBlckNsYXNzSUQoKTsKKyAg
ICBzdGF0aWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYVRyYWNrUmVhZGVyPiogdW53cmFwKENNQmFz
ZU9iamVjdFJlZik7CisgICAgc3RhdGljIFdURjo6V29ya1F1ZXVlJiBzdG9yYWdlUXVldWUoKTsK
KworICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFUcmFja1JlYWRlcj4gY3JlYXRlKEFsbG9jYXRvciYm
LCBjb25zdCBNZWRpYUZvcm1hdFJlYWRlciYsIENNTWVkaWFUeXBlLCB1aW50NjRfdCwgT3B0aW9u
YWw8Ym9vbD4pOworCisgICAgdWludDY0X3QgdHJhY2tJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
Y2tJRDsgfQorICAgIHZvaWQgYWRkU2FtcGxlKFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4mJiwg
TVRQbHVnaW5CeXRlU291cmNlUmVmKTsKKyAgICB2b2lkIHdhaXRGb3JTYW1wbGUoRnVuY3Rpb248
Ym9vbChXZWJDb3JlOjpTYW1wbGVNYXAmLCBib29sKT4mJikgY29uc3Q7CisKKyAgICB2b2lkIHNl
dEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1faXNFbmFibGVkID0gZW5hYmxlZCA/IEVuYWJsZWQ6
OlRydWUgOiBFbmFibGVkOjpGYWxzZTsgfQorICAgIENNTWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVkaWFUeXBlOyB9CisKKyAgICB2b2lkIGZpbmlzaFBhcnNpbmcoKTsK
KworcHJpdmF0ZToKKyAgICB1c2luZyBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhVHJhY2tSZWFkZXI+
Ojp1bndyYXA7CisKKyAgICBNZWRpYVRyYWNrUmVhZGVyKEFsbG9jYXRvciYmLCBjb25zdCBNZWRp
YUZvcm1hdFJlYWRlciYsIENNTWVkaWFUeXBlLCB1aW50NjRfdCwgT3B0aW9uYWw8Ym9vbD4pOwor
CisgICAgLy8gQ01CYXNlQ2xhc3MKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuICJXZWJLaXQ6Ok1lZGlhVHJhY2tSZWFkZXIiX3M7IH0KKyAgICBPU1N0
YXR1cyBjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYsIENGQWxsb2NhdG9yUmVmLCB2b2lkKiBjb3Bp
ZWRWYWx1ZSkgZmluYWw7CisgICAgdm9pZCBmaW5hbGl6ZSgpIGZpbmFsOworCisgICAgLy8gV3Jh
cHBlckNsYXNzCisgICAgT1NTdGF0dXMgZ2V0VHJhY2tJbmZvKE1UUGVyc2lzdGVudFRyYWNrSUQq
LCBDTU1lZGlhVHlwZSopOworICAgIE9TU3RhdHVzIGNyZWF0ZUN1cnNvckF0UHJlc2VudGF0aW9u
VGltZVN0YW1wKENNVGltZSwgTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqKTsKKyAgICBPU1N0YXR1
cyBjcmVhdGVDdXJzb3JBdEZpcnN0U2FtcGxlSW5EZWNvZGVPcmRlcihNVFBsdWdpblNhbXBsZUN1
cnNvclJlZiopOworICAgIE9TU3RhdHVzIGNyZWF0ZUN1cnNvckF0TGFzdFNhbXBsZUluRGVjb2Rl
T3JkZXIoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqKTsKKworICAgIHN0cnVjdCBTYW1wbGVTdG9y
YWdlIHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICB+
U2FtcGxlU3RvcmFnZSgpIHsgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7IH0KKyAgICAgICAgV2Vi
Q29yZTo6U2FtcGxlTWFwIHNhbXBsZU1hcDsKKyAgICAgICAgYm9vbCBoYXNBbGxTYW1wbGVzIHsg
ZmFsc2UgfTsKKyAgICB9OworCisgICAgZW51bSBFbmFibGVkIDogdWludDhfdCB7IFVua25vd24s
IEZhbHNlLCBUcnVlIH07CisKKyAgICBjb25zdCB1aW50NjRfdCBtX3RyYWNrSUQ7CisgICAgY29u
c3QgQ01NZWRpYVR5cGUgbV9tZWRpYVR5cGU7CisgICAgY29uc3QgTWVkaWFUaW1lIG1fZHVyYXRp
b247CisgICAgc3RkOjphdG9taWM8RW5hYmxlZD4gbV9pc0VuYWJsZWQgeyBFbmFibGVkOjpVbmtu
b3duIH07CisgICAgbXV0YWJsZSBDb25kaXRpb24gbV9zYW1wbGVTdG9yYWdlQ29uZGl0aW9uOwor
ICAgIG11dGFibGUgTG9jayBtX3NhbXBsZVN0b3JhZ2VMb2NrOworICAgIG11dGFibGUgc3RkOjp1
bmlxdWVfcHRyPFNhbXBsZVN0b3JhZ2U+IG1fc2FtcGxlU3RvcmFnZTsKK307CisKK2NvbnN0ZXhw
ciBNZWRpYVRyYWNrUmVhZGVyOjpXcmFwcGVyQ2xhc3MgTWVkaWFUcmFja1JlYWRlcjo6d3JhcHBl
ckNsYXNzKCkKK3sKKyAgICByZXR1cm4geworICAgICAgICAudmVyc2lvbiA9IGtNVFBsdWdpblRy
YWNrUmVhZGVyX0NsYXNzVmVyc2lvbl8xLAorICAgICAgICAuZ2V0VHJhY2tJbmZvID0gW10oTVRQ
bHVnaW5UcmFja1JlYWRlclJlZiB0cmFja1JlYWRlciwgTVRQZXJzaXN0ZW50VHJhY2tJRCogdHJh
Y2tJRCwgQ01NZWRpYVR5cGUqIG1lZGlhVHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIHVud3Jh
cCh0cmFja1JlYWRlciktPmdldFRyYWNrSW5mbyh0cmFja0lELCBtZWRpYVR5cGUpOworICAgICAg
ICB9LAorICAgICAgICAuY3JlYXRlQ3Vyc29yQXRQcmVzZW50YXRpb25UaW1lU3RhbXAgPSBbXShN
VFBsdWdpblRyYWNrUmVhZGVyUmVmIHRyYWNrUmVhZGVyLCBDTVRpbWUgdGltZXN0YW1wLCBNVFBs
dWdpblNhbXBsZUN1cnNvclJlZiogY3Vyc29yKSB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFw
KHRyYWNrUmVhZGVyKS0+Y3JlYXRlQ3Vyc29yQXRQcmVzZW50YXRpb25UaW1lU3RhbXAodGltZXN0
YW1wLCBjdXJzb3IpOworICAgICAgICB9LAorICAgICAgICAuY3JlYXRlQ3Vyc29yQXRGaXJzdFNh
bXBsZUluRGVjb2RlT3JkZXIgPSBbXShNVFBsdWdpblRyYWNrUmVhZGVyUmVmIHRyYWNrUmVhZGVy
LCBNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogY3Vyc29yKSB7CisgICAgICAgICAgICByZXR1cm4g
dW53cmFwKHRyYWNrUmVhZGVyKS0+Y3JlYXRlQ3Vyc29yQXRGaXJzdFNhbXBsZUluRGVjb2RlT3Jk
ZXIoY3Vyc29yKTsKKyAgICAgICAgfSwKKyAgICAgICAgLmNyZWF0ZUN1cnNvckF0TGFzdFNhbXBs
ZUluRGVjb2RlT3JkZXIgPSBbXShNVFBsdWdpblRyYWNrUmVhZGVyUmVmIHRyYWNrUmVhZGVyLCBN
VFBsdWdpblNhbXBsZUN1cnNvclJlZiogY3Vyc29yKSB7CisgICAgICAgICAgICByZXR1cm4gdW53
cmFwKHRyYWNrUmVhZGVyKS0+Y3JlYXRlQ3Vyc29yQXRMYXN0U2FtcGxlSW5EZWNvZGVPcmRlcihj
dXJzb3IpOworICAgICAgICB9LAorICAgIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9TYW1wbGVDdXJzb3IuY3BwIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1NhbXBsZUN1cnNvci5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZTQxYjc5ODhmM2RmZDgyMGVmNWQ3
YmUyYzMzOGMxNjdjODU4ZTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1NhbXBs
ZUN1cnNvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNjggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTYW1wbGVDdXJzb3IuaCIKLQotI2lmIEVO
QUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCi0KLSNpbmNsdWRlICJUcmFja1JlYWRlci5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvTWVkaWFTYW1wbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NhbXBsZU1h
cC5oPgotI2luY2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+
Ci0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5jbHVkZSA8d3RmL01lZGlh
VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+Ci0KLSNpbmNsdWRlIDxwYWwvY29jb2Ev
TWVkaWFUb29sYm94U29mdExpbmsuaD4KLQotV1RGX0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChNVFBs
dWdpblNhbXBsZUN1cnNvcik7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3Bh
Y2UgUEFMOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBPcHRpb25hbDxTYW1w
bGVDdXJzb3I6OkRlY29kZU9yZGVySXRlcmF0b3I+IG1ha2VJdGVyYXRvcihjb25zdCBTYW1wbGVD
dXJzb3I6OkRlY29kZWRTYW1wbGUmIGRlY29kZWRTYW1wbGUsIFNhbXBsZU1hcCYgc2FtcGxlcywg
Ym9vbCBoYXNBbGxTYW1wbGVzKQotewotICAgIGF1dG8mIGRlY29kZU9yZGVyID0gc2FtcGxlcy5k
ZWNvZGVPcmRlcigpOwotICAgIHN3aXRjaCAoZGVjb2RlZFNhbXBsZSkgewotICAgIGNhc2UgU2Ft
cGxlQ3Vyc29yOjpEZWNvZGVkU2FtcGxlOjpGaXJzdDoKLSAgICAgICAgaWYgKHNhbXBsZXMuc2l6
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZU9yZGVyLmJlZ2luKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU2FtcGxlQ3Vyc29yOjpEZWNvZGVkU2FtcGxlOjpMYXN0OgotICAgICAg
ICBpZiAoc2FtcGxlcy5zaXplKCkgJiYgaGFzQWxsU2FtcGxlcykKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6OnByZXYoZGVjb2RlT3JkZXIuZW5kKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotc3RhdGljIE9wdGlvbmFsPFNhbXBsZUN1cnNv
cjo6RGVjb2RlT3JkZXJJdGVyYXRvcj4gbWFrZUl0ZXJhdG9yKGNvbnN0IFNhbXBsZUN1cnNvcjo6
UHJlc2VudGF0aW9uT3JkZXJJdGVyYXRvciYgaXRlcmF0b3IsIFNhbXBsZU1hcCYgc2FtcGxlcywg
Ym9vbCkKLXsKLSAgICBNZWRpYVNhbXBsZSYgc2FtcGxlID0gKml0ZXJhdG9yLT5zZWNvbmQuZ2V0
KCk7Ci0gICAgcmV0dXJuIHNhbXBsZXMuZGVjb2RlT3JkZXIoKS5maW5kU2FtcGxlV2l0aERlY29k
ZUtleShzdGQ6Om1ha2VfcGFpcihzYW1wbGUuZGVjb2RlVGltZSgpLCBzYW1wbGUucHJlc2VudGF0
aW9uVGltZSgpKSk7Ci19Ci0KLXN0YXRpYyBPcHRpb25hbDxTYW1wbGVDdXJzb3I6OlByZXNlbnRh
dGlvbk9yZGVySXRlcmF0b3I+IG1ha2VJdGVyYXRvcihjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRh
dGlvblRpbWUsIFNhbXBsZU1hcCYgc2FtcGxlcywgYm9vbCBoYXNBbGxTYW1wbGVzKQotewotICAg
IGF1dG8mIHByZXNlbnRhdGlvbk9yZGVyID0gc2FtcGxlcy5wcmVzZW50YXRpb25PcmRlcigpOwot
ICAgIGF1dG8gaXRlcmF0b3IgPSBwcmVzZW50YXRpb25PcmRlci5maW5kU2FtcGxlQ29udGFpbmlu
Z09yQWZ0ZXJQcmVzZW50YXRpb25UaW1lKHByZXNlbnRhdGlvblRpbWUpOwotICAgIGlmIChpdGVy
YXRvciAhPSBwcmVzZW50YXRpb25PcmRlci5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
OwotICAgIGlmIChzYW1wbGVzLnNpemUoKSAmJiBoYXNBbGxTYW1wbGVzKQotICAgICAgICByZXR1
cm4gc3RkOjpwcmV2KGl0ZXJhdG9yKTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1z
dGF0aWMgT3B0aW9uYWw8U2FtcGxlQ3Vyc29yOjpQcmVzZW50YXRpb25PcmRlckl0ZXJhdG9yPiBt
YWtlSXRlcmF0b3IoY29uc3QgU2FtcGxlQ3Vyc29yOjpEZWNvZGVPcmRlckl0ZXJhdG9yJiBpdGVy
YXRvciwgU2FtcGxlTWFwJiBzYW1wbGVzLCBib29sKQotewotICAgIE1lZGlhU2FtcGxlJiBzYW1w
bGUgPSAqaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKLSAgICByZXR1cm4gc2FtcGxlcy5wcmVzZW50
YXRpb25PcmRlcigpLmZpbmRTYW1wbGVXaXRoUHJlc2VudGF0aW9uVGltZShzYW1wbGUucHJlc2Vu
dGF0aW9uVGltZSgpKTsKLX0KLQotc3RhdGljIE1lZGlhVGltZSBtYWtlVGltZShjb25zdCBEZWNv
ZGVPcmRlclNhbXBsZU1hcDo6aXRlcmF0b3ImIGl0KQotewotICAgIHJldHVybiBpdC0+c2Vjb25k
LT5kZWNvZGVUaW1lKCk7Ci19Ci0KLXN0YXRpYyBNZWRpYVRpbWUgbWFrZVRpbWUoY29uc3QgUHJl
c2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yJiBpdCkKLXsKLSAgICByZXR1cm4gaXQt
PnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcmRl
cmVkTWFwPiBzdGF0aWMgT3JkZXJlZE1hcCYgb3JkZXJlZFNhbXBsZXMoU2FtcGxlTWFwJik7Ci0K
LXRlbXBsYXRlPD4KLURlY29kZU9yZGVyU2FtcGxlTWFwJiBvcmRlcmVkU2FtcGxlcyhTYW1wbGVN
YXAmIHNhbXBsZXMpCi17Ci0gICAgcmV0dXJuIHNhbXBsZXMuZGVjb2RlT3JkZXIoKTsKLX0KLQot
dGVtcGxhdGU8PgotUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXAmIG9yZGVyZWRTYW1wbGVzKFNh
bXBsZU1hcCYgc2FtcGxlcykKLXsKLSAgICByZXR1cm4gc2FtcGxlcy5wcmVzZW50YXRpb25PcmRl
cigpOwotfQotCi1zdGF0aWMgRGVjb2RlT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yIHVwcGVyQm91
bmQoRGVjb2RlT3JkZXJTYW1wbGVNYXAmIG1hcCwgY29uc3QgTWVkaWFUaW1lJiB0aW1lKQotewot
ICAgIHJldHVybiBtYXAuZmluZFNhbXBsZUFmdGVyRGVjb2RlS2V5KHN0ZDo6bWFrZV9wYWlyKHRp
bWUsIE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUoKSkpOwotfQotCi1zdGF0aWMgUHJl
c2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yIHVwcGVyQm91bmQoUHJlc2VudGF0aW9u
T3JkZXJTYW1wbGVNYXAmIG1hcCwgY29uc3QgTWVkaWFUaW1lJiB0aW1lKQotewotICAgIHJldHVy
biBtYXAuZmluZFNhbXBsZVN0YXJ0aW5nQWZ0ZXJQcmVzZW50YXRpb25UaW1lKHRpbWUpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPcmRlcmVkTWFwLCB0eXBlbmFtZSBTdGVwPiBzdGF0aWMgU3Rl
cCBzdGVwSXRlcmF0b3IoU3RlcCwgdHlwZW5hbWUgT3JkZXJlZE1hcDo6aXRlcmF0b3ImLCBPcmRl
cmVkTWFwJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9yZGVyZWRNYXA+Ci1pbnQ2NF90IHN0ZXBJ
dGVyYXRvcihpbnQ2NF90IHN0ZXBzUmVtYWluaW5nLCB0eXBlbmFtZSBPcmRlcmVkTWFwOjppdGVy
YXRvciYgaXRlcmF0b3IsIE9yZGVyZWRNYXAmIHNhbXBsZXMpCi17Ci0gICAgQVNTRVJUKGl0ZXJh
dG9yICE9IHNhbXBsZXMuZW5kKCkpOwotICAgIGlmIChzdGVwc1JlbWFpbmluZyA8IDApCi0gICAg
ICAgIGZvciAoOyBzdGVwc1JlbWFpbmluZyAmJiBpdGVyYXRvciAhPSBzYW1wbGVzLmJlZ2luKCk7
ICsrc3RlcHNSZW1haW5pbmcsIC0taXRlcmF0b3IpIHsgfQotICAgIGVsc2UKLSAgICAgICAgZm9y
IChhdXRvIG5leHQgPSBzdGQ6Om5leHQoaXRlcmF0b3IpOyBzdGVwc1JlbWFpbmluZyAmJiBuZXh0
ICE9IHNhbXBsZXMuZW5kKCk7IC0tc3RlcHNSZW1haW5pbmcsIGl0ZXJhdG9yID0gbmV4dCsrKSB7
IH0KLSAgICByZXR1cm4gc3RlcHNSZW1haW5pbmc7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9y
ZGVyZWRNYXA+Ci1NZWRpYVRpbWUgc3RlcEl0ZXJhdG9yKE1lZGlhVGltZSBkZWx0YVJlbWFpbmlu
ZywgdHlwZW5hbWUgT3JkZXJlZE1hcDo6aXRlcmF0b3ImIGl0ZXJhdG9yLCBPcmRlcmVkTWFwJiBz
YW1wbGVzKQotewotICAgIEFTU0VSVChpdGVyYXRvciAhPSBzYW1wbGVzLmVuZCgpKTsKLSAgICBh
dXRvIHJlcXVlc3RlZFRpbWUgPSBtYWtlVGltZShpdGVyYXRvcikgKyBkZWx0YVJlbWFpbmluZzsK
LSAgICBpdGVyYXRvciA9IHVwcGVyQm91bmQoc2FtcGxlcywgcmVxdWVzdGVkVGltZSk7Ci0gICAg
aWYgKGl0ZXJhdG9yICE9IHNhbXBsZXMuYmVnaW4oKSkKLSAgICAgICAgLS1pdGVyYXRvcjsKLSAg
ICBkZWx0YVJlbWFpbmluZyA9IHJlcXVlc3RlZFRpbWUgLSBtYWtlVGltZShpdGVyYXRvcik7Ci0g
ICAgaWYgKGRlbHRhUmVtYWluaW5nID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYmIGRlbHRhUmVt
YWluaW5nIDwgaXRlcmF0b3ItPnNlY29uZC0+ZHVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIE1l
ZGlhVGltZTo6emVyb1RpbWUoKTsKLSAgICByZXR1cm4gZGVsdGFSZW1haW5pbmc7Ci19Ci0KLUNN
QmFzZUNsYXNzSUQgU2FtcGxlQ3Vyc29yOjp3cmFwcGVyQ2xhc3NJRCgpCi17Ci0gICAgcmV0dXJu
IE1UUGx1Z2luU2FtcGxlQ3Vyc29yR2V0Q2xhc3NJRCgpOwotfQotCi1Db3JlTWVkaWFXcmFwcGVk
PFNhbXBsZUN1cnNvcj4qIFNhbXBsZUN1cnNvcjo6dW53cmFwKENNQmFzZU9iamVjdFJlZiBvYmpl
Y3QpCi17Ci0gICAgcmV0dXJuIHVud3JhcChjaGVja2VkX2NmX2Nhc3Q8V3JhcHBlclJlZj4ob2Jq
ZWN0KSk7Ci19Ci0KLVJlZlB0cjxTYW1wbGVDdXJzb3I+IFNhbXBsZUN1cnNvcjo6Y3JlYXRlQXRQ
cmVzZW50YXRpb25UaW1lKEFsbG9jYXRvciYmIGFsbG9jYXRvciwgVHJhY2tSZWFkZXImIHRyYWNr
UmVhZGVyLCBNZWRpYVRpbWUgdGltZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IChhbGxv
Y2F0b3IpIFNhbXBsZUN1cnNvcihXVEZNb3ZlKGFsbG9jYXRvciksIHRyYWNrUmVhZGVyLCBXVEZN
b3ZlKHRpbWUpKSk7Ci19Ci0KLVJlZlB0cjxTYW1wbGVDdXJzb3I+IFNhbXBsZUN1cnNvcjo6Y3Jl
YXRlQXREZWNvZGVkU2FtcGxlKEFsbG9jYXRvciYmIGFsbG9jYXRvciwgVHJhY2tSZWFkZXImIHRy
YWNrUmVhZGVyLCBEZWNvZGVkU2FtcGxlIGRlY29kZWRTYW1wbGUpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyAoYWxsb2NhdG9yKSBTYW1wbGVDdXJzb3IoV1RGTW92ZShhbGxvY2F0b3IpLCB0
cmFja1JlYWRlciwgV1RGTW92ZShkZWNvZGVkU2FtcGxlKSkpOwotfQotCi1SZWZQdHI8U2FtcGxl
Q3Vyc29yPiBTYW1wbGVDdXJzb3I6OmNvcHkoQWxsb2NhdG9yJiYgYWxsb2NhdG9yLCBjb25zdCBT
YW1wbGVDdXJzb3ImIGN1cnNvcikKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGN1cnNv
ci5tX2xvY2F0b3JMb2NrKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IChhbGxvY2F0b3IpIFNh
bXBsZUN1cnNvcihXVEZNb3ZlKGFsbG9jYXRvciksIGN1cnNvcikpOwotfQotCi1TYW1wbGVDdXJz
b3I6OlNhbXBsZUN1cnNvcihBbGxvY2F0b3ImJiBhbGxvY2F0b3IsIFRyYWNrUmVhZGVyJiB0cmFj
a1JlYWRlciwgTG9jYXRvciBsb2NhdG9yKQotICAgIDogQ29yZU1lZGlhV3JhcHBlZChXVEZNb3Zl
KGFsbG9jYXRvcikpCi0gICAgLCBtX3RyYWNrUmVhZGVyKHRyYWNrUmVhZGVyKQotICAgICwgbV9s
b2NhdG9yKFdURk1vdmUobG9jYXRvcikpCi17Ci19Ci0KLVNhbXBsZUN1cnNvcjo6U2FtcGxlQ3Vy
c29yKEFsbG9jYXRvciYmIGFsbG9jYXRvciwgY29uc3QgU2FtcGxlQ3Vyc29yJiBjdXJzb3IpCi0g
ICAgOiBDb3JlTWVkaWFXcmFwcGVkKFdURk1vdmUoYWxsb2NhdG9yKSkKLSAgICAsIG1fdHJhY2tS
ZWFkZXIoY3Vyc29yLm1fdHJhY2tSZWFkZXIuY29weVJlZigpKQotICAgICwgbV9sb2NhdG9yKGN1
cnNvci5tX2xvY2F0b3IpCi17Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgotT3B0
aW9uYWw8SXRlcmF0b3I+IFNhbXBsZUN1cnNvcjo6bG9jYXRlSXRlcmF0b3IoU2FtcGxlTWFwJiBz
YW1wbGVzLCBib29sIGhhc0FsbFNhbXBsZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fbG9jYXRv
ckxvY2suaXNMb2NrZWQoKSk7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9sb2NhdG9yLAot
ICAgICAgICBbJl0oY29uc3QgYXV0byYgbG9jYXRvcikgLT4gT3B0aW9uYWw8SXRlcmF0b3I+IHsK
LSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtYWtlSXRlcmF0b3IobG9jYXRvciwgc2FtcGxl
cywgaGFzQWxsU2FtcGxlcyk7Ci0gICAgICAgICAgICBpZiAoIWl0ZXJhdG9yKQotICAgICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICBtX2xvY2F0b3IgPSBXVEZN
b3ZlKCppdGVyYXRvcik7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRlSXRlcmF0b3I8SXRlcmF0
b3I+KHNhbXBsZXMsIGhhc0FsbFNhbXBsZXMpOwotICAgICAgICB9LAotICAgICAgICBbJl0oY29u
c3QgSXRlcmF0b3ImIGl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3I7Ci0g
ICAgICAgIH0KLSAgICApOwotfQotCi1NZWRpYVNhbXBsZSogU2FtcGxlQ3Vyc29yOjpsb2NhdGVN
ZWRpYVNhbXBsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fbG9jYXRvckxvY2suaXNMb2NrZWQo
KSk7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9sb2NhdG9yLAotICAgICAgICBbJl0oY29u
c3QgYXV0byYgbG9jYXRvcikgewotICAgICAgICAgICAgbV90cmFja1JlYWRlci0+d2FpdEZvclNh
bXBsZShbJl0oU2FtcGxlTWFwJiBzYW1wbGVzLCBib29sIGhhc0FsbFNhbXBsZXMpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbWFrZUl0ZXJhdG9yKGxvY2F0b3IsIHNhbXBsZXMs
IGhhc0FsbFNhbXBsZXMpOwotICAgICAgICAgICAgICAgIGlmICghaXRlcmF0b3IpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBoYXNBbGxTYW1wbGVzOwotICAgICAgICAgICAgICAgIG1fbG9j
YXRvciA9IFdURk1vdmUoKml0ZXJhdG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIGxvY2F0ZU1lZGlhU2FtcGxlKCk7
Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXShjb25zdCBTYW1wbGVDdXJzb3I6OkRlY29kZU9yZGVy
SXRlcmF0b3ImIGl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29u
ZC5nZXQoKTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdKGNvbnN0IFNhbXBsZUN1cnNvcjo6UHJl
c2VudGF0aW9uT3JkZXJJdGVyYXRvciYgaXRlcmF0b3IpIHsKLSAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvci0+c2Vjb25kLmdldCgpOwotICAgICAgICB9Ci0gICAgKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgT3JkZXJlZE1hcCwgdHlwZW5hbWUgU3RlcD4KLVN0ZXAgU2FtcGxlQ3Vyc29yOjpz
dGVwSW5PcmRlcmVkTWFwKFN0ZXAgc3RlcHNSZW1haW5pbmcpCi17Ci0gICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2xvY2F0b3JMb2NrKTsKLSAgICBtX3RyYWNrUmVhZGVyLT53YWl0Rm9yU2Ft
cGxlKFsmXShTYW1wbGVNYXAmIHNhbXBsZXMsIGJvb2wgaGFzQWxsU2FtcGxlcykgewotICAgICAg
ICBpZiAoYXV0byBpdGVyYXRvciA9IGxvY2F0ZUl0ZXJhdG9yPHR5cGVuYW1lIE9yZGVyZWRNYXA6
Oml0ZXJhdG9yPihzYW1wbGVzLCBoYXNBbGxTYW1wbGVzKSkgewotICAgICAgICAgICAgc3RlcHNS
ZW1haW5pbmcgPSBzdGVwSXRlcmF0b3Ioc3RlcHNSZW1haW5pbmcsICppdGVyYXRvciwgb3JkZXJl
ZFNhbXBsZXM8T3JkZXJlZE1hcD4oc2FtcGxlcykpOwotICAgICAgICAgICAgbV9sb2NhdG9yID0g
V1RGTW92ZSgqaXRlcmF0b3IpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBoYXNBbGxTYW1w
bGVzIHx8ICFzdGVwc1JlbWFpbmluZzsKLSAgICB9KTsKLSAgICByZXR1cm4gc3RlcHNSZW1haW5p
bmc7Ci19Ci0KLU9TU3RhdHVzIFNhbXBsZUN1cnNvcjo6Z2V0TWVkaWFTYW1wbGUoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChNZWRpYVNhbXBsZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAot
ewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NhdG9yTG9jayk7Ci0gICAgYXV0byBz
YW1wbGUgPSBsb2NhdGVNZWRpYVNhbXBsZSgpOwotICAgIGlmICghc2FtcGxlKQotICAgICAgICBy
ZXR1cm4ga01UUGx1Z2luU2FtcGxlQ3Vyc29yRXJyb3JfTm9TYW1wbGVzOwotICAgIGNvbXBsZXRp
b25IYW5kbGVyKCpzYW1wbGUpOwotICAgIHJldHVybiBub0VycjsKLX0KLQotT1NTdGF0dXMgU2Ft
cGxlQ3Vyc29yOjpjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYsIENGQWxsb2NhdG9yUmVmLCB2b2lk
KikKLXsKLSAgICByZXR1cm4ga0NNQmFzZU9iamVjdEVycm9yX1ZhbHVlTm90QXZhaWxhYmxlOwot
fQotCi1PU1N0YXR1cyBTYW1wbGVDdXJzb3I6OmNvcHkoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYq
IHNhbXBsZUN1cnNvcikgY29uc3QKLXsKLSAgICAqc2FtcGxlQ3Vyc29yID0gU2FtcGxlQ3Vyc29y
Ojpjb3B5KGFsbG9jYXRvcigpLCAqdGhpcykubGVha1JlZigpLT53cmFwcGVyKCk7Ci0gICAgcmV0
dXJuIG5vRXJyOwotfQotCi1PU1N0YXR1cyBTYW1wbGVDdXJzb3I6OnN0ZXBJbkRlY29kZU9yZGVy
QW5kUmVwb3J0U3RlcHNUYWtlbihpbnQ2NF90IHN0ZXBzVG9UYWtlLCBpbnQ2NF90KiBzdGVwc1Rh
a2VuKQotewotICAgIGF1dG8gc3RlcHNSZW1haW5pbmcgPSBzdGVwSW5PcmRlcmVkTWFwPERlY29k
ZU9yZGVyU2FtcGxlTWFwPihzdGVwc1RvVGFrZSk7Ci0gICAgKnN0ZXBzVGFrZW4gPSBzdGVwc1Rv
VGFrZSAtIHN0ZXBzUmVtYWluaW5nOwotICAgIHJldHVybiBub0VycjsKLX0KLQotT1NTdGF0dXMg
U2FtcGxlQ3Vyc29yOjpzdGVwSW5QcmVzZW50YXRpb25PcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4o
aW50NjRfdCBzdGVwc1RvVGFrZSwgaW50NjRfdCogc3RlcHNUYWtlbikKLXsKLSAgICBhdXRvIHN0
ZXBzUmVtYWluaW5nID0gc3RlcEluT3JkZXJlZE1hcDxQcmVzZW50YXRpb25PcmRlclNhbXBsZU1h
cD4oc3RlcHNUb1Rha2UpOwotICAgICpzdGVwc1Rha2VuID0gc3RlcHNUb1Rha2UgLSBzdGVwc1Jl
bWFpbmluZzsKLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLU9TU3RhdHVzIFNhbXBsZUN1cnNvcjo6
c3RlcEJ5RGVjb2RlVGltZShDTVRpbWUgdGltZSwgQm9vbGVhbiogd2FzUGlubmVkKQotewotICAg
IGF1dG8gdGltZVJlbWFpbmluZyA9IHN0ZXBJbk9yZGVyZWRNYXA8RGVjb2RlT3JkZXJTYW1wbGVN
YXA+KFBBTDo6dG9NZWRpYVRpbWUodGltZSkpOwotICAgICp3YXNQaW5uZWQgPSAhIXRpbWVSZW1h
aW5pbmc7Ci0gICAgcmV0dXJuIG5vRXJyOwotfQotCi1PU1N0YXR1cyBTYW1wbGVDdXJzb3I6OnN0
ZXBCeVByZXNlbnRhdGlvblRpbWUoQ01UaW1lIHRpbWUsIEJvb2xlYW4qIHdhc1Bpbm5lZCkKLXsK
LSAgICBhdXRvIHRpbWVSZW1haW5pbmcgPSBzdGVwSW5PcmRlcmVkTWFwPFByZXNlbnRhdGlvbk9y
ZGVyU2FtcGxlTWFwPihQQUw6OnRvTWVkaWFUaW1lKHRpbWUpKTsKLSAgICAqd2FzUGlubmVkID0g
ISF0aW1lUmVtYWluaW5nOwotICAgIHJldHVybiBub0VycjsKLX0KLQotQ0ZDb21wYXJpc29uUmVz
dWx0IFNhbXBsZUN1cnNvcjo6Y29tcGFyZUluRGVjb2RlT3JkZXIoTVRQbHVnaW5TYW1wbGVDdXJz
b3JSZWYgb3RoZXJDdXJzb3JSZWYpIGNvbnN0Ci17Ci0gICAgaWYgKHdyYXBwZXIoKSA9PSBvdGhl
ckN1cnNvclJlZikKLSAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVFcXVhbFRvOwotCi0gICAgYXV0
byBkZWNvZGVUaW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwotICAgIGdldE1lZGlhU2Ft
cGxlKFsmXShNZWRpYVNhbXBsZSYgc2FtcGxlKSB7Ci0gICAgICAgIGRlY29kZVRpbWUgPSBzYW1w
bGUuZGVjb2RlVGltZSgpOwotICAgIH0pOwotCi0gICAgYXV0byBvdGhlckRlY29kZVRpbWUgPSBN
ZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0gICAgaWYgKGF1dG8gb3RoZXJDdXJzb3IgPSB1bndy
YXAob3RoZXJDdXJzb3JSZWYpKSB7Ci0gICAgICAgIG90aGVyQ3Vyc29yLT5nZXRNZWRpYVNhbXBs
ZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgewotICAgICAgICAgICAgb3RoZXJEZWNvZGVUaW1l
ID0gc2FtcGxlLmRlY29kZVRpbWUoKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgc3dpdGNo
IChkZWNvZGVUaW1lLmNvbXBhcmUob3RoZXJEZWNvZGVUaW1lKSkgewotICAgIGNhc2UgTWVkaWFU
aW1lOjpMZXNzVGhhbjoKLSAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVMZXNzVGhhbjsKLSAgICBj
YXNlIE1lZGlhVGltZTo6RXF1YWxUbzoKLSAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVFcXVhbFRv
OwotICAgIGNhc2UgTWVkaWFUaW1lOjpHcmVhdGVyVGhhbjoKLSAgICAgICAgcmV0dXJuIGtDRkNv
bXBhcmVHcmVhdGVyVGhhbjsKLSAgICB9Ci19Ci0KLU9TU3RhdHVzIFNhbXBsZUN1cnNvcjo6Z2V0
U2FtcGxlVGltaW5nKENNU2FtcGxlVGltaW5nSW5mbyogc2FtcGxlVGltaW5nKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRNZWRpYVNhbXBsZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgewotICAg
ICAgICAqc2FtcGxlVGltaW5nID0gewotICAgICAgICAgICAgLy8gRklYTUU6IER1cmF0aW9uIHNo
b3VsZCBiZSB0aGUgZGlmZmVyZW5jZSBpbiBwcmVzZW50YXRpb24gdGltZSBiZXR3ZWVuIHRoaXMg
c2FtcGxlIGFuZCB0aGUgbmV4dCBpbiBwcmVzZW50YXRpb24gb3JkZXIgKG9yIHRyYWNrIGR1cmF0
aW9uIGlmIHRoaXMgaXMgdGhlIGxhc3Qgc2FtcGxlKS4KLSAgICAgICAgICAgIC5kdXJhdGlvbiA9
IFBBTDo6dG9DTVRpbWUoc2FtcGxlLmR1cmF0aW9uKCkpLAotICAgICAgICAgICAgLnByZXNlbnRh
dGlvblRpbWVTdGFtcCA9IFBBTDo6dG9DTVRpbWUoc2FtcGxlLnByZXNlbnRhdGlvblRpbWUoKSks
Ci0gICAgICAgICAgICAuZGVjb2RlVGltZVN0YW1wID0gUEFMOjp0b0NNVGltZShzYW1wbGUuZGVj
b2RlVGltZSgpKSwKLSAgICAgICAgfTsKLSAgICB9KTsKLX0KLQotT1NTdGF0dXMgU2FtcGxlQ3Vy
c29yOjpnZXRTeW5jSW5mbyhNVFBsdWdpblNhbXBsZUN1cnNvclN5bmNJbmZvKiBzeW5jSW5mbykg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0TWVkaWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxlJiBzYW1w
bGUpIHsKLSAgICAgICAgKnN5bmNJbmZvID0gewotICAgICAgICAgICAgLmZ1bGxTeW5jID0gc2Ft
cGxlLmlzU3luYygpCi0gICAgICAgIH07Ci0gICAgfSk7Ci19Ci0KLU9TU3RhdHVzIFNhbXBsZUN1
cnNvcjo6Y29weUZvcm1hdERlc2NyaXB0aW9uKENNRm9ybWF0RGVzY3JpcHRpb25SZWYqIGZvcm1h
dERlc2NyaXB0aW9uT3V0KSBjb25zdAotewotICAgIHJldHVybiBnZXRNZWRpYVNhbXBsZShbJl0o
TWVkaWFTYW1wbGUmIHNhbXBsZSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1T
YW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGUpOwotICAgICAgICAqZm9ybWF0RGVzY3JpcHRpb25P
dXQgPSByZXRhaW5QdHIoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNh
bXBsZS5zZWNvbmQpLmxlYWtSZWYoKTsKLSAgICB9KTsKLX0KLQotT1NTdGF0dXMgU2FtcGxlQ3Vy
c29yOjpjb3B5U2FtcGxlTG9jYXRpb24oTVRQbHVnaW5TYW1wbGVDdXJzb3JTdG9yYWdlUmFuZ2Uq
IHN0b3JhZ2VSYW5nZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmKiBieXRlU291cmNlKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRNZWRpYVNhbXBsZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNhbXBsZS5w
bGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5
cGUpOwotICAgICAgICBhdXRvIGJ5dGVSYW5nZSA9ICpzYW1wbGUuYnl0ZVJhbmdlKCk7Ci0gICAg
ICAgICpzdG9yYWdlUmFuZ2UgPSB7Ci0gICAgICAgICAgICAub2Zmc2V0ID0gQ2hlY2tlZEludDY0
KGJ5dGVSYW5nZS5ieXRlT2Zmc2V0KS51bnNhZmVHZXQoKSwKLSAgICAgICAgICAgIC5sZW5ndGgg
PSBDaGVja2VkSW50NjQoYnl0ZVJhbmdlLmJ5dGVMZW5ndGgpLnVuc2FmZUdldCgpLAotICAgICAg
ICB9OwotICAgICAgICAqYnl0ZVNvdXJjZSA9IHJldGFpblB0cihzYW1wbGUucGxhdGZvcm1TYW1w
bGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLmZpcnN0KS5sZWFrUmVmKCk7Ci0gICAgfSk7Ci19
Ci0KLU9TU3RhdHVzIFNhbXBsZUN1cnNvcjo6Z2V0UGxheWFibGVIb3Jpem9uKENNVGltZSopIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGtDTUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5vdEF2YWlsYWJsZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCTV9GT1JN
QVRfUkVBREVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL1NhbXBsZUN1cnNvci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL1NhbXBsZUN1cnNvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3Y2RiN2FlNzNmYzU3OWQzMTRkZjc4MTFjM2Q2NTUzOWNmMzNkZTRlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9NZWRpYUZvcm1hdFJlYWRlci9TYW1wbGVDdXJzb3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCTV9G
T1JNQVRfUkVBREVSKQotCi0jaW5jbHVkZSAiQ29yZU1lZGlhV3JhcHBlZC5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvU2FtcGxlTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgotI2luY2x1
ZGUgPHd0Zi9WYXJpYW50Lmg+Ci0KLURFQ0xBUkVfQ09SRV9NRURJQV9UUkFJVFMoU2FtcGxlQ3Vy
c29yKTsKLQotLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2Uga01UUGx1Z2luU2FtcGxlQ3Vyc29y
X0NsYXNzVmVyc2lvbl80IGlzIGF2YWlsYWJsZSBpbiBTREtzLgotI2lmIGRlZmluZWQoSEFWRV9N
VF9QTFVHSU5fU0FNUExFX0NVUlNPUl9QTEFZQUJMRV9IT1JJWk9OKQotI3VuZGVmIEhBVkVfTVRf
UExVR0lOX1NBTVBMRV9DVVJTT1JfUExBWUFCTEVfSE9SSVpPTgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIE1lZGlhU2FtcGxlOwotfTsKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFRyYWNrUmVhZGVyOwotCi1jbGFzcyBTYW1wbGVDdXJzb3IgOiBwdWJsaWMgQ29y
ZU1lZGlhV3JhcHBlZDxTYW1wbGVDdXJzb3I+IHsKLXB1YmxpYzoKLSAgICB1c2luZyBEZWNvZGVP
cmRlckl0ZXJhdG9yID0gRGVjb2RlT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yOwotICAgIHVzaW5n
IFByZXNlbnRhdGlvbk9yZGVySXRlcmF0b3IgPSBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6
aXRlcmF0b3I7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFdyYXBwZXJDbGFzcyB3cmFwcGVyQ2xh
c3MoKTsKLSAgICBzdGF0aWMgQ01CYXNlQ2xhc3NJRCB3cmFwcGVyQ2xhc3NJRCgpOwotICAgIHN0
YXRpYyBDb3JlTWVkaWFXcmFwcGVkPFNhbXBsZUN1cnNvcj4qIHVud3JhcChDTUJhc2VPYmplY3RS
ZWYpOwotCi0gICAgZW51bSBjbGFzcyBEZWNvZGVkU2FtcGxlIHsKLSAgICAgICAgRmlyc3QsCi0g
ICAgICAgIExhc3QsCi0gICAgfTsKLQotICAgIHN0YXRpYyBSZWZQdHI8U2FtcGxlQ3Vyc29yPiBj
b3B5KEFsbG9jYXRvciYmLCBjb25zdCBTYW1wbGVDdXJzb3ImKTsKLSAgICBzdGF0aWMgUmVmUHRy
PFNhbXBsZUN1cnNvcj4gY3JlYXRlQXREZWNvZGVkU2FtcGxlKEFsbG9jYXRvciYmLCBUcmFja1Jl
YWRlciYsIERlY29kZWRTYW1wbGUpOwotICAgIHN0YXRpYyBSZWZQdHI8U2FtcGxlQ3Vyc29yPiBj
cmVhdGVBdFByZXNlbnRhdGlvblRpbWUoQWxsb2NhdG9yJiYsIFRyYWNrUmVhZGVyJiwgTWVkaWFU
aW1lKTsKLQotcHJpdmF0ZToKLSAgICB1c2luZyBDb3JlTWVkaWFXcmFwcGVkPFNhbXBsZUN1cnNv
cj46OnVud3JhcDsKLSAgICB1c2luZyBMb2NhdG9yID0gVmFyaWFudDxNZWRpYVRpbWUsIERlY29k
ZWRTYW1wbGUsIERlY29kZU9yZGVySXRlcmF0b3IsIFByZXNlbnRhdGlvbk9yZGVySXRlcmF0b3I+
OwotCi0gICAgU2FtcGxlQ3Vyc29yKEFsbG9jYXRvciYmLCBUcmFja1JlYWRlciYsIExvY2F0b3Ip
OwotICAgIFNhbXBsZUN1cnNvcihBbGxvY2F0b3ImJiwgY29uc3QgU2FtcGxlQ3Vyc29yJik7Ci0K
LSAgICBXZWJDb3JlOjpNZWRpYVNhbXBsZSogbG9jYXRlTWVkaWFTYW1wbGUoKSBjb25zdDsKLSAg
ICBPU1N0YXR1cyBnZXRNZWRpYVNhbXBsZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
Ok1lZGlhU2FtcGxlJik+JiYpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9y
PiBPcHRpb25hbDxJdGVyYXRvcj4gbG9jYXRlSXRlcmF0b3IoU2FtcGxlTWFwJiwgYm9vbCBoYXNB
bGxTYW1wbGVzKSBjb25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9yZGVyZWRNYXAsIHR5
cGVuYW1lIFN0ZXA+IFN0ZXAgc3RlcEluT3JkZXJlZE1hcChTdGVwKTsKLQotICAgIC8vIENvcmVN
ZWRpYVdyYXBwZWQKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJXZWJLaXQ6OlNhbXBsZUN1cnNvciJfczsgfQotICAgIE9TU3RhdHVzIGNvcHlQcm9w
ZXJ0eShDRlN0cmluZ1JlZiwgQ0ZBbGxvY2F0b3JSZWYsIHZvaWQqIGNvcGllZFZhbHVlKSBmaW5h
bDsKLQotICAgIC8vIFdyYXBwZXJDbGFzcwotICAgIE9TU3RhdHVzIGNvcHkoTVRQbHVnaW5TYW1w
bGVDdXJzb3JSZWYqKSBjb25zdDsKLSAgICBPU1N0YXR1cyBzdGVwSW5EZWNvZGVPcmRlckFuZFJl
cG9ydFN0ZXBzVGFrZW4oaW50NjRfdCwgaW50NjRfdCopOwotICAgIE9TU3RhdHVzIHN0ZXBJblBy
ZXNlbnRhdGlvbk9yZGVyQW5kUmVwb3J0U3RlcHNUYWtlbihpbnQ2NF90LCBpbnQ2NF90Kik7Ci0g
ICAgT1NTdGF0dXMgc3RlcEJ5RGVjb2RlVGltZShDTVRpbWUsIEJvb2xlYW4qKTsKLSAgICBPU1N0
YXR1cyBzdGVwQnlQcmVzZW50YXRpb25UaW1lKENNVGltZSwgQm9vbGVhbiopOwotICAgIENGQ29t
cGFyaXNvblJlc3VsdCBjb21wYXJlSW5EZWNvZGVPcmRlcihNVFBsdWdpblNhbXBsZUN1cnNvclJl
ZikgY29uc3Q7Ci0gICAgT1NTdGF0dXMgZ2V0U2FtcGxlVGltaW5nKENNU2FtcGxlVGltaW5nSW5m
byopIGNvbnN0OwotICAgIE9TU3RhdHVzIGdldFN5bmNJbmZvKE1UUGx1Z2luU2FtcGxlQ3Vyc29y
U3luY0luZm8qKSBjb25zdDsKLSAgICBPU1N0YXR1cyBjb3B5Rm9ybWF0RGVzY3JpcHRpb24oQ01G
b3JtYXREZXNjcmlwdGlvblJlZiopIGNvbnN0OwotICAgIE9TU3RhdHVzIGNvcHlTYW1wbGVMb2Nh
dGlvbihNVFBsdWdpblNhbXBsZUN1cnNvclN0b3JhZ2VSYW5nZSosIE1UUGx1Z2luQnl0ZVNvdXJj
ZVJlZiopIGNvbnN0OwotICAgIE9TU3RhdHVzIGdldFBsYXlhYmxlSG9yaXpvbihDTVRpbWUqKSBj
b25zdDsKLQotICAgIFJlZjxUcmFja1JlYWRlcj4gbV90cmFja1JlYWRlcjsKLSAgICBtdXRhYmxl
IExvY2F0b3IgbV9sb2NhdG9yOwotICAgIG11dGFibGUgTG9jayBtX2xvY2F0b3JMb2NrOwotfTsK
LQotY29uc3RleHByIFNhbXBsZUN1cnNvcjo6V3JhcHBlckNsYXNzIFNhbXBsZUN1cnNvcjo6d3Jh
cHBlckNsYXNzKCkKLXsKLSAgICByZXR1cm4gewotI2lmIEhBVkUoTVRfUExVR0lOX1NBTVBMRV9D
VVJTT1JfUExBWUFCTEVfSE9SSVpPTikKLSAgICAgICAgLnZlcnNpb24gPSBrTVRQbHVnaW5TYW1w
bGVDdXJzb3JfQ2xhc3NWZXJzaW9uXzQsCi0jZWxzZQotICAgICAgICAudmVyc2lvbiA9IGtNVFBs
dWdpblNhbXBsZUN1cnNvcl9DbGFzc1ZlcnNpb25fMywKLSNlbmRpZgotICAgICAgICAuY29weSA9
IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgTVRQbHVnaW5TYW1wbGVD
dXJzb3JSZWYqIHNhbXBsZUN1cnNvckNvcHkpIHsKLSAgICAgICAgICAgIHJldHVybiB1bndyYXAo
c2FtcGxlQ3Vyc29yKS0+Y29weShzYW1wbGVDdXJzb3JDb3B5KTsKLSAgICAgICAgfSwKLSAgICAg
ICAgLnN0ZXBJbkRlY29kZU9yZGVyQW5kUmVwb3J0U3RlcHNUYWtlbiA9IFtdKE1UUGx1Z2luU2Ft
cGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgaW50NjRfdCBzdGVwQ291bnQsIGludDY0X3QqIHN0
ZXBzVGFrZW4pIHsKLSAgICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+c3Rl
cEluRGVjb2RlT3JkZXJBbmRSZXBvcnRTdGVwc1Rha2VuKHN0ZXBDb3VudCwgc3RlcHNUYWtlbik7
Ci0gICAgICAgIH0sCi0gICAgICAgIC5zdGVwSW5QcmVzZW50YXRpb25PcmRlckFuZFJlcG9ydFN0
ZXBzVGFrZW4gPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIGludDY0
X3Qgc3RlcENvdW50LCBpbnQ2NF90KiBzdGVwc1Rha2VuKSB7Ci0gICAgICAgICAgICByZXR1cm4g
dW53cmFwKHNhbXBsZUN1cnNvciktPnN0ZXBJblByZXNlbnRhdGlvbk9yZGVyQW5kUmVwb3J0U3Rl
cHNUYWtlbihzdGVwQ291bnQsIHN0ZXBzVGFrZW4pOwotICAgICAgICB9LAotICAgICAgICAuc3Rl
cEJ5RGVjb2RlVGltZSA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwg
Q01UaW1lIGRlbHRhRGVjb2RlVGltZSwgQm9vbGVhbiogcG9zaXRpb25XYXNQaW5uZWQpIHsKLSAg
ICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+c3RlcEJ5RGVjb2RlVGltZShk
ZWx0YURlY29kZVRpbWUsIHBvc2l0aW9uV2FzUGlubmVkKTsKLSAgICAgICAgfSwKLSAgICAgICAg
LnN0ZXBCeVByZXNlbnRhdGlvblRpbWUgPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1w
bGVDdXJzb3IsIENNVGltZSBkZWx0YVByZXNlbnRhdGlvblRpbWUsIEJvb2xlYW4qIHBvc2l0aW9u
V2FzUGlubmVkKSB7Ci0gICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPnN0
ZXBCeVByZXNlbnRhdGlvblRpbWUoZGVsdGFQcmVzZW50YXRpb25UaW1lLCBwb3NpdGlvbldhc1Bp
bm5lZCk7Ci0gICAgICAgIH0sCi0gICAgICAgIC5jb21wYXJlSW5EZWNvZGVPcmRlciA9IFtdKE1U
UGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgTVRQbHVnaW5TYW1wbGVDdXJzb3JS
ZWYgb3RoZXJTYW1wbGVDdXJzb3IpIHsKLSAgICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxl
Q3Vyc29yKS0+Y29tcGFyZUluRGVjb2RlT3JkZXIob3RoZXJTYW1wbGVDdXJzb3IpOwotICAgICAg
ICB9LAotICAgICAgICAuZ2V0U2FtcGxlVGltaW5nID0gW10oTVRQbHVnaW5TYW1wbGVDdXJzb3JS
ZWYgc2FtcGxlQ3Vyc29yLCBDTVNhbXBsZVRpbWluZ0luZm8qIHNhbXBsZVRpbWluZ0luZm8pIHsK
LSAgICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+Z2V0U2FtcGxlVGltaW5n
KHNhbXBsZVRpbWluZ0luZm8pOwotICAgICAgICB9LAotICAgICAgICAuZ2V0U3luY0luZm8gPSBb
XShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIE1UUGx1Z2luU2FtcGxlQ3Vy
c29yU3luY0luZm8qIHN5bmNJbmZvKSAtPiBPU1N0YXR1cyB7Ci0gICAgICAgICAgICByZXR1cm4g
dW53cmFwKHNhbXBsZUN1cnNvciktPmdldFN5bmNJbmZvKHN5bmNJbmZvKTsKLSAgICAgICAgfSwK
LSAgICAgICAgLmNvcHlGb3JtYXREZXNjcmlwdGlvbiA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29y
UmVmIHNhbXBsZUN1cnNvciwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRp
b24pIHsKLSAgICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+Y29weUZvcm1h
dERlc2NyaXB0aW9uKGZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICAgICAgfSwKLSAgICAgICAgLmNv
cHlTYW1wbGVMb2NhdGlvbiA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNv
ciwgTVRQbHVnaW5TYW1wbGVDdXJzb3JTdG9yYWdlUmFuZ2UqIHN0b3JhZ2VSYW5nZSwgTVRQbHVn
aW5CeXRlU291cmNlUmVmKiBieXRlU291cmNlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdW53cmFw
KHNhbXBsZUN1cnNvciktPmNvcHlTYW1wbGVMb2NhdGlvbihzdG9yYWdlUmFuZ2UsIGJ5dGVTb3Vy
Y2UpOwotICAgICAgICB9LAotI2lmIEhBVkUoTVRfUExVR0lOX1NBTVBMRV9DVVJTT1JfUExBWUFC
TEVfSE9SSVpPTikKLSAgICAgICAgLmdldFBsYXlhYmxlSG9yaXpvbiA9IFtdKE1UUGx1Z2luU2Ft
cGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgQ01UaW1lKiBwbGF5YWJsZUhvcml6b24pIHsKLSAg
ICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+Z2V0UGxheWFibGVIb3Jpem9u
KHBsYXlhYmxlSG9yaXpvbik7Ci0gICAgICAgIH0sCi0jZW5kaWYKLSAgICB9OwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
VHJhY2tSZWFkZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL1RyYWNrUmVhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdkYTJm
NDIwYzkyZmZkM2EzMTYyYzI2YTEzNWFiOTViYWI3YjYzNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvVHJhY2tSZWFkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVHJhY2tSZWFk
ZXIuaCIKLQotI2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCi0KLSNpbmNsdWRlICJGb3Jt
YXRSZWFkZXIuaCIKLSNpbmNsdWRlICJTYW1wbGVDdXJzb3IuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0F1ZGlvVHJhY2tQcml2YXRlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYURlc2NyaXB0aW9uLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9NZWRpYVNhbXBsZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTYW1wbGVB
VkZPYmpDLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TYW1wbGVNYXAuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1ZpZGVvVHJhY2tQcml2YXRlLmg+Ci0jaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRp
YVRpbWVBVkZvdW5kYXRpb24uaD4KLQotI2luY2x1ZGUgPHBhbC9jb2NvYS9NZWRpYVRvb2xib3hT
b2Z0TGluay5oPgotCi1XVEZfREVDTEFSRV9DRl9UWVBFX1RSQUlUKE1UUGx1Z2luVHJhY2tSZWFk
ZXIpOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFBBTDsKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1jbGFzcyBNZWRpYVNhbXBsZUJ5dGVSYW5nZSBmaW5hbCA6
IHB1YmxpYyBNZWRpYVNhbXBsZUFWRk9iakMgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVk
aWFTYW1wbGVCeXRlUmFuZ2U+IGNyZWF0ZShNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdpbkJ5
dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhU2FtcGxlQnl0ZVJhbmdlKHNhbXBsZSwgYnl0ZVNv
dXJjZSwgdHJhY2tJRCkpOwotICAgIH0KLQotICAgIE1lZGlhVGltZSBwcmVzZW50YXRpb25UaW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcmVzZW50YXRpb25UaW1lOyB9Ci0gICAgTWVkaWFU
aW1lIGRlY29kZVRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RlY29kZVRpbWU7IH0KLSAg
ICBNZWRpYVRpbWUgZHVyYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2R1cmF0aW9uOyB9
Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zaXplSW5C
eXRlczsgfQotICAgIEZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9wcmVzZW50YXRpb25TaXplOyB9Ci0gICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2ZsYWdzOyB9Ci0gICAgT3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRl
UmFuZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J5dGVSYW5nZTsgfQotCi0gICAgQXRvbVN0
cmluZyB0cmFja0lEKCkgY29uc3QgZmluYWw7Ci0gICAgUGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1T
YW1wbGUoKSBmaW5hbDsKLSAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRp
bWUmKSBmaW5hbDsKLSAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29u
c3QgTWVkaWFUaW1lJikgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgTWVkaWFTYW1wbGVCeXRlUmFu
Z2UoTWVkaWFTYW1wbGUmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYsIHVpbnQ2NF90IHRyYWNrSUQp
OwotCi0gICAgTWVkaWFUaW1lIG1fcHJlc2VudGF0aW9uVGltZTsKLSAgICBNZWRpYVRpbWUgbV9k
ZWNvZGVUaW1lOwotICAgIE1lZGlhVGltZSBtX2R1cmF0aW9uOwotICAgIHNpemVfdCBtX3NpemVJ
bkJ5dGVzOwotICAgIEZsb2F0U2l6ZSBtX3ByZXNlbnRhdGlvblNpemU7Ci0gICAgU2FtcGxlRmxh
Z3MgbV9mbGFnczsKLSAgICB1aW50NjRfdCBtX3RyYWNrSUQ7Ci0gICAgT3B0aW9uYWw8Qnl0ZVJh
bmdlPiBtX2J5dGVSYW5nZTsKLSAgICBSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiBt
X2J5dGVTb3VyY2U7Ci0gICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fZm9y
bWF0RGVzY3JpcHRpb247Ci19OwotCi1NZWRpYVNhbXBsZUJ5dGVSYW5nZTo6TWVkaWFTYW1wbGVC
eXRlUmFuZ2UoTWVkaWFTYW1wbGUmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVT
b3VyY2UsIHVpbnQ2NF90IHRyYWNrSUQpCi0gICAgOiBNZWRpYVNhbXBsZUFWRk9iakMobnVsbHB0
cikKLSAgICAsIG1fcHJlc2VudGF0aW9uVGltZShzYW1wbGUucHJlc2VudGF0aW9uVGltZSgpKQot
ICAgICwgbV9kZWNvZGVUaW1lKHNhbXBsZS5kZWNvZGVUaW1lKCkpCi0gICAgLCBtX2R1cmF0aW9u
KHNhbXBsZS5kdXJhdGlvbigpKQotICAgICwgbV9zaXplSW5CeXRlcyhzYW1wbGUuc2l6ZUluQnl0
ZXMoKSkKLSAgICAsIG1fcHJlc2VudGF0aW9uU2l6ZShzYW1wbGUucHJlc2VudGF0aW9uU2l6ZSgp
KQotICAgICwgbV9mbGFncyhzYW1wbGUuZmxhZ3MoKSkKLSAgICAsIG1fdHJhY2tJRCh0cmFja0lE
KQotICAgICwgbV9ieXRlUmFuZ2Uoc2FtcGxlLmJ5dGVSYW5nZSgpKQotICAgICwgbV9ieXRlU291
cmNlKGJ5dGVTb3VyY2UpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgYXV0
byBwbGF0Zm9ybVNhbXBsZSA9IHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpOwotICAgIHN3aXRjaCAo
cGxhdGZvcm1TYW1wbGUudHlwZSkgewotICAgIGNhc2UgUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxl
QnVmZmVyVHlwZToKLSAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbiA9IENNU2FtcGxlQnVmZmVy
R2V0Rm9ybWF0RGVzY3JpcHRpb24ocGxhdGZvcm1TYW1wbGUuc2FtcGxlLmNtU2FtcGxlQnVmZmVy
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybVNhbXBsZTo6Qnl0ZVJhbmdlU2Ft
cGxlVHlwZToKLSAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbiA9IHBsYXRmb3JtU2FtcGxlLnNh
bXBsZS5ieXRlUmFuZ2VTYW1wbGUuc2Vjb25kOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi1BdG9tU3RyaW5nIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjp0cmFja0lEKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gQXRvbVN0cmluZzo6bnVtYmVyKG1fdHJhY2tJRCk7Ci19Ci0KLVBsYXRmb3Jt
U2FtcGxlIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpwbGF0Zm9ybVNhbXBsZSgpCi17Ci0gICAgcmV0
dXJuIHsKLSAgICAgICAgUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGUsCi0gICAg
ICAgIHsgLmJ5dGVSYW5nZVNhbXBsZSA9IHN0ZDo6bWFrZV9wYWlyKG1fYnl0ZVNvdXJjZS5nZXQo
KSwgbV9mb3JtYXREZXNjcmlwdGlvbi5nZXQoKSkgfSwKLSAgICB9OwotfQotCi12b2lkIE1lZGlh
U2FtcGxlQnl0ZVJhbmdlOjpvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJiBvZmZz
ZXQpCi17Ci0gICAgc2V0VGltZXN0YW1wcyhwcmVzZW50YXRpb25UaW1lKCkgKyBvZmZzZXQsIGRl
Y29kZVRpbWUoKSArIG9mZnNldCk7Ci19Ci0KLXZvaWQgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnNl
dFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBjb25zdCBNZWRp
YVRpbWUmIGRlY29kZVRpbWUpCi17Ci0gICAgbV9wcmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0
aW9uVGltZTsKLSAgICBtX2RlY29kZVRpbWUgPSBkZWNvZGVUaW1lOwotfQotCi1DTUJhc2VDbGFz
c0lEIFRyYWNrUmVhZGVyOjp3cmFwcGVyQ2xhc3NJRCgpCi17Ci0gICAgcmV0dXJuIE1UUGx1Z2lu
VHJhY2tSZWFkZXJHZXRDbGFzc0lEKCk7Ci19Ci0KLUNvcmVNZWRpYVdyYXBwZWQ8VHJhY2tSZWFk
ZXI+KiBUcmFja1JlYWRlcjo6dW53cmFwKENNQmFzZU9iamVjdFJlZiBvYmplY3QpCi17Ci0gICAg
cmV0dXJuIHVud3JhcChjaGVja2VkX2NmX2Nhc3Q8V3JhcHBlclJlZj4ob2JqZWN0KSk7Ci19Ci0K
LVJlZlB0cjxUcmFja1JlYWRlcj4gVHJhY2tSZWFkZXI6OmNyZWF0ZShBbGxvY2F0b3ImJiBhbGxv
Y2F0b3IsIGNvbnN0IEZvcm1hdFJlYWRlciYgZm9ybWF0UmVhZGVyLCBDTU1lZGlhVHlwZSBtZWRp
YVR5cGUsIHVpbnQ2NF90IHRyYWNrSUQsIE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyAoYWxsb2NhdG9yKSBUcmFja1JlYWRlcihXVEZNb3ZlKGFsbG9j
YXRvciksIGZvcm1hdFJlYWRlciwgbWVkaWFUeXBlLCB0cmFja0lELCBlbmFibGVkKSk7Ci19Ci0K
LVdvcmtRdWV1ZSYgVHJhY2tSZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpCi17Ci0gICAgc3RhdGljIGF1
dG8mIHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoIldlYktpdDo6VHJhY2tSZWFkZXIgU3RvcmFn
ZSBRdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJu
IHF1ZXVlOwotfQotCi1UcmFja1JlYWRlcjo6VHJhY2tSZWFkZXIoQWxsb2NhdG9yJiYgYWxsb2Nh
dG9yLCBjb25zdCBGb3JtYXRSZWFkZXImIGZvcm1hdFJlYWRlciwgQ01NZWRpYVR5cGUgbWVkaWFU
eXBlLCB1aW50NjRfdCB0cmFja0lELCBPcHRpb25hbDxib29sPiBlbmFibGVkKQotICAgIDogQ29y
ZU1lZGlhV3JhcHBlZChXVEZNb3ZlKGFsbG9jYXRvcikpCi0gICAgLCBtX3RyYWNrSUQodHJhY2tJ
RCkKLSAgICAsIG1fbWVkaWFUeXBlKG1lZGlhVHlwZSkKLSAgICAsIG1fZHVyYXRpb24oZm9ybWF0
UmVhZGVyLmR1cmF0aW9uKCkpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICBpZiAoZW5hYmxlZCkKLSAgICAgICAgbV9pc0VuYWJsZWQgPSBlbmFibGVkLnZhbHVlKCkgPyBF
bmFibGVkOjpUcnVlIDogRW5hYmxlZDo6RmFsc2U7Ci19Ci0KLXZvaWQgVHJhY2tSZWFkZXI6OmFk
ZFNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYg
Ynl0ZVNvdXJjZSkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2spOwotICAgIGlmICghbV9zYW1wbGVT
dG9yYWdlKQotICAgICAgICBtX3NhbXBsZVN0b3JhZ2UgPSBtYWtlVW5pcXVlPFNhbXBsZVN0b3Jh
Z2U+KCk7Ci0KLSAgICBBU1NFUlQoIXNhbXBsZS0+aXNEaXZpc2FibGUoKSAmJiBzYW1wbGUtPmJ5
dGVSYW5nZSgpKTsKLSAgICBhdXRvIHNhbXBsZVRvQWRkID0gTWVkaWFTYW1wbGVCeXRlUmFuZ2U6
OmNyZWF0ZShzYW1wbGUuZ2V0KCksIGJ5dGVTb3VyY2UsIG1fdHJhY2tJRCk7Ci0KLSAgICAvLyBG
SVhNRTogRXZlbiB0aG91Z2ggV2ViTSBtdXhlciBndWlkZWxpbmVzIHNheSB0aGlzIG11c3Qgbm90
IGhhcHBlbiwgc29tZSB2aWRlbyB0cmFja3MgaGF2ZSB0d28KLSAgICAvLyBjb25zZWN1dGl2ZSBm
cmFtZXMgd2l0aCB0aGUgc2FtZSBwcmVzZW50YXRpb24gdGltZS4gU2FtcGxlTWFwIHdpbGwgbm90
IHN0b3JlIHRoZSBzZWNvbmQgZnJhbWUKLSAgICAvLyBpbiB0aGVzZSBjYXNlcywgY29ycnVwdGlu
ZyBhbGwgc3Vic2VxdWVudCBub24ta2V5IGZyYW1lcy4gRmluZCBhIHdheSB0byBzdG9yZSBmcmFt
ZXMgd2l0aAotICAgIC8vIGR1cGxpY2F0ZSBwcmVzZW50YXRpb24gdGltZXMuCi0KLSAgICBtX3Nh
bXBsZVN0b3JhZ2UtPnNhbXBsZU1hcC5hZGRTYW1wbGUoc2FtcGxlVG9BZGQuZ2V0KCkpOwotICAg
IG1fc2FtcGxlU3RvcmFnZUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKLX0KLQotdm9pZCBUcmFja1Jl
YWRlcjo6d2FpdEZvclNhbXBsZShGdW5jdGlvbjxib29sKFNhbXBsZU1hcCYsIGJvb2wpPiYmIHBy
ZWRpY2F0ZSkgY29uc3QKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlU3Rv
cmFnZUxvY2spOwotICAgIGlmICghbV9zYW1wbGVTdG9yYWdlKQotICAgICAgICBtX3NhbXBsZVN0
b3JhZ2UgPSBtYWtlVW5pcXVlPFNhbXBsZVN0b3JhZ2U+KCk7Ci0gICAgbV9zYW1wbGVTdG9yYWdl
Q29uZGl0aW9uLndhaXQobV9zYW1wbGVTdG9yYWdlTG9jaywgW3ByZWRpY2F0ZSA9IFdURk1vdmUo
cHJlZGljYXRlKSwgdGhpc10gewotICAgICAgICByZXR1cm4gcHJlZGljYXRlKG1fc2FtcGxlU3Rv
cmFnZS0+c2FtcGxlTWFwLCBtX3NhbXBsZVN0b3JhZ2UtPmhhc0FsbFNhbXBsZXMpOwotICAgIH0p
OwotfQotCi12b2lkIFRyYWNrUmVhZGVyOjpmaW5pc2hQYXJzaW5nKCkKLXsKLSAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlU3Rv
cmFnZUxvY2spOwotICAgIGlmICghbV9zYW1wbGVTdG9yYWdlKQotICAgICAgICBtX3NhbXBsZVN0
b3JhZ2UgPSBtYWtlVW5pcXVlPFNhbXBsZVN0b3JhZ2U+KCk7Ci0gICAgbV9zYW1wbGVTdG9yYWdl
LT5oYXNBbGxTYW1wbGVzID0gdHJ1ZTsKLSAgICBpZiAobV9pc0VuYWJsZWQgPT0gRW5hYmxlZDo6
VW5rbm93bikKLSAgICAgICAgbV9pc0VuYWJsZWQgPSBtX3NhbXBsZVN0b3JhZ2UtPnNhbXBsZU1h
cC5lbXB0eSgpID8gRW5hYmxlZDo6RmFsc2UgOiBFbmFibGVkOjpUcnVlOwotICAgIG1fc2FtcGxl
U3RvcmFnZUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKLX0KLQotT1NTdGF0dXMgVHJhY2tSZWFkZXI6
OmNvcHlQcm9wZXJ0eShDRlN0cmluZ1JlZiBrZXksIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwg
dm9pZCogY29waWVkVmFsdWUpCi17Ci0gICAgLy8gRG9uJ3QgYmxvY2sgd2FpdGluZyBmb3IgbWVk
aWEgaWYgdGhlIHdlIGtub3cgdGhlIGVuYWJsZWQgc3RhdGUuCi0gICAgaWYgKENGRXF1YWwoa2V5
LCBQQUw6OmdldF9NZWRpYVRvb2xib3hfa01UUGx1Z2luVHJhY2tSZWFkZXJQcm9wZXJ0eV9FbmFi
bGVkKCkpICYmIG1faXNFbmFibGVkICE9IEVuYWJsZWQ6OlVua25vd24pIHsKLSAgICAgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8Q0ZCb29sZWFuUmVmKj4oY29waWVkVmFsdWUpID0gcmV0YWluUHRyKG1f
aXNFbmFibGVkID09IEVuYWJsZWQ6OlRydWUgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5G
YWxzZSkubGVha1JlZigpOwotICAgICAgICByZXR1cm4gbm9FcnI7Ci0gICAgfQotCi0gICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZVN0b3JhZ2VMb2NrKTsKLSAgICBtX3NhbXBsZVN0
b3JhZ2VDb25kaXRpb24ud2FpdChtX3NhbXBsZVN0b3JhZ2VMb2NrLCBbJl0gewotICAgICAgICBy
ZXR1cm4gISFtX3NhbXBsZVN0b3JhZ2U7Ci0gICAgfSk7Ci0KLSAgICBhdXRvJiBzYW1wbGVNYXAg
PSBtX3NhbXBsZVN0b3JhZ2UtPnNhbXBsZU1hcDsKLQotICAgIGlmIChDRkVxdWFsKGtleSwgUEFM
OjpnZXRfTWVkaWFUb29sYm94X2tNVFBsdWdpblRyYWNrUmVhZGVyUHJvcGVydHlfRW5hYmxlZCgp
KSkgewotICAgICAgICBpZiAobV9pc0VuYWJsZWQgPT0gRW5hYmxlZDo6VW5rbm93bikKLSAgICAg
ICAgICAgIG1faXNFbmFibGVkID0gc2FtcGxlTWFwLmVtcHR5KCkgPyBFbmFibGVkOjpGYWxzZSA6
IEVuYWJsZWQ6OlRydWU7Ci0KLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZCb29sZWFuUmVm
Kj4oY29waWVkVmFsdWUpID0gcmV0YWluUHRyKG1faXNFbmFibGVkID09IEVuYWJsZWQ6OlRydWUg
PyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZSkubGVha1JlZigpOwotICAgICAgICBy
ZXR1cm4gbm9FcnI7Ci0gICAgfQotCi0gICAgaWYgKHNhbXBsZU1hcC5lbXB0eSgpKQotICAgICAg
ICByZXR1cm4ga0NNQmFzZU9iamVjdEVycm9yX1ZhbHVlTm90QXZhaWxhYmxlOwotCi0gICAgYXV0
byYgbGFzdFNhbXBsZSA9ICpzYW1wbGVNYXAuZGVjb2RlT3JkZXIoKS5yYmVnaW4oKS0+c2Vjb25k
OwotCi0gICAgaWYgKENGRXF1YWwoa2V5LCBQQUw6OmdldF9NZWRpYVRvb2xib3hfa01UUGx1Z2lu
VHJhY2tSZWFkZXJQcm9wZXJ0eV9Gb3JtYXREZXNjcmlwdGlvbkFycmF5KCkpKSB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obGFzdFNhbXBsZS5wbGF0
Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGUp
OwotICAgICAgICBjb25zdCB2b2lkKiBkZXNjcmlwdGlvbnNbMV0gPSB7IGxhc3RTYW1wbGUucGxh
dGZvcm1TYW1wbGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZCB9OwotICAgICAgICAq
cmVpbnRlcnByZXRfY2FzdDxDRkFycmF5UmVmKj4oY29waWVkVmFsdWUpID0gYWRvcHRDRihDRkFy
cmF5Q3JlYXRlKGFsbG9jYXRvciwgZGVzY3JpcHRpb25zLCAxLCAma0NGVHlwZUFycmF5Q2FsbEJh
Y2tzKSkubGVha1JlZigpOwotICAgICAgICByZXR1cm4gbm9FcnI7Ci0gICAgfQotCi0gICAgaWYg
KENGRXF1YWwoa2V5LCBQQUw6OmdldF9NZWRpYVRvb2xib3hfa01UUGx1Z2luVHJhY2tSZWFkZXJQ
cm9wZXJ0eV9Ob21pbmFsRnJhbWVSYXRlKCkpKSB7Ci0gICAgICAgIGZsb2F0IGZyYW1lUmF0ZSA9
IDEgLyBsYXN0U2FtcGxlLmR1cmF0aW9uKCkudG9GbG9hdCgpOwotICAgICAgICAqcmVpbnRlcnBy
ZXRfY2FzdDxDRk51bWJlclJlZio+KGNvcGllZFZhbHVlKSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVh
dGUoYWxsb2NhdG9yLCBrQ0ZOdW1iZXJGbG9hdDMyVHlwZSwgJmZyYW1lUmF0ZSkpLmxlYWtSZWYo
KTsKLSAgICAgICAgcmV0dXJuIG5vRXJyOwotICAgIH0KLQotICAgIHJldHVybiBrQ01CYXNlT2Jq
ZWN0RXJyb3JfVmFsdWVOb3RBdmFpbGFibGU7Ci19Ci0KLXZvaWQgVHJhY2tSZWFkZXI6OmZpbmFs
aXplKCkKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2sp
OwotICAgIHN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFtzYW1wbGVTdG9yYWdlID0gc3RkOjpleGNo
YW5nZShtX3NhbXBsZVN0b3JhZ2UsIG51bGxwdHIpXSgpIG11dGFibGUgewotICAgICAgICBzYW1w
bGVTdG9yYWdlID0gbnVsbHB0cjsKLSAgICB9KTsKLSAgICBDb3JlTWVkaWFXcmFwcGVkPFRyYWNr
UmVhZGVyPjo6ZmluYWxpemUoKTsKLX0KLQotT1NTdGF0dXMgVHJhY2tSZWFkZXI6OmdldFRyYWNr
SW5mbyhNVFBlcnNpc3RlbnRUcmFja0lEKiB0cmFja0lELCBDTU1lZGlhVHlwZSogbWVkaWFUeXBl
KQotewotICAgICp0cmFja0lEID0gbV90cmFja0lEOwotICAgICptZWRpYVR5cGUgPSBtX21lZGlh
VHlwZTsKLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLU9TU3RhdHVzIFRyYWNrUmVhZGVyOjpjcmVh
dGVDdXJzb3JBdFByZXNlbnRhdGlvblRpbWVTdGFtcChDTVRpbWUgdGltZSwgTVRQbHVnaW5TYW1w
bGVDdXJzb3JSZWYqIHNhbXBsZUN1cnNvcikKLXsKLSAgICAqc2FtcGxlQ3Vyc29yID0gU2FtcGxl
Q3Vyc29yOjpjcmVhdGVBdFByZXNlbnRhdGlvblRpbWUoYWxsb2NhdG9yKCksICp0aGlzLCBQQUw6
OnRvTWVkaWFUaW1lKHRpbWUpKS5sZWFrUmVmKCktPndyYXBwZXIoKTsKLSAgICByZXR1cm4gbm9F
cnI7Ci19Ci0KLU9TU3RhdHVzIFRyYWNrUmVhZGVyOjpjcmVhdGVDdXJzb3JBdEZpcnN0U2FtcGxl
SW5EZWNvZGVPcmRlcihNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogc2FtcGxlQ3Vyc29yKQotewot
ICAgICpzYW1wbGVDdXJzb3IgPSBTYW1wbGVDdXJzb3I6OmNyZWF0ZUF0RGVjb2RlZFNhbXBsZShh
bGxvY2F0b3IoKSwgKnRoaXMsIFNhbXBsZUN1cnNvcjo6RGVjb2RlZFNhbXBsZTo6Rmlyc3QpLmxl
YWtSZWYoKS0+d3JhcHBlcigpOwotICAgIHJldHVybiBub0VycjsKLX0KLQotT1NTdGF0dXMgVHJh
Y2tSZWFkZXI6OmNyZWF0ZUN1cnNvckF0TGFzdFNhbXBsZUluRGVjb2RlT3JkZXIoTVRQbHVnaW5T
YW1wbGVDdXJzb3JSZWYqIHNhbXBsZUN1cnNvcikKLXsKLSAgICAqc2FtcGxlQ3Vyc29yID0gU2Ft
cGxlQ3Vyc29yOjpjcmVhdGVBdERlY29kZWRTYW1wbGUoYWxsb2NhdG9yKCksICp0aGlzLCBTYW1w
bGVDdXJzb3I6OkRlY29kZWRTYW1wbGU6Okxhc3QpLmxlYWtSZWYoKS0+d3JhcHBlcigpOwotICAg
IHJldHVybiBub0VycjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1RyYWNrUmVhZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvVHJhY2tSZWFkZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjAxZmZkZDcwYzk3OTNkOWI1NGI0MjNlYjQ0OWI0ZDk3ZmNhOTBhNS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvVHJhY2tSZWFkZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQotCi0jaW5jbHVkZSAiQ29yZU1lZGlhV3JhcHBlZC5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvU2FtcGxlTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0NvbmRpdGlv
bi5oPgotCi1ERUNMQVJFX0NPUkVfTUVESUFfVFJBSVRTKFRyYWNrUmVhZGVyKTsKLQotbmFtZXNw
YWNlIFdURiB7Ci1jbGFzcyBXb3JrUXVldWU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNs
YXNzIEF1ZGlvVHJhY2tQcml2YXRlOwotY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTsKLWNs
YXNzIE1lZGlhU2FtcGxlOwotY2xhc3MgVHJhY2tQcml2YXRlQmFzZTsKLWNsYXNzIFZpZGVvVHJh
Y2tQcml2YXRlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgRm9ybWF0UmVhZGVy
OwotCi1jbGFzcyBUcmFja1JlYWRlciBmaW5hbCA6IHB1YmxpYyBDb3JlTWVkaWFXcmFwcGVkPFRy
YWNrUmVhZGVyPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBXcmFwcGVyQ2xhc3Mg
d3JhcHBlckNsYXNzKCk7Ci0gICAgc3RhdGljIENNQmFzZUNsYXNzSUQgd3JhcHBlckNsYXNzSUQo
KTsKLSAgICBzdGF0aWMgQ29yZU1lZGlhV3JhcHBlZDxUcmFja1JlYWRlcj4qIHVud3JhcChDTUJh
c2VPYmplY3RSZWYpOwotICAgIHN0YXRpYyBXVEY6OldvcmtRdWV1ZSYgc3RvcmFnZVF1ZXVlKCk7
Ci0KLSAgICBzdGF0aWMgUmVmUHRyPFRyYWNrUmVhZGVyPiBjcmVhdGUoQWxsb2NhdG9yJiYsIGNv
bnN0IEZvcm1hdFJlYWRlciYsIENNTWVkaWFUeXBlLCB1aW50NjRfdCwgT3B0aW9uYWw8Ym9vbD4p
OwotCi0gICAgdWludDY0X3QgdHJhY2tJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tJRDsgfQot
ICAgIHZvaWQgYWRkU2FtcGxlKFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4mJiwgTVRQbHVnaW5C
eXRlU291cmNlUmVmKTsKLSAgICB2b2lkIHdhaXRGb3JTYW1wbGUoRnVuY3Rpb248Ym9vbChXZWJD
b3JlOjpTYW1wbGVNYXAmLCBib29sKT4mJikgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEVuYWJsZWQo
Ym9vbCBlbmFibGVkKSB7IG1faXNFbmFibGVkID0gZW5hYmxlZCA/IEVuYWJsZWQ6OlRydWUgOiBF
bmFibGVkOjpGYWxzZTsgfQotICAgIENNTWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVkaWFUeXBlOyB9Ci0KLSAgICB2b2lkIGZpbmlzaFBhcnNpbmcoKTsKLQotcHJpdmF0
ZToKLSAgICB1c2luZyBDb3JlTWVkaWFXcmFwcGVkPFRyYWNrUmVhZGVyPjo6dW53cmFwOwotCi0g
ICAgVHJhY2tSZWFkZXIoQWxsb2NhdG9yJiYsIGNvbnN0IEZvcm1hdFJlYWRlciYsIENNTWVkaWFU
eXBlLCB1aW50NjRfdCwgT3B0aW9uYWw8Ym9vbD4pOwotCi0gICAgLy8gQ01CYXNlQ2xhc3MKLSAg
ICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJXZWJLaXQ6
OlRyYWNrUmVhZGVyIl9zOyB9Ci0gICAgT1NTdGF0dXMgY29weVByb3BlcnR5KENGU3RyaW5nUmVm
LCBDRkFsbG9jYXRvclJlZiwgdm9pZCogY29waWVkVmFsdWUpIGZpbmFsOwotICAgIHZvaWQgZmlu
YWxpemUoKSBmaW5hbDsKLQotICAgIC8vIFdyYXBwZXJDbGFzcwotICAgIE9TU3RhdHVzIGdldFRy
YWNrSW5mbyhNVFBlcnNpc3RlbnRUcmFja0lEKiwgQ01NZWRpYVR5cGUqKTsKLSAgICBPU1N0YXR1
cyBjcmVhdGVDdXJzb3JBdFByZXNlbnRhdGlvblRpbWVTdGFtcChDTVRpbWUsIE1UUGx1Z2luU2Ft
cGxlQ3Vyc29yUmVmKik7Ci0gICAgT1NTdGF0dXMgY3JlYXRlQ3Vyc29yQXRGaXJzdFNhbXBsZUlu
RGVjb2RlT3JkZXIoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqKTsKLSAgICBPU1N0YXR1cyBjcmVh
dGVDdXJzb3JBdExhc3RTYW1wbGVJbkRlY29kZU9yZGVyKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVm
Kik7Ci0KLSAgICBzdHJ1Y3QgU2FtcGxlU3RvcmFnZSB7Ci0gICAgICAgIFdURl9NQUtFX1NUUlVD
VF9GQVNUX0FMTE9DQVRFRDsKLSAgICAgICAgflNhbXBsZVN0b3JhZ2UoKSB7IEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOyB9Ci0gICAgICAgIFdlYkNvcmU6OlNhbXBsZU1hcCBzYW1wbGVNYXA7Ci0g
ICAgICAgIGJvb2wgaGFzQWxsU2FtcGxlcyB7IGZhbHNlIH07Ci0gICAgfTsKLQotICAgIGVudW0g
RW5hYmxlZCA6IHVpbnQ4X3QgeyBVbmtub3duLCBGYWxzZSwgVHJ1ZSB9OwotCi0gICAgY29uc3Qg
dWludDY0X3QgbV90cmFja0lEOwotICAgIGNvbnN0IENNTWVkaWFUeXBlIG1fbWVkaWFUeXBlOwot
ICAgIGNvbnN0IE1lZGlhVGltZSBtX2R1cmF0aW9uOwotICAgIHN0ZDo6YXRvbWljPEVuYWJsZWQ+
IG1faXNFbmFibGVkIHsgRW5hYmxlZDo6VW5rbm93biB9OwotICAgIG11dGFibGUgQ29uZGl0aW9u
IG1fc2FtcGxlU3RvcmFnZUNvbmRpdGlvbjsKLSAgICBtdXRhYmxlIExvY2sgbV9zYW1wbGVTdG9y
YWdlTG9jazsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTYW1wbGVTdG9yYWdlPiBtX3Nh
bXBsZVN0b3JhZ2U7Ci19OwotCi1jb25zdGV4cHIgVHJhY2tSZWFkZXI6OldyYXBwZXJDbGFzcyBU
cmFja1JlYWRlcjo6d3JhcHBlckNsYXNzKCkKLXsKLSAgICByZXR1cm4gewotICAgICAgICAudmVy
c2lvbiA9IGtNVFBsdWdpblRyYWNrUmVhZGVyX0NsYXNzVmVyc2lvbl8xLAotICAgICAgICAuZ2V0
VHJhY2tJbmZvID0gW10oTVRQbHVnaW5UcmFja1JlYWRlclJlZiB0cmFja1JlYWRlciwgTVRQZXJz
aXN0ZW50VHJhY2tJRCogdHJhY2tJRCwgQ01NZWRpYVR5cGUqIG1lZGlhVHlwZSkgewotICAgICAg
ICAgICAgcmV0dXJuIHVud3JhcCh0cmFja1JlYWRlciktPmdldFRyYWNrSW5mbyh0cmFja0lELCBt
ZWRpYVR5cGUpOwotICAgICAgICB9LAotICAgICAgICAuY3JlYXRlQ3Vyc29yQXRQcmVzZW50YXRp
b25UaW1lU3RhbXAgPSBbXShNVFBsdWdpblRyYWNrUmVhZGVyUmVmIHRyYWNrUmVhZGVyLCBDTVRp
bWUgdGltZXN0YW1wLCBNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogY3Vyc29yKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gdW53cmFwKHRyYWNrUmVhZGVyKS0+Y3JlYXRlQ3Vyc29yQXRQcmVzZW50YXRp
b25UaW1lU3RhbXAodGltZXN0YW1wLCBjdXJzb3IpOwotICAgICAgICB9LAotICAgICAgICAuY3Jl
YXRlQ3Vyc29yQXRGaXJzdFNhbXBsZUluRGVjb2RlT3JkZXIgPSBbXShNVFBsdWdpblRyYWNrUmVh
ZGVyUmVmIHRyYWNrUmVhZGVyLCBNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogY3Vyc29yKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gdW53cmFwKHRyYWNrUmVhZGVyKS0+Y3JlYXRlQ3Vyc29yQXRGaXJz
dFNhbXBsZUluRGVjb2RlT3JkZXIoY3Vyc29yKTsKLSAgICAgICAgfSwKLSAgICAgICAgLmNyZWF0
ZUN1cnNvckF0TGFzdFNhbXBsZUluRGVjb2RlT3JkZXIgPSBbXShNVFBsdWdpblRyYWNrUmVhZGVy
UmVmIHRyYWNrUmVhZGVyLCBNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogY3Vyc29yKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdW53cmFwKHRyYWNrUmVhZGVyKS0+Y3JlYXRlQ3Vyc29yQXRMYXN0U2Ft
cGxlSW5EZWNvZGVPcmRlcihjdXJzb3IpOwotICAgICAgICB9LAotICAgIH07Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dAppbmRleCBjYmEzODI2NDkwMWZhMWQ4ZTBmNTBmNWU3ZDQ4Nzkx
NTc0ZjRmNGRmLi5iODNkNzM4NjI1OTY4ZGZkN2U4OTIzZDJmZTc4NDJiYjA1NzJmZTJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0CkBAIC0xMDcsNyArMTA3LDcgQEAgU2hhcmVkL0FQSS9jL2NmL1dL
VVJMQ0YubW0KIFNoYXJlZC9BUEkvYy9jZy9XS0ltYWdlQ0cuY3BwCiAKIFNoYXJlZC9BUEkvYy9t
YWMvV0tDZXJ0aWZpY2F0ZUluZm9NYWMubW0KLVNoYXJlZC9BUEkvYy9tYWMvV0tGb3JtYXRSZWFk
ZXIuY3BwCitTaGFyZWQvQVBJL2MvbWFjL1dLTWVkaWFGb3JtYXRSZWFkZXIuY3BwCiBTaGFyZWQv
QVBJL2MvbWFjL1dLT2JqQ1R5cGVXcmFwcGVyUmVmLm1tCiBTaGFyZWQvQVBJL2MvbWFjL1dLVVJM
UmVxdWVzdE5TLm1tCiBTaGFyZWQvQVBJL2MvbWFjL1dLVVJMUmVzcG9uc2VOUy5tbQpAQCAtMjE1
LDkgKzIxNSwxMCBAQCBTaGFyZWQvbWFjL1dlYkhpdFRlc3RSZXN1bHREYXRhLm1tCiBTaGFyZWQv
bWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCiAKIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFk
ZXIvQ29yZU1lZGlhV3JhcHBlZC5jcHAKLVNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvRm9y
bWF0UmVhZGVyLmNwcAotU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9TYW1wbGVDdXJzb3Iu
Y3BwCi1TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1RyYWNrUmVhZGVyLmNwcAorU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAKK1NoYXJlZC9tYWMv
TWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCitTaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcAorU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcAogCiBTaGFyZWQvUGx1Z2lucy9tYWMvUGx1
Z2luU2FuZGJveFByb2ZpbGUubW0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzI1YWI2YTE4ZWNjMjdmMzlhY2M0YzU1ODQ5ZjE5NDk4
ZDUzODlkMi4uMDU2OTgwMjhmZWI1MWM0N2I2Y2U3ZmQyYzI4NDZjZmRkOTE3ZGU5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTQz
LDExICsxNTQzLDExIEBACiAJCUExM0IzREEyMjA3RjM5REUwMDkwQzU4RCAvKiBNb2JpbGVXaUZp
U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTNC
M0RBMTIwN0YzOURFMDA5MEM1OEQgLyogTW9iaWxlV2lGaVNQSS5oICovOyB9OwogCQlBMTNEQzY4
MjIwN0FBNkIyMDA2NkVGNzIgLyogV0tBcHBsaWNhdGlvblN0YXRlVHJhY2tpbmdWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTNEQzY4MDIwN0FB
NkIyMDA2NkVGNzIgLyogV0tBcHBsaWNhdGlvblN0YXRlVHJhY2tpbmdWaWV3LmggKi87IH07CiAJ
CUExNTc5NzY0MjU4MkIxREIwMDUyODIzNiAvKiBNZWRpYUZvcm1hdFJlYWRlci5idW5kbGUgaW4g
Q29weSBQbHVnLWlucyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTZFNjYw
MDI1ODE5MzA4MDBFRTE3NDkgLyogTWVkaWFGb3JtYXRSZWFkZXIuYnVuZGxlICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFJlbW92ZUhlYWRlcnNPbkNvcHksICk7IH07IH07Ci0JCUExNTc5
OUI3MjU4NDQzMzIwMDUyODIzNiAvKiBUcmFja1JlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE1Nzk5QUUyNTg0NDMzMTAwNTI4MjM2IC8qIFRy
YWNrUmVhZGVyLmggKi87IH07CisJCUExNTc5OUI3MjU4NDQzMzIwMDUyODIzNiAvKiBNZWRpYVRy
YWNrUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMTU3OTlBRTI1ODQ0MzMxMDA1MjgyMzYgLyogTWVkaWFUcmFja1JlYWRlci5oICovOyB9Owog
CQlBMTU3OTlCQzI1ODQ0MzMyMDA1MjgyMzYgLyogQ29yZU1lZGlhV3JhcHBlZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE1Nzk5QjMyNTg0NDMzMTAw
NTI4MjM2IC8qIENvcmVNZWRpYVdyYXBwZWQuaCAqLzsgfTsKLQkJQTE1Nzk5QkQyNTg0NDMzMjAw
NTI4MjM2IC8qIFNhbXBsZUN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTE1Nzk5QjQyNTg0NDMzMTAwNTI4MjM2IC8qIFNhbXBsZUN1cnNvci5o
ICovOyB9OwotCQlBMTU3OTlCRTI1ODQ0MzMyMDA1MjgyMzYgLyogRm9ybWF0UmVhZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTU3OTlCNTI1ODQ0
MzMxMDA1MjgyMzYgLyogRm9ybWF0UmVhZGVyLmggKi87IH07Ci0JCUExNTc5QjI4MjU4NDkwRTUw
MDUyODIzNiAvKiBXS0Zvcm1hdFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTE1NzlCMjYyNTg0OTBFNTAwNTI4MjM2IC8qIFdLRm9ybWF0UmVh
ZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QTE1Nzk5QkQyNTg0NDMzMjAwNTI4MjM2IC8qIE1lZGlhU2FtcGxlQ3Vyc29yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTU3OTlCNDI1ODQ0MzMxMDA1
MjgyMzYgLyogTWVkaWFTYW1wbGVDdXJzb3IuaCAqLzsgfTsKKwkJQTE1Nzk5QkUyNTg0NDMzMjAw
NTI4MjM2IC8qIE1lZGlhRm9ybWF0UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMTU3OTlCNTI1ODQ0MzMxMDA1MjgyMzYgLyogTWVkaWFGb3Jt
YXRSZWFkZXIuaCAqLzsgfTsKKwkJQTE1NzlCMjgyNTg0OTBFNTAwNTI4MjM2IC8qIFdLTWVkaWFG
b3JtYXRSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEExNTc5QjI2MjU4NDkwRTUwMDUyODIzNiAvKiBXS01lZGlhRm9ybWF0UmVhZGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTE1RUVERTYx
RTMwMUNFRTAwMDA2OUIwIC8qIFdLUGFzc3dvcmRWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTVFRURFNDFFMzAxQ0VFMDAwMDY5QjAgLyogV0tQ
YXNzd29yZFZpZXcuaCAqLzsgfTsKIAkJQTE2RTY2NzUyNTgxQTQ0ODAwRUUxNzQ5IC8qIFdlYktp
dC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4REMyRUY1QjA0ODZBNjk0MDA5OEIyMTYgLyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsK
IAkJQTE2RTY2ODcyNTgxQTRGNzAwRUUxNzQ5IC8qIE1lZGlhRm9ybWF0UmVhZGVyUGx1Z0luLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNkU2Njg2
MjU4MUE0RjcwMEVFMTc0OSAvKiBNZWRpYUZvcm1hdFJlYWRlclBsdWdJbi5jcHAgKi87IH07CkBA
IC0xNTY1LDYgKzE1NjUsNyBAQAogCQlBMUE0RkU1QzE4RENFOUZBMDBCNUVBOEEgLyogX1dLRG93
bmxvYWRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTFBNEZFNTkxOERDRTlGQTAwQjVFQThBIC8qIF9XS0Rvd25sb2FkSW50ZXJuYWwuaCAq
LzsgfTsKIAkJQTFBNEZFNjExOERENTRBNDAwQjVFQThBIC8qIF9XS0Rvd25sb2FkRGVsZWdhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExQTRGRTYw
MThERDU0QTQwMEI1RUE4QSAvKiBfV0tEb3dubG9hZERlbGVnYXRlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTFBREFGQjYyMzY4RTZBODAwOUNC
Nzc2IC8qIFNoYXJlZE1lbW9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMUFEQUZCNTIzNjhFNEI4MDA5Q0I3NzYgLyogU2hhcmVkTWVtb3J5LmNw
cCAqLzsgfTsKKwkJQTFCNERDRTEyNUE3OTIzQzAwN0QxNzhDIC8qIE1lZGlhU2FtcGxlQnl0ZVJh
bmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUI0
RENERjI1QTc5MjExMDA3RDE3OEMgLyogTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCAqLzsgfTsKIAkJ
QTFDNTEyQzkxOTA2NTZFNTAwNDQ4OTE0IC8qIFdlYlByZXZpZXdMb2FkZXJDbGllbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExQzUxMkM3MTkwNjU2
RTUwMDQ0ODkxNCAvKiBXZWJQcmV2aWV3TG9hZGVyQ2xpZW50LmggKi87IH07CiAJCUExREY2MzEz
MThFMEI3QzgwMDNBM0UyQSAvKiBMZWdhY3lEb3dubG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTFERjYzMTExOEUwQjdDODAwM0EzRTJB
IC8qIExlZ2FjeURvd25sb2FkQ2xpZW50LmggKi87IH07CiAJCUExRTY4ODcwMUY2RTJCQUIwMDcw
MDZBNiAvKiBRdWFyYW50aW5lU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMUU2ODg2RjFGNkUyQkFCMDA3MDA2QTYgLyogUXVhcmFudGluZVNQSS5o
ICovOyB9OwpAQCAtNDg5OSwxNSArNDkwMCwxNSBAQAogCQlBMTNCM0RBMTIwN0YzOURFMDA5MEM1
OEQgLyogTW9iaWxlV2lGaVNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2JpbGVXaUZpU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExM0RDNjgwMjA3QUE2QjIwMDY2RUY3MiAvKiBX
S0FwcGxpY2F0aW9uU3RhdGVUcmFja2luZ1ZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tBcHBsaWNh
dGlvblN0YXRlVHJhY2tpbmdWaWV3Lmg7IHBhdGggPSBpb3MvV0tBcHBsaWNhdGlvblN0YXRlVHJh
Y2tpbmdWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExM0RDNjgxMjA3QUE2
QjIwMDY2RUY3MiAvKiBXS0FwcGxpY2F0aW9uU3RhdGVUcmFja2luZ1ZpZXcubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBXS0FwcGxpY2F0aW9uU3RhdGVUcmFja2luZ1ZpZXcubW07IHBhdGggPSBp
b3MvV0tBcHBsaWNhdGlvblN0YXRlVHJhY2tpbmdWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBMTU3OTlBRTI1ODQ0MzMxMDA1MjgyMzYgLyogVHJhY2tSZWFkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhY2tSZWFkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTE1Nzk5QUYyNTg0NDMzMTAwNTI4MjM2IC8qIFNhbXBsZUN1cnNv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGVDdXJzb3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMTU3OTlCMDI1ODQ0MzMxMDA1Mjgy
MzYgLyogRm9ybWF0UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvcm1hdFJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUExNTc5
OUIxMjU4NDQzMzEwMDUyODIzNiAvKiBUcmFja1JlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja1JlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUExNTc5OUFFMjU4NDQzMzEwMDUyODIzNiAvKiBNZWRpYVRyYWNrUmVhZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhVHJhY2tSZWFkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE1Nzk5QUYyNTg0NDMzMTAwNTI4MjM2IC8qIE1l
ZGlhU2FtcGxlQ3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1lZGlhU2FtcGxlQ3Vyc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE1
Nzk5QjAyNTg0NDMzMTAwNTI4MjM2IC8qIE1lZGlhRm9ybWF0UmVhZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRm9ybWF0UmVhZGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE1Nzk5QjEyNTg0NDMzMTAwNTI4MjM2IC8qIE1lZGlh
VHJhY2tSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVk
aWFUcmFja1JlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNTc5OUIz
MjU4NDQzMzEwMDUyODIzNiAvKiBDb3JlTWVkaWFXcmFwcGVkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvcmVNZWRpYVdyYXBwZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTE1Nzk5QjQyNTg0NDMzMTAwNTI4MjM2IC8qIFNhbXBsZUN1cnNvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGVDdXJzb3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTE1Nzk5QjUyNTg0NDMzMTAwNTI4MjM2IC8qIEZvcm1hdFJlYWRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXRSZWFkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTE1NzlCMjUyNTg0OTBFNTAwNTI4MjM2IC8qIFdL
Rm9ybWF0UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdL
Rm9ybWF0UmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTE1NzlCMjYy
NTg0OTBFNTAwNTI4MjM2IC8qIFdLRm9ybWF0UmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLRm9ybWF0UmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUExNTc5OUI0MjU4NDQzMzEwMDUyODIzNiAvKiBNZWRpYVNhbXBsZUN1cnNvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVNhbXBsZUN1cnNvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMTU3OTlCNTI1ODQ0MzMxMDA1MjgyMzYgLyogTWVkaWFG
b3JtYXRSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFGb3Jt
YXRSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE1NzlCMjUyNTg0OTBF
NTAwNTI4MjM2IC8qIFdLTWVkaWFGb3JtYXRSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0tNZWRpYUZvcm1hdFJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUExNTc5QjI2MjU4NDkwRTUwMDUyODIzNiAvKiBXS01lZGlhRm9ybWF0
UmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTWVkaWFGb3JtYXRS
ZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE1NzlCODMyNTg1MkI3QzAw
NTI4MjM2IC8qIENvcmVNZWRpYVdyYXBwZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29yZU1l
ZGlhV3JhcHBlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNUVFREUzMUUz
MDFDRUUwMDAwNjlCMCAvKiBXS1Bhc3N3b3JkVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFdLUGFzc3dvcmRWaWV3Lm1tOyBwYXRoID0gaW9zL1dLUGFzc3dv
cmRWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTVFRURFNDFFMzAxQ0VF
MDAwMDY5QjAgLyogV0tQYXNzd29yZFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV0tQYXNzd29yZFZpZXcuaDsgcGF0aCA9IGlvcy9XS1Bhc3N3b3JkVmlldy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDkzNiw2ICs0OTM3LDggQEAKIAkJQTFBNEZFNTkx
OERDRTlGQTAwQjVFQThBIC8qIF9XS0Rvd25sb2FkSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gX1dLRG93bmxvYWRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMUE0RkU2MDE4REQ1NEE0MDBCNUVBOEEgLyogX1dLRG93bmxvYWREZWxl
Z2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tEb3dubG9hZERlbGVn
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExQURBRkI1MjM2OEU0QjgwMDlD
Qjc3NiAvKiBTaGFyZWRNZW1vcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVkTWVtb3J5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTFCNERDREYyNUE3OTIxMTAwN0Qx
NzhDIC8qIE1lZGlhU2FtcGxlQnl0ZVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2FtcGxl
Qnl0ZVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExQjREQ0UwMjVBNzky
MTEwMDdEMTc4QyAvKiBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUExQjg5QjkyMjIxRTAyMzMwMEVCNENFQSAvKiBTREtWYXJpYW50LnhjY29uZmlnICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFNES1ZhcmlhbnQueGNjb25maWc7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUExQjlDQTM4MjI0NkU1NEEwMDNENkRDQSAvKiBXZWJQYXltZW50
Q29vcmRpbmF0b3JDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBheW1lbnRDb29y
ZGluYXRvckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUM1MTJDNjE5
MDY1NkU1MDA0NDg5MTQgLyogV2ViUHJldmlld0xvYWRlckNsaWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQcmV2aWV3TG9hZGVyQ2xpZW50LmNwcDsgcGF0
aCA9IGlvcy9XZWJQcmV2aWV3TG9hZGVyQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTkzMTYsMTIgKzkzMTksMTQgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUExNTc5
QjgzMjU4NTJCN0MwMDUyODIzNiAvKiBDb3JlTWVkaWFXcmFwcGVkLmNwcCAqLywKIAkJCQlBMTU3
OTlCMzI1ODQ0MzMxMDA1MjgyMzYgLyogQ29yZU1lZGlhV3JhcHBlZC5oICovLAotCQkJCUExNTc5
OUIwMjU4NDQzMzEwMDUyODIzNiAvKiBGb3JtYXRSZWFkZXIuY3BwICovLAotCQkJCUExNTc5OUI1
MjU4NDQzMzEwMDUyODIzNiAvKiBGb3JtYXRSZWFkZXIuaCAqLywKLQkJCQlBMTU3OTlBRjI1ODQ0
MzMxMDA1MjgyMzYgLyogU2FtcGxlQ3Vyc29yLmNwcCAqLywKLQkJCQlBMTU3OTlCNDI1ODQ0MzMx
MDA1MjgyMzYgLyogU2FtcGxlQ3Vyc29yLmggKi8sCi0JCQkJQTE1Nzk5QjEyNTg0NDMzMTAwNTI4
MjM2IC8qIFRyYWNrUmVhZGVyLmNwcCAqLywKLQkJCQlBMTU3OTlBRTI1ODQ0MzMxMDA1MjgyMzYg
LyogVHJhY2tSZWFkZXIuaCAqLywKKwkJCQlBMTU3OTlCMDI1ODQ0MzMxMDA1MjgyMzYgLyogTWVk
aWFGb3JtYXRSZWFkZXIuY3BwICovLAorCQkJCUExNTc5OUI1MjU4NDQzMzEwMDUyODIzNiAvKiBN
ZWRpYUZvcm1hdFJlYWRlci5oICovLAorCQkJCUExQjREQ0UwMjVBNzkyMTEwMDdEMTc4QyAvKiBN
ZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAgKi8sCisJCQkJQTFCNERDREYyNUE3OTIxMTAwN0QxNzhD
IC8qIE1lZGlhU2FtcGxlQnl0ZVJhbmdlLmggKi8sCisJCQkJQTE1Nzk5QUYyNTg0NDMzMTAwNTI4
MjM2IC8qIE1lZGlhU2FtcGxlQ3Vyc29yLmNwcCAqLywKKwkJCQlBMTU3OTlCNDI1ODQ0MzMxMDA1
MjgyMzYgLyogTWVkaWFTYW1wbGVDdXJzb3IuaCAqLywKKwkJCQlBMTU3OTlCMTI1ODQ0MzMxMDA1
MjgyMzYgLyogTWVkaWFUcmFja1JlYWRlci5jcHAgKi8sCisJCQkJQTE1Nzk5QUUyNTg0NDMzMTAw
NTI4MjM2IC8qIE1lZGlhVHJhY2tSZWFkZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gTWVkaWFG
b3JtYXRSZWFkZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTAyOTcsOCArMTAz
MDIsOCBAQAogCQkJCTdDRDVFQkJBMTc0NkE4M0UwMDBDMUM0NSAvKiBXS0Jhc2VNYWMuaCAqLywK
IAkJCQlCQzQwNzYyMTEyNEZGMDQwMDA2OEYyMEEgLyogV0tDZXJ0aWZpY2F0ZUluZm9NYWMuaCAq
LywKIAkJCQlCQzQwNzYyMjEyNEZGMDQwMDA2OEYyMEEgLyogV0tDZXJ0aWZpY2F0ZUluZm9NYWMu
bW0gKi8sCi0JCQkJQTE1NzlCMjUyNTg0OTBFNTAwNTI4MjM2IC8qIFdLRm9ybWF0UmVhZGVyLmNw
cCAqLywKLQkJCQlBMTU3OUIyNjI1ODQ5MEU1MDA1MjgyMzYgLyogV0tGb3JtYXRSZWFkZXIuaCAq
LywKKwkJCQlBMTU3OUIyNTI1ODQ5MEU1MDA1MjgyMzYgLyogV0tNZWRpYUZvcm1hdFJlYWRlci5j
cHAgKi8sCisJCQkJQTE1NzlCMjYyNTg0OTBFNTAwNTI4MjM2IC8qIFdLTWVkaWFGb3JtYXRSZWFk
ZXIuaCAqLywKIAkJCQk3Q0Q1RUJCNzE3NDZBMTVCMDAwQzFDNDUgLyogV0tPYmpDVHlwZVdyYXBw
ZXJSZWYuaCAqLywKIAkJCQk3Q0Q1RUJCNjE3NDZBMTVCMDAwQzFDNDUgLyogV0tPYmpDVHlwZVdy
YXBwZXJSZWYubW0gKi8sCiAJCQkJQkM0MDc2MjMxMjRGRjA0MDAwNjhGMjBBIC8qIFdLVVJMUmVx
dWVzdE5TLmggKi8sCkBAIC0xMTU3NSw3ICsxMTU4MCw2IEBACiAJCQkJQzU5QzRBNTkxOEI4MTE3
NDAwN0JEQ0I2IC8qIEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRTgxRDhEMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOUJEOEFCNEEyNTgyMEU1MzAwNTM4NkY4IC8qIEZvbnRSZWZlcmVuY2UuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUExNTc5OUJFMjU4NDQzMzIwMDUyODIzNiAvKiBGb3JtYXRSZWFkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMTRGOEUyMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9E
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ2MTE4MzE3OTIxMDAwODdERDcgLyogRnJh
bWVMb2FkU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTIxRTg0MjQxMDIwOEQwMDQ4NkY5
QiAvKiBGcmFtZVRyZWVOb2RlRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTY1OSw5ICsxMTY2
MywxMyBAQAogCQkJCTFBNkQ4NkMyMURGNzUyNjUwMDc3NDVFOCAvKiBNYWNoTWVzc2FnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNDNTZGNzkxMTU5OTU3RDAwMUNDQUY5IC8qIE1hY2hQb3J0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTI0QjVGMzExRjUzMUU4MDBDMzgyNjkgLyogTWFjaFV0aWxp
dGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTE1Nzk5QkUyNTg0NDMzMjAwNTI4MjM2IC8qIE1l
ZGlhRm9ybWF0UmVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQyNTg5QTI1NUI1MzVBMDA1
OUVFREQgLyogTWVkaWFQZXJtaXNzaW9uVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
N0UxOUVGQzIzRDQwMUYxMDA5NEZGQjQgLyogTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3RTE5RUZEMjNENDAxRjEwMDk0RkZCNCAvKiBNZWRp
YVBsYXllclByaXZhdGVSZW1vdGVNZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUExQjREQ0UxMjVBNzkyM0MwMDdEMTc4QyAvKiBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTE1Nzk5QkQyNTg0NDMzMjAwNTI4MjM2IC8qIE1lZGlhU2FtcGxlQ3Vy
c29yLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTU3OTlCNzI1ODQ0MzMyMDA1MjgyMzYgLyogTWVk
aWFUcmFja1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE5MzNERUYxOTY1RUIzMTAwOEFD
M0VBIC8qIE1lbnVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCNDc5MDhEMjUzMTRE
ODMwMEVDMTFBQiAvKiBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBQzRDODI5MTZCODc2QTkwMDY5RENDRCAvKiBNZXNzYWdlRmxhZ3MuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTE4NzIsNyArMTE4ODAsNiBAQAogCQkJCTBFOTdENzREMjAwRTkwMDQwMEJG
NjY0MyAvKiBTYWZlQnJvd3NpbmdTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQTk4NTRBMjEw
QkVCNjQwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzJEMDIxNzEyQUM0MUNCMDBFNzMyQTMgLyogU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUu
aCBpbiBIZWFkZXJzICovLAotCQkJCUExNTc5OUJEMjU4NDQzMzIwMDUyODIzNiAvKiBTYW1wbGVD
dXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUI0QThEMTI5NkYwQTIwMDIzOTUyRiAvKiBT
YW5kYm94RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUU1NTJDNTE2QUUwNjVGMDA0
RUQ2NTMgLyogU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTRENTREMDQyMUYxRDcyRDAwN0UzQzM2IC8qIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVSZW1vdGVJT1MuaCBpbiBIZWFkZXJzICovLApAQCAtMTE5MzYsNyArMTE5NDMsNiBA
QAogCQkJCTFBQUYyNjM5MTQ2ODdDMzkwMDRBMUU4QSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGMDVEODcxNDY4ODM0ODAwOEIxRTgxIC8q
IFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJGODMzNjg2MUZBMTM5REYwMEM2RTA4MCAvKiBUb3VjaEJhck1lbnVEYXRhLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlBMTU3OTlCNzI1ODQ0MzMyMDA1MjgyMzYgLyogVHJhY2tSZWFkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ2QkVCNkUzMjJGQkIyMUEwMDI2OTg2NyAvKiBUcmFuc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RUIyRTNBMjFFMTk4M0Uw
MEI4OUNERiAvKiBVMmZBdXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZFNDM2
NjE4QjZDMDgxMDA5QzdBNDggLyogVUlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMjM1
Niw3ICsxMjM2Miw2IEBACiAJCQkJNTE0ODlDQzMyMzcwREJGQTAwNDRFNjhBIC8qIFdLRmluZFJl
c3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0ODlDQzcyMzcyMzc4MDAwNDRFNjhBIC8qIFdL
RmluZFJlc3VsdEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTE2QjZDRjIwMTdCN0FE
MDA4OTk2RDYgLyogV0tGb2N1c2VkRm9ybUNvbnRyb2xWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJ
CQlBMTU3OUIyODI1ODQ5MEU1MDA1MjgyMzYgLyogV0tGb3JtYXRSZWFkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU1Q0IwN0RDMjBFMTY3OEYwMDIyQzE4MyAvKiBXS0Zvcm1Db2xvckNvbnRyb2wu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU1NDhFQkQxMjEwMTVGMEUwMEJFM0MzMiAvKiBXS0Zvcm1D
b2xvclBpY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU0MjU2QjcxOEJFQzE4QzAwREU0MTc5
IC8qIFdLRm9ybVBlcmlwaGVyYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMTI0MDgsNiArMTI0MTMs
NyBAQAogCQkJCTUxQTlFMTBCMTMxNUNEMTgwMDlFNzAzMSAvKiBXS0tleVZhbHVlU3RvcmFnZU1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENzkwQTlGMUFENzE2NDkwMEFCOTBCMyAvKiBX
S0xheW91dE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDRTkxMjE0MjI5M0MyODAwMDVCRUM3
OCAvKiBXS01haW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUExNTc5QjI4MjU4NDkwRTUwMDUyODIz
NiAvKiBXS01lZGlhRm9ybWF0UmVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTkxN0RBNzI1
MkQ2NDlFMDA1MDMxM0YgLyogV0tNZWRpYVBsYXliYWNrU3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBQjQwRUU2MUJGNjc3RTMwMEJBODFCRSAvKiBXS01lbnVJdGVtSWRlbnRpZmllcnNQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0FCREM4NjIyQzQwRkRFMDAxRURFOEUgLyogV0tN
ZXNzYWdlTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417194</attachid>
            <date>2021-01-07 11:44:24 -0800</date>
            <delta_ts>2021-01-07 11:45:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220424-20210107114431.patch</filename>
            <type>text/plain</type>
            <size>139734</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdmYTk2MmY5YjgxOGIy
MzVjNjJmNjYxOThlNTRiOTYzYTYzNmY5Yi4uMmQ5Y2I2ZDJiMDE4ZmVjMjdjOGVlMjAwOGVkMDM2
Yzk4MWE4ZjY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIxLTAxLTA3ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBQcmVwZW5kICJNZWRp
YSIgdG8gRm9ybWF0UmVhZGVyLCBTYW1wbGVDdXJzb3IsIGFuZCBUcmFja1JlYWRlciBjbGFzcyBu
YW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIw
NDI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg6CisKIDIwMjEt
MDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBOdWxsIGNoZWNrIGdsb2JhbCBvYmplY3QgaW4gQmxvYjo6c3RyZWFtCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IDM0NWJkZDE0NWViZGY2ODc0MzNjZGZmYjk3ZjhhYTMzMGVjYjY2MjIuLmU1MjJlZWZhYThlYWU0
MDE1MTQyYTE4M2Y2MzEzNzI5YjA2NWM1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIw
MjEtMDEtMDcgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNd
IFByZXBlbmQgIk1lZGlhIiB0byBGb3JtYXRSZWFkZXIsIFNhbXBsZUN1cnNvciwgYW5kIFRyYWNr
UmVhZGVyIGNsYXNzIG5hbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjA0MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBbHNvIG1vdmVkIE1lZGlhU2FtcGxlQnl0ZVJhbmdlIGludG8gaXRzIG93biBm
aWxlIGZyb20gTWVkaWFUcmFja1JlYWRlci5jcHAuCisKKyAgICAgICAgKiBNZWRpYUZvcm1hdFJl
YWRlclBsdWdJbi9NZWRpYUZvcm1hdFJlYWRlclBsdWdJbi5jcHA6CisgICAgICAgICogU2hhcmVk
L0FQSS9jL21hYy9XS01lZGlhRm9ybWF0UmVhZGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS0Zvcm1hdFJlYWRlci5jcHAuCisgICAgICAgICogU2hh
cmVkL0FQSS9jL21hYy9XS01lZGlhRm9ybWF0UmVhZGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tGb3JtYXRSZWFkZXIuaC4KKyAgICAgICAgKiBTaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL0NvcmVNZWRpYVdyYXBwZWQuaDogVXBkYXRlZCBERUNM
QVJFX0NPUkVfTUVESUFfVFJBSVRTIHRvIGFjY291bnQgZm9yIHJlbmFtaW5nLgorICAgICAgICAq
IFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL0Zvcm1h
dFJlYWRlci5jcHAuCisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRp
YUZvcm1hdFJlYWRlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL0Zvcm1hdFJlYWRlci5oLgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVk
aWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmg6IEFk
ZGVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVD
dXJzb3IuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL1NhbXBsZUN1cnNvci5jcHAuCisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1NhbXBsZUN1cnNvci5oLgorICAgICAgICAq
IFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvVHJhY2tS
ZWFkZXIuY3BwLgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFU
cmFja1JlYWRlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL1RyYWNrUmVhZGVyLmguCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoK
KyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMS0wMS0w
NyAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktp
dCBJUEMgbWVzc2FnZSBuYW1lcyBzaG91bGQgaW5kaWNhdGUgaWYgdGhlIG1lc3NhZ2UgaXMgc3lu
Y2hyb25vdXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAppbmRleCBiM2UxMGRhMDNmMDk5
Mzg3MDE0ZWRmMDE2NjU1YzQwNjY0MzI2MjExLi5iMDhjYjgzZmFiNTJhZmY5OWJmYWJkNWJkYjdj
NzIwNjQ4ODdhYjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCkBAIC0yMTgsNyAr
MjE4LDcgQEAgcHVibGljOgogICAgICAgICBWZWN0b3I8QXVkaW9TdHJlYW1QYWNrZXREZXNjcmlw
dGlvbj4gbV9wYWNrZXREZXNjcmlwdGlvbnM7CiAKICAgICAgICAgLy8gRklYTUU6IDAuNSAtIDEu
MCBzZWNvbmRzIGlzIGEgYmV0dGVyIGR1cmF0aW9uIHBlciBzYW1wbGUgYnVmZmVyLCBidXQgdXNl
IDIgc2Vjb25kcyBzbyBhdCBsZWFzdCB0aGUgZmlyc3QKLSAgICAgICAgLy8gc2FtcGxlIGJ1ZmZl
ciB3aWxsIHBsYXkgdW50aWwgd2UgZml4IFNhbXBsZUN1cnNvcjo6Y3JlYXRlU2FtcGxlQnVmZmVy
IHRvIGRlYWwgd2l0aCBgZW5kQ3Vyc29yYC4KKyAgICAgICAgLy8gc2FtcGxlIGJ1ZmZlciB3aWxs
IHBsYXkgdW50aWwgd2UgZml4IE1lZGlhU2FtcGxlQ3Vyc29yOjpjcmVhdGVTYW1wbGVCdWZmZXIg
dG8gZGVhbCB3aXRoIGBlbmRDdXJzb3JgLgogICAgICAgICBmbG9hdCBtX21pbmltdW1TYW1wbGVE
dXJhdGlvbiB7IDIgfTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L01lZGlh
Rm9ybWF0UmVhZGVyUGx1Z0luL01lZGlhRm9ybWF0UmVhZGVyUGx1Z0luLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTWVkaWFGb3JtYXRSZWFkZXJQbHVnSW4vTWVkaWFGb3JtYXRSZWFkZXJQbHVnSW4uY3Bw
CmluZGV4IDY4MjRmYmExMjExOTQ0ODRhNmRkNzY2MDE5MGM5ODk3NDVhYjQ5NzAuLjQ5NmU0MmE5
NTIwYTVlZjg1MzdkYzYzMmM5N2Q0Y2YwM2U5OTdlMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTWVkaWFGb3JtYXRSZWFkZXJQbHVnSW4vTWVkaWFGb3JtYXRSZWFkZXJQbHVnSW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTWVkaWFGb3JtYXRSZWFkZXJQbHVnSW4vTWVkaWFGb3JtYXRSZWFk
ZXJQbHVnSW4uY3BwCkBAIC0yMywxNCArMjMsMTQgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8V2ViS2l0L1dLRm9ybWF0UmVhZGVyLmg+Cisj
aW5jbHVkZSA8V2ViS2l0L1dLTWVkaWFGb3JtYXRSZWFkZXIuaD4KIAogZXh0ZXJuICJDIiBXS19F
WFBPUlQgT1NTdGF0dXMgQ3JlYXRlTWVkaWFGb3JtYXRSZWFkZXJJbnN0YW5jZShNVFBsdWdpbkJ5
dGVTb3VyY2VSZWYsIENGQWxsb2NhdG9yUmVmLCBDRkRpY3Rpb25hcnlSZWYsIE1UUGx1Z2luRm9y
bWF0UmVhZGVyUmVmKik7CiAKIE9TU3RhdHVzIENyZWF0ZU1lZGlhRm9ybWF0UmVhZGVySW5zdGFu
Y2UoTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UsIENGQWxsb2NhdG9yUmVmIGFsbG9j
YXRvciwgQ0ZEaWN0aW9uYXJ5UmVmLCBNVFBsdWdpbkZvcm1hdFJlYWRlclJlZiogZm9ybWF0UmVh
ZGVyKQogewotICAgIE9TU3RhdHVzIHN0YXR1cyA9IFdLRm9ybWF0UmVhZGVyQ3JlYXRlKGFsbG9j
YXRvciwgZm9ybWF0UmVhZGVyKTsKKyAgICBPU1N0YXR1cyBzdGF0dXMgPSBXS01lZGlhRm9ybWF0
UmVhZGVyQ3JlYXRlKGFsbG9jYXRvciwgZm9ybWF0UmVhZGVyKTsKICAgICBpZiAoc3RhdHVzICE9
IG5vRXJyKQogICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgIHJldHVybiBXS0Zvcm1hdFJlYWRl
clN0YXJ0T25NYWluVGhyZWFkKCpmb3JtYXRSZWFkZXIsIGJ5dGVTb3VyY2UpOworICAgIHJldHVy
biBXS01lZGlhRm9ybWF0UmVhZGVyU3RhcnRPbk1haW5UaHJlYWQoKmZvcm1hdFJlYWRlciwgYnl0
ZVNvdXJjZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMv
V0tGb3JtYXRSZWFkZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLRm9y
bWF0UmVhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY3YTAwMDQ3YThk
MTRkOGI3ZjIyZmJlYmE0NmY5ZTQyY2M1N2QxYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tGb3Jt
YXRSZWFkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXS0Zvcm1hdFJlYWRlci5oIgotCi0jaW5j
bHVkZSAiRm9ybWF0UmVhZGVyLmgiCi0KLSNpbmNsdWRlIDxwYWwvY29jb2EvTWVkaWFUb29sYm94
U29mdExpbmsuaD4KLQotT1NTdGF0dXMgV0tGb3JtYXRSZWFkZXJDcmVhdGUoQ0ZBbGxvY2F0b3JS
ZWYgYWxsb2NhdG9yLCBNVFBsdWdpbkZvcm1hdFJlYWRlclJlZiogZm9ybWF0UmVhZGVyUmVmKQot
ewotI2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCi0gICAgYXV0byBmb3JtYXRSZWFkZXIg
PSBXZWJLaXQ6OkZvcm1hdFJlYWRlcjo6Y3JlYXRlKGFsbG9jYXRvcik7Ci0gICAgaWYgKCFmb3Jt
YXRSZWFkZXIpCi0gICAgICAgIHJldHVybiBrTVRQbHVnaW5Gb3JtYXRSZWFkZXJFcnJvcl9BbGxv
Y2F0aW9uRmFpbHVyZTsKLSAgICAqZm9ybWF0UmVhZGVyUmVmID0gZm9ybWF0UmVhZGVyLmxlYWtS
ZWYoKS0+d3JhcHBlcigpOwotICAgIHJldHVybiBub0VycjsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKGFsbG9jYXRvcik7Ci0gICAgKmZvcm1hdFJlYWRlclJlZiA9IG51bGxwdHI7Ci0gICAgcmV0
dXJuIC0xOwotI2VuZGlmCi19Ci0KLU9TU3RhdHVzIFdLRm9ybWF0UmVhZGVyU3RhcnRPbk1haW5U
aHJlYWQoTVRQbHVnaW5Gb3JtYXRSZWFkZXJSZWYgZm9ybWF0UmVhZGVyUmVmLCBNVFBsdWdpbkJ5
dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSkKLXsKLSNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVS
KQotICAgIGF1dG8gZm9ybWF0UmVhZGVyID0gV2ViS2l0OjpGb3JtYXRSZWFkZXI6OnVud3JhcChm
b3JtYXRSZWFkZXJSZWYpOwotICAgIGlmICghZm9ybWF0UmVhZGVyKQotICAgICAgICByZXR1cm4g
cGFyYW1FcnI7Ci0gICAgZm9ybWF0UmVhZGVyLT5zdGFydE9uTWFpblRocmVhZChieXRlU291cmNl
KTsKLSAgICByZXR1cm4gbm9FcnI7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShmb3JtYXRSZWFk
ZXJSZWYpOwotICAgIFVOVVNFRF9QQVJBTShieXRlU291cmNlKTsKLSAgICByZXR1cm4gLTE7Ci0j
ZW5kaWYKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS0Zv
cm1hdFJlYWRlci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLRm9ybWF0UmVh
ZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MDU1YjJjMmI1YTYwMzM3OGFl
MTRjZWQ5NjExNjZkM2I4MDdiNzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLRm9ybWF0UmVhZGVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwot
ZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlTVRQbHVnaW5CeXRl
U291cmNlKiBNVFBsdWdpbkJ5dGVTb3VyY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVNVFBs
dWdpbkZvcm1hdFJlYWRlciogTVRQbHVnaW5Gb3JtYXRSZWFkZXJSZWY7Ci0KLVdLX0VYUE9SVCBP
U1N0YXR1cyBXS0Zvcm1hdFJlYWRlckNyZWF0ZShDRkFsbG9jYXRvclJlZiwgTVRQbHVnaW5Gb3Jt
YXRSZWFkZXJSZWYqKTsKLVdLX0VYUE9SVCBPU1N0YXR1cyBXS0Zvcm1hdFJlYWRlclN0YXJ0T25N
YWluVGhyZWFkKE1UUGx1Z2luRm9ybWF0UmVhZGVyUmVmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYp
OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLTWVkaWFGb3JtYXRSZWFkZXIuY3BwIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLTWVkaWFGb3JtYXRSZWFkZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljc0MzEyNjM5YTU3MTNkNmEwNTY2MGRiZTc5ODVmMDQ1ZjQ2MGIxMzAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tNZWRpYUZvcm1hdFJlYWRlci5j
cHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXS01lZGlhRm9ybWF0UmVhZGVyLmgiCisKKyNpbmNsdWRlICJNZWRpYUZvcm1hdFJl
YWRlci5oIgorCisjaW5jbHVkZSA8cGFsL2NvY29hL01lZGlhVG9vbGJveFNvZnRMaW5rLmg+CisK
K09TU3RhdHVzIFdLTWVkaWFGb3JtYXRSZWFkZXJDcmVhdGUoQ0ZBbGxvY2F0b3JSZWYgYWxsb2Nh
dG9yLCBNVFBsdWdpbkZvcm1hdFJlYWRlclJlZiogZm9ybWF0UmVhZGVyUmVmKQoreworI2lmIEVO
QUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCisgICAgYXV0byBmb3JtYXRSZWFkZXIgPSBXZWJLaXQ6
Ok1lZGlhRm9ybWF0UmVhZGVyOjpjcmVhdGUoYWxsb2NhdG9yKTsKKyAgICBpZiAoIWZvcm1hdFJl
YWRlcikKKyAgICAgICAgcmV0dXJuIGtNVFBsdWdpbkZvcm1hdFJlYWRlckVycm9yX0FsbG9jYXRp
b25GYWlsdXJlOworICAgICpmb3JtYXRSZWFkZXJSZWYgPSBmb3JtYXRSZWFkZXIubGVha1JlZigp
LT53cmFwcGVyKCk7CisgICAgcmV0dXJuIG5vRXJyOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
YWxsb2NhdG9yKTsKKyAgICAqZm9ybWF0UmVhZGVyUmVmID0gbnVsbHB0cjsKKyAgICByZXR1cm4g
LTE7CisjZW5kaWYKK30KKworT1NTdGF0dXMgV0tNZWRpYUZvcm1hdFJlYWRlclN0YXJ0T25NYWlu
VGhyZWFkKE1UUGx1Z2luRm9ybWF0UmVhZGVyUmVmIGZvcm1hdFJlYWRlclJlZiwgTVRQbHVnaW5C
eXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCit7CisjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURF
UikKKyAgICBhdXRvIGZvcm1hdFJlYWRlciA9IFdlYktpdDo6TWVkaWFGb3JtYXRSZWFkZXI6OnVu
d3JhcChmb3JtYXRSZWFkZXJSZWYpOworICAgIGlmICghZm9ybWF0UmVhZGVyKQorICAgICAgICBy
ZXR1cm4gcGFyYW1FcnI7CisgICAgZm9ybWF0UmVhZGVyLT5zdGFydE9uTWFpblRocmVhZChieXRl
U291cmNlKTsKKyAgICByZXR1cm4gbm9FcnI7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShmb3Jt
YXRSZWFkZXJSZWYpOworICAgIFVOVVNFRF9QQVJBTShieXRlU291cmNlKTsKKyAgICByZXR1cm4g
LTE7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21h
Yy9XS01lZGlhRm9ybWF0UmVhZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMv
V0tNZWRpYUZvcm1hdFJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlNzM5M2NiMGY2Njc5MjMxZWU4OGFj
Y2Q2MDg1MTYwNWUwODBmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9BUEkvYy9tYWMvV0tNZWRpYUZvcm1hdFJlYWRlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KKworI2lm
ZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBP
cGFxdWVNVFBsdWdpbkJ5dGVTb3VyY2UqIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZjsKK3R5cGVkZWYg
c3RydWN0IE9wYXF1ZU1UUGx1Z2luRm9ybWF0UmVhZGVyKiBNVFBsdWdpbkZvcm1hdFJlYWRlclJl
ZjsKKworV0tfRVhQT1JUIE9TU3RhdHVzIFdLTWVkaWFGb3JtYXRSZWFkZXJDcmVhdGUoQ0ZBbGxv
Y2F0b3JSZWYsIE1UUGx1Z2luRm9ybWF0UmVhZGVyUmVmKik7CitXS19FWFBPUlQgT1NTdGF0dXMg
V0tNZWRpYUZvcm1hdFJlYWRlclN0YXJ0T25NYWluVGhyZWFkKE1UUGx1Z2luRm9ybWF0UmVhZGVy
UmVmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL0NvcmVNZWRpYVdyYXBwZWQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9Db3JlTWVkaWFXcmFwcGVkLmgKaW5kZXggMjg0ZTZhMjk2ZDVmMDIyNzE5ZGU4
MTA0OTM2OTE4ZjdlNTdkODcwNi4uMWMwNjViZDY0Y2U4ZjU2Y2IyMzRkMTI0YjE5OTE4NjlhZTVi
MjlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL0NvcmVNZWRpYVdyYXBwZWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVk
aWFGb3JtYXRSZWFkZXIvQ29yZU1lZGlhV3JhcHBlZC5oCkBAIC0zNyw4ICszNyw4IEBAIHRlbXBs
YXRlPHR5cGVuYW1lPiBzdHJ1Y3QgQ29yZU1lZGlhVHJhaXRzOwogCiAjZGVmaW5lIERFQ0xBUkVf
Q09SRV9NRURJQV9UUkFJVFMoQ2xhc3NOYW1lKSBcCiBuYW1lc3BhY2UgV2ViS2l0IHsgXAotY2xh
c3MgQ2xhc3NOYW1lOyBcCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb3JlTWVkaWFUcmFpdHM8Q2xhc3NO
YW1lPiB7IFwKK2NsYXNzIE1lZGlhIyNDbGFzc05hbWU7IFwKK3RlbXBsYXRlPD4gc3RydWN0IENv
cmVNZWRpYVRyYWl0czxNZWRpYSMjQ2xhc3NOYW1lPiB7IFwKICAgICB1c2luZyBDbGFzcyA9IE1U
UGx1Z2luIyNDbGFzc05hbWUjI0NsYXNzOyBcCiAgICAgdXNpbmcgUmVmID0gTVRQbHVnaW4jI0Ns
YXNzTmFtZSMjUmVmOyBcCiAgICAgdXNpbmcgVlRhYmxlID0gTVRQbHVnaW4jI0NsYXNzTmFtZSMj
VlRhYmxlOyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3Jt
YXRSZWFkZXIvRm9ybWF0UmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRp
YUZvcm1hdFJlYWRlci9Gb3JtYXRSZWFkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4OWJlYjQwMDVlODRhYTYxYjZkMzU2ZDhkZGMyMzc1MTRmOThjNTljLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9Gb3JtYXRSZWFkZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9ybWF0UmVhZGVyLmgiCi0KLSNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQotCi0j
aW5jbHVkZSAiVHJhY2tSZWFkZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0F1ZGlvVHJhY2tQcml2
YXRlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50VHlwZS5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTYW1w
bGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1ZpZGVvVHJhY2tQcml2YXRlLmg+Ci0jaW5jbHVkZSA8cGFsL2F2Zm91bmRh
dGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+
Ci0KLSNpbmNsdWRlIDxwYWwvY29jb2EvTWVkaWFUb29sYm94U29mdExpbmsuaD4KLQotV1RGX0RF
Q0xBUkVfQ0ZfVFlQRV9UUkFJVChNVFBsdWdpbkZvcm1hdFJlYWRlcik7Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgUEFMOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLUNNQmFzZUNsYXNzSUQgRm9ybWF0UmVhZGVyOjp3cmFwcGVyQ2xhc3NJRCgpCi17Ci0gICAg
cmV0dXJuIE1UUGx1Z2luRm9ybWF0UmVhZGVyR2V0Q2xhc3NJRCgpOwotfQotCi1Db3JlTWVkaWFX
cmFwcGVkPEZvcm1hdFJlYWRlcj4qIEZvcm1hdFJlYWRlcjo6dW53cmFwKENNQmFzZU9iamVjdFJl
ZiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIHVud3JhcChjaGVja2VkX2NmX2Nhc3Q8V3JhcHBlclJl
Zj4ob2JqZWN0KSk7Ci19Ci0KLVJlZlB0cjxGb3JtYXRSZWFkZXI+IEZvcm1hdFJlYWRlcjo6Y3Jl
YXRlKEFsbG9jYXRvciYmIGFsbG9jYXRvcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IChh
bGxvY2F0b3IpIEZvcm1hdFJlYWRlcihXVEZNb3ZlKGFsbG9jYXRvcikpKTsKLX0KLQotRm9ybWF0
UmVhZGVyOjpGb3JtYXRSZWFkZXIoQWxsb2NhdG9yJiYgYWxsb2NhdG9yKQotICAgIDogQ29yZU1l
ZGlhV3JhcHBlZChXVEZNb3ZlKGFsbG9jYXRvcikpCi0gICAgLCBtX2R1cmF0aW9uKE1lZGlhVGlt
ZTo6aW52YWxpZFRpbWUoKSkKLXsKLX0KLQotdm9pZCBGb3JtYXRSZWFkZXI6OnN0YXJ0T25NYWlu
VGhyZWFkKE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlKQotewotICAgIGlmIChpc01h
aW5UaHJlYWQoKSkgewotICAgICAgICBwYXJzZUJ5dGVTb3VyY2UoV1RGTW92ZShieXRlU291cmNl
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGJ5dGVTb3VyY2UgPSByZXRhaW5QdHIo
Ynl0ZVNvdXJjZSldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHBhcnNlQnl0ZVNvdXJjZShXVEZNb3Zl
KGJ5dGVTb3VyY2UpKTsKLSAgICB9KTsKLX0KLQotc3RhdGljIFdvcmtRdWV1ZSYgcmVhZGVyUXVl
dWUoKQotewotICAgIHN0YXRpYyBhdXRvJiBxdWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJL
aXQ6OkZvcm1hdFJlYWRlciBRdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6Q29uY3VycmVudCkubGVh
a1JlZigpOwotICAgIHJldHVybiBxdWV1ZTsKLX0KLQotdm9pZCBGb3JtYXRSZWFkZXI6OnBhcnNl
Qnl0ZVNvdXJjZShSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiYmIGJ5dGVTb3VyY2Up
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb250ZW50VHlwZT4gY29udGVudFR5cGUoInZpZGVvL3dlYm0iX3MpOwotICAgIGF1dG8g
cGFyc2VyID0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKGNvbnRlbnRUeXBlKTsKLSAg
ICBpZiAoIXBhcnNlcikgewotICAgICAgICBtX3BhcnNlVHJhY2tzU3RhdHVzID0ga01UUGx1Z2lu
Rm9ybWF0UmVhZGVyRXJyb3JfQWxsb2NhdGlvbkZhaWx1cmU7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBTZXQgYSBtaW5pbXVtIGF1ZGlvIHNhbXBsZSBkdXJhdGlvbiBvZiAwIHNv
IHRoZSBwYXJzZXIgY3JlYXRlcyBpbmRpdmlzaWJsZSBzYW1wbGVzIHdpdGggYnl0ZSBzb3VyY2Ug
cmFuZ2VzLgotICAgIHBhcnNlci0+c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oMCk7Ci0K
LSAgICBwYXJzZXItPnNldENhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFtdKEZ1bmN0aW9uPHZv
aWQoKT4mJiBmdW5jdGlvbikgewotICAgICAgICBUcmFja1JlYWRlcjo6c3RvcmFnZVF1ZXVlKCku
ZGlzcGF0Y2goV1RGTW92ZShmdW5jdGlvbikpOwotICAgIH0pOwotCi0gICAgcGFyc2VyLT5zZXRE
aWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyldKFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50
JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpIHsKLSAgICAgICAgZGlkUGFyc2VUcmFja3MoV1RGTW92ZShpbml0aWFs
aXphdGlvblNlZ21lbnQpLCBub0Vycik7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7Ci0KLSAgICBwYXJzZXItPnNldERpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0Nh
bGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKHVpbnQ2NF90IGVy
cm9yQ29kZSkgewotICAgICAgICBkaWRQYXJzZVRyYWNrcyh7IH0sIGVycm9yQ29kZSk7Ci0gICAg
fSk7Ci0KLSAgICBwYXJzZXItPnNldERpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjayhbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZWY8TWVkaWFTYW1wbGU+JiYgbWVkaWFT
YW1wbGUsIHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKSB7Ci0gICAg
ICAgIGRpZFByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShtZWRpYVNhbXBsZSksIHRyYWNrSUQsIG1l
ZGlhVHlwZSk7Ci0gICAgfSk7Ci0KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyc2VU
cmFja3NMb2NrKTsKLSAgICBtX2J5dGVTb3VyY2UgPSBXVEZNb3ZlKGJ5dGVTb3VyY2UpOwotICAg
IG1fcGFyc2VUcmFja3NTdGF0dXMgPSBXVEY6Om51bGxvcHQ7Ci0gICAgbV9kdXJhdGlvbiA9IE1l
ZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAgICBtX3RyYWNrUmVhZGVycy5jbGVhcigpOwotCi0g
ICAgcmVhZGVyUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBieXRlU291cmNlID0gbV9ieXRlU291cmNlLCBwYXJzZXIgPSBwYXJzZXIucmVsZWFz
ZU5vbk51bGwoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgcGFyc2VyLT5hcHBlbmREYXRhKFdURk1v
dmUoYnl0ZVNvdXJjZSkpOwotICAgICAgICBUcmFja1JlYWRlcjo6c3RvcmFnZVF1ZXVlKCkuZGlz
cGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGFyc2VyID0gV1RG
TW92ZShwYXJzZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgZmluaXNoUGFyc2luZyhXVEZN
b3ZlKHBhcnNlcikpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBGb3JtYXRSZWFk
ZXI6OmRpZFBhcnNlVHJhY2tzKFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0
aW9uU2VnbWVudCYmIHNlZ21lbnQsIHVpbnQ2NF90IGVycm9yQ29kZSkKLXsKLSAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKLQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJzZVRy
YWNrc0xvY2spOwotICAgIEFTU0VSVCghbV9wYXJzZVRyYWNrc1N0YXR1cyk7Ci0gICAgQVNTRVJU
KG1fZHVyYXRpb24uaXNJbnZhbGlkKCkpOwotICAgIEFTU0VSVChtX3RyYWNrUmVhZGVycy5pc0Vt
cHR5KCkpOwotCi0gICAgbV9wYXJzZVRyYWNrc1N0YXR1cyA9IGVycm9yQ29kZSA/IGtNVFBsdWdp
bkZvcm1hdFJlYWRlckVycm9yX1BhcnNpbmdGYWlsdXJlIDogbm9FcnI7Ci0gICAgbV9kdXJhdGlv
biA9IFdURk1vdmUoc2VnbWVudC5kdXJhdGlvbik7Ci0KLSAgICBmb3IgKGF1dG8mIHZpZGVvVHJh
Y2sgOiBzZWdtZW50LnZpZGVvVHJhY2tzKSB7Ci0gICAgICAgIGF1dG8gdHJhY2sgPSB2aWRlb1Ry
YWNrLnRyYWNrLmdldCgpOwotICAgICAgICBhdXRvIHRyYWNrUmVhZGVyID0gVHJhY2tSZWFkZXI6
OmNyZWF0ZShhbGxvY2F0b3IoKSwgKnRoaXMsIGtDTU1lZGlhVHlwZV9WaWRlbywgKnRyYWNrLT50
cmFja1VJRCgpLCB0cmFjay0+ZGVmYXVsdEVuYWJsZWQoKSk7Ci0gICAgICAgIGlmICghdHJhY2tS
ZWFkZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBtX3RyYWNrUmVhZGVycy5h
cHBlbmQodHJhY2tSZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAgZm9yIChh
dXRvJiBhdWRpb1RyYWNrIDogc2VnbWVudC5hdWRpb1RyYWNrcykgewotICAgICAgICBhdXRvIHRy
YWNrID0gYXVkaW9UcmFjay50cmFjay5nZXQoKTsKLSAgICAgICAgYXV0byB0cmFja1JlYWRlciA9
IFRyYWNrUmVhZGVyOjpjcmVhdGUoYWxsb2NhdG9yKCksICp0aGlzLCBrQ01NZWRpYVR5cGVfQXVk
aW8sICp0cmFjay0+dHJhY2tVSUQoKSwgdHJhY2stPmRlZmF1bHRFbmFibGVkKCkpOwotICAgICAg
ICBpZiAoIXRyYWNrUmVhZGVyKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbV90
cmFja1JlYWRlcnMuYXBwZW5kKHRyYWNrUmVhZGVyLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0K
LQotICAgIGZvciAoYXV0byYgdGV4dFRyYWNrIDogc2VnbWVudC50ZXh0VHJhY2tzKSB7Ci0gICAg
ICAgIGF1dG8gdHJhY2sgPSB0ZXh0VHJhY2sudHJhY2suZ2V0KCk7Ci0gICAgICAgIGlmIChhdXRv
IHRyYWNrUmVhZGVyID0gVHJhY2tSZWFkZXI6OmNyZWF0ZShhbGxvY2F0b3IoKSwgKnRoaXMsIGtD
TU1lZGlhVHlwZV9UZXh0LCAqdHJhY2stPnRyYWNrVUlEKCksIHRyYWNrLT5kZWZhdWx0RW5hYmxl
ZCgpKSkKLSAgICAgICAgICAgIG1fdHJhY2tSZWFkZXJzLmFwcGVuZCh0cmFja1JlYWRlci5yZWxl
YXNlTm9uTnVsbCgpKTsKLSAgICB9Ci0KLSAgICBtX3BhcnNlVHJhY2tzQ29uZGl0aW9uLm5vdGlm
eUFsbCgpOwotfQotCi12b2lkIEZvcm1hdFJlYWRlcjo6ZGlkUHJvdmlkZU1lZGlhRGF0YShSZWY8
TWVkaWFTYW1wbGU+JiYgbWVkaWFTYW1wbGUsIHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0IFN0cmlu
ZyYpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fcGFyc2VUcmFja3NMb2NrKTsKLSAgICBhdXRvIHRyYWNrSW5kZXggPSBtX3Ry
YWNrUmVhZGVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIHRyYWNrKSB7Ci0gICAgICAgIHJldHVy
biB0cmFjay0+dHJhY2tJRCgpID09IHRyYWNrSUQ7Ci0gICAgfSk7Ci0KLSAgICBpZiAodHJhY2tJ
bmRleCAhPSBub3RGb3VuZCkKLSAgICAgICAgbV90cmFja1JlYWRlcnNbdHJhY2tJbmRleF0tPmFk
ZFNhbXBsZShXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgbV9ieXRlU291cmNlLmdldCgpKTsKLX0KLQot
dm9pZCBGb3JtYXRSZWFkZXI6OmZpbmlzaFBhcnNpbmcoUmVmPFNvdXJjZUJ1ZmZlclBhcnNlcj4m
JiBwYXJzZXIpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fcGFyc2VUcmFja3NMb2NrKTsKLSAgICBBU1NFUlQobV9wYXJzZVRy
YWNrc1N0YXR1cy5oYXNWYWx1ZSgpKTsKLQotICAgIGZvciAoYXV0byYgdHJhY2tSZWFkZXIgOiBt
X3RyYWNrUmVhZGVycykKLSAgICAgICAgdHJhY2tSZWFkZXItPmZpbmlzaFBhcnNpbmcoKTsKLQot
ICAgIHBhcnNlci0+c2V0RGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjayhudWxscHRy
KTsKLSAgICBwYXJzZXItPnNldERpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNr
KG51bGxwdHIpOwotICAgIHBhcnNlci0+c2V0RGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKG51
bGxwdHIpOwotICAgIHBhcnNlci0+cmVzZXRQYXJzZXJTdGF0ZSgpOwotfQotCi1PU1N0YXR1cyBG
b3JtYXRSZWFkZXI6OmNvcHlQcm9wZXJ0eShDRlN0cmluZ1JlZiBrZXksIENGQWxsb2NhdG9yUmVm
IGFsbG9jYXRvciwgdm9pZCogdmFsdWVDb3B5KQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9wYXJzZVRyYWNrc0xvY2spOwotICAgIG1fcGFyc2VUcmFja3NDb25kaXRpb24ud2FpdCht
X3BhcnNlVHJhY2tzTG9jaywgWyZdIHsKLSAgICAgICAgcmV0dXJuIG1fcGFyc2VUcmFja3NTdGF0
dXMuaGFzVmFsdWUoKTsKLSAgICB9KTsKLQotICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpnZXRf
TWVkaWFUb29sYm94X2tNVFBsdWdpbkZvcm1hdFJlYWRlclByb3BlcnR5X0R1cmF0aW9uKCkpKSB7
Ci0gICAgICAgIGlmIChhdXRvIGxlYWtlZER1cmF0aW9uID0gYWRvcHRDRihDTVRpbWVDb3B5QXNE
aWN0aW9uYXJ5KFBBTDo6dG9DTVRpbWUobV9kdXJhdGlvbiksIGFsbG9jYXRvcikpLmxlYWtSZWYo
KSkgewotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmKj4odmFs
dWVDb3B5KSA9IGxlYWtlZER1cmF0aW9uOwotICAgICAgICAgICAgcmV0dXJuIG5vRXJyOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGtDTUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5vdEF2
YWlsYWJsZTsKLX0KLQotT1NTdGF0dXMgRm9ybWF0UmVhZGVyOjpjb3B5VHJhY2tBcnJheShDRkFy
cmF5UmVmKiB0cmFja0FycmF5Q29weSkKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
cGFyc2VUcmFja3NMb2NrKTsKLSAgICBtX3BhcnNlVHJhY2tzQ29uZGl0aW9uLndhaXQobV9wYXJz
ZVRyYWNrc0xvY2ssIFsmXSB7Ci0gICAgICAgIHJldHVybiBtX3BhcnNlVHJhY2tzU3RhdHVzLmhh
c1ZhbHVlKCk7Ci0gICAgfSk7Ci0KLSAgICBpZiAoKm1fcGFyc2VUcmFja3NTdGF0dXMgIT0gbm9F
cnIpCi0gICAgICAgIHJldHVybiAqbV9wYXJzZVRyYWNrc1N0YXR1czsKLQotICAgIGF1dG8gbXV0
YWJsZUFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShhbGxvY2F0b3IoKSwgQ2hl
Y2tlZDxDRkluZGV4PihtX3RyYWNrUmVhZGVycy5zaXplKCkpLnVuc2FmZUdldCgpLCAma0NGVHlw
ZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChhdXRvJiB0cmFja1JlYWRlciA6IG1fdHJhY2tS
ZWFkZXJzKQotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUobXV0YWJsZUFycmF5LmdldCgpLCB0
cmFja1JlYWRlci0+d3JhcHBlcigpKTsKLQotICAgICp0cmFja0FycmF5Q29weSA9IGFkb3B0Q0Yo
Q0ZBcnJheUNyZWF0ZUNvcHkoYWxsb2NhdG9yKCksIG11dGFibGVBcnJheS5nZXQoKSkpLmxlYWtS
ZWYoKTsKLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9Gb3JtYXRSZWFkZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9Gb3JtYXRSZWFkZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM5YjQwM2IyYmQ3NGFkNTU4Y2NjMzQ4M2ZlZjU5
ZWJjNmRkNWE5Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvRm9ybWF0UmVhZGVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQotCi0jaW5jbHVkZSAiQ29yZU1l
ZGlhV3JhcHBlZC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVu
dC5oPgotI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgot
Ci1ERUNMQVJFX0NPUkVfTUVESUFfVFJBSVRTKEZvcm1hdFJlYWRlcik7Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLWNsYXNzIFNvdXJjZUJ1ZmZlclBhcnNlcjsKLX0KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIFRyYWNrUmVhZGVyOwotCi1jbGFzcyBGb3JtYXRSZWFkZXIgZmluYWwgOiBw
dWJsaWMgQ29yZU1lZGlhV3JhcHBlZDxGb3JtYXRSZWFkZXI+IHsKLXB1YmxpYzoKLSAgICB1c2lu
ZyBDb3JlTWVkaWFXcmFwcGVkPEZvcm1hdFJlYWRlcj46OnVud3JhcDsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgV3JhcHBlckNsYXNzIHdyYXBwZXJDbGFzcygpOwotICAgIHN0YXRpYyBDTUJhc2VD
bGFzc0lEIHdyYXBwZXJDbGFzc0lEKCk7Ci0gICAgc3RhdGljIENvcmVNZWRpYVdyYXBwZWQ8Rm9y
bWF0UmVhZGVyPiogdW53cmFwKENNQmFzZU9iamVjdFJlZik7Ci0KLSAgICBzdGF0aWMgUmVmUHRy
PEZvcm1hdFJlYWRlcj4gY3JlYXRlKEFsbG9jYXRvciYmKTsKLQotICAgIHZvaWQgc3RhcnRPbk1h
aW5UaHJlYWQoTVRQbHVnaW5CeXRlU291cmNlUmVmKTsKLSAgICBjb25zdCBNZWRpYVRpbWUmIGR1
cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IEZvcm1hdFJlYWRlcihBbGxvY2F0b3ImJik7Ci0KLSAgICB2b2lkIHBhcnNlQnl0ZVNv
dXJjZShSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiYmKTsKLSAgICB2b2lkIGRpZFBh
cnNlVHJhY2tzKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0
aW9uU2VnbWVudCYmLCB1aW50NjRfdCBlcnJvckNvZGUpOwotICAgIHZvaWQgZGlkU2VsZWN0Vmlk
ZW9UcmFjayhXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZSYsIGJvb2wpIHsgfQotICAgIHZvaWQg
ZGlkRW5hYmxlQXVkaW9UcmFjayhXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZSYsIGJvb2wpIHsg
fQotICAgIHZvaWQgZGlkUHJvdmlkZU1lZGlhRGF0YShSZWY8V2ViQ29yZTo6TWVkaWFTYW1wbGU+
JiYsIHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGZpbmlzaFBhcnNpbmcoUmVm
PFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcj4mJik7Ci0KLSAgICAvLyBDTUJhc2VDbGFzcwot
ICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIldlYktp
dDo6Rm9ybWF0UmVhZGVyIl9zOyB9Ci0gICAgT1NTdGF0dXMgY29weVByb3BlcnR5KENGU3RyaW5n
UmVmLCBDRkFsbG9jYXRvclJlZiwgdm9pZCogY29waWVkVmFsdWUpIGZpbmFsOwotCi0gICAgLy8g
V3JhcHBlckNsYXNzCi0gICAgT1NTdGF0dXMgY29weVRyYWNrQXJyYXkoQ0ZBcnJheVJlZiopOwot
Ci0gICAgUmV0YWluUHRyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZj4gbV9ieXRlU291cmNlOwotICAg
IENvbmRpdGlvbiBtX3BhcnNlVHJhY2tzQ29uZGl0aW9uOwotICAgIExvY2sgbV9wYXJzZVRyYWNr
c0xvY2s7Ci0gICAgTWVkaWFUaW1lIG1fZHVyYXRpb247Ci0gICAgT3B0aW9uYWw8T1NTdGF0dXM+
IG1fcGFyc2VUcmFja3NTdGF0dXM7Ci0gICAgVmVjdG9yPFJlZjxUcmFja1JlYWRlcj4+IG1fdHJh
Y2tSZWFkZXJzOwotfTsKLQotY29uc3RleHByIEZvcm1hdFJlYWRlcjo6V3JhcHBlckNsYXNzIEZv
cm1hdFJlYWRlcjo6d3JhcHBlckNsYXNzKCkKLXsKLSAgICByZXR1cm4gewotICAgICAgICAudmVy
c2lvbiA9IGtNVFBsdWdpbkZvcm1hdFJlYWRlcl9DbGFzc1ZlcnNpb25fMSwKLSAgICAgICAgLmNv
cHlUcmFja0FycmF5ID0gW10oV3JhcHBlclJlZiByZWFkZXIsIENGQXJyYXlSZWYqIHRyYWNrQXJy
YXlDb3B5KSB7Ci0gICAgICAgICAgICByZXR1cm4gdW53cmFwKHJlYWRlciktPmNvcHlUcmFja0Fy
cmF5KHRyYWNrQXJyYXlDb3B5KTsKLSAgICAgICAgfSwKLSAgICB9OwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFG
b3JtYXRSZWFkZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTE3OGMyNWI0ZjIyZmFjODVj
NmVjMDk2ZWMwMTcyM2ZhYjY2NzAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcApAQCAtMCww
ICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJN
ZWRpYUZvcm1hdFJlYWRlci5oIgorCisjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKKwor
I2luY2x1ZGUgIk1lZGlhVHJhY2tSZWFkZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0F1ZGlvVHJh
Y2tQcml2YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50VHlwZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWVk
aWFTYW1wbGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvVHJhY2tQcml2YXRlLmg+CisjaW5jbHVkZSA8cGFsL2F2
Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1
ZXVlLmg+CisKKyNpbmNsdWRlIDxwYWwvY29jb2EvTWVkaWFUb29sYm94U29mdExpbmsuaD4KKwor
V1RGX0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChNVFBsdWdpbkZvcm1hdFJlYWRlcik7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgUEFMOwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK0NNQmFzZUNsYXNzSUQgTWVkaWFGb3JtYXRSZWFkZXI6OndyYXBwZXJDbGFzc0lE
KCkKK3sKKyAgICByZXR1cm4gTVRQbHVnaW5Gb3JtYXRSZWFkZXJHZXRDbGFzc0lEKCk7Cit9CisK
K0NvcmVNZWRpYVdyYXBwZWQ8TWVkaWFGb3JtYXRSZWFkZXI+KiBNZWRpYUZvcm1hdFJlYWRlcjo6
dW53cmFwKENNQmFzZU9iamVjdFJlZiBvYmplY3QpCit7CisgICAgcmV0dXJuIHVud3JhcChjaGVj
a2VkX2NmX2Nhc3Q8V3JhcHBlclJlZj4ob2JqZWN0KSk7Cit9CisKK1JlZlB0cjxNZWRpYUZvcm1h
dFJlYWRlcj4gTWVkaWFGb3JtYXRSZWFkZXI6OmNyZWF0ZShBbGxvY2F0b3ImJiBhbGxvY2F0b3Ip
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoYWxsb2NhdG9yKSBNZWRpYUZvcm1hdFJlYWRl
cihXVEZNb3ZlKGFsbG9jYXRvcikpKTsKK30KKworTWVkaWFGb3JtYXRSZWFkZXI6Ok1lZGlhRm9y
bWF0UmVhZGVyKEFsbG9jYXRvciYmIGFsbG9jYXRvcikKKyAgICA6IENvcmVNZWRpYVdyYXBwZWQo
V1RGTW92ZShhbGxvY2F0b3IpKQorICAgICwgbV9kdXJhdGlvbihNZWRpYVRpbWU6OmludmFsaWRU
aW1lKCkpCit7Cit9CisKK3ZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OnN0YXJ0T25NYWluVGhyZWFk
KE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlKQoreworICAgIGlmIChpc01haW5UaHJl
YWQoKSkgeworICAgICAgICBwYXJzZUJ5dGVTb3VyY2UoV1RGTW92ZShieXRlU291cmNlKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGJ5dGVTb3VyY2UgPSByZXRhaW5QdHIoYnl0ZVNv
dXJjZSldKCkgbXV0YWJsZSB7CisgICAgICAgIHBhcnNlQnl0ZVNvdXJjZShXVEZNb3ZlKGJ5dGVT
b3VyY2UpKTsKKyAgICB9KTsKK30KKworc3RhdGljIFdvcmtRdWV1ZSYgcmVhZGVyUXVldWUoKQor
eworICAgIHN0YXRpYyBhdXRvJiBxdWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJLaXQ6Ok1l
ZGlhRm9ybWF0UmVhZGVyIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpDb25jdXJyZW50KS5sZWFr
UmVmKCk7CisgICAgcmV0dXJuIHF1ZXVlOworfQorCit2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpw
YXJzZUJ5dGVTb3VyY2UoUmV0YWluUHRyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZj4mJiBieXRlU291
cmNlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Q29udGVudFR5cGU+IGNvbnRlbnRUeXBlKCJ2aWRlby93ZWJtIl9zKTsKKyAgICBh
dXRvIHBhcnNlciA9IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb250ZW50VHlwZSk7
CisgICAgaWYgKCFwYXJzZXIpIHsKKyAgICAgICAgbV9wYXJzZVRyYWNrc1N0YXR1cyA9IGtNVFBs
dWdpbkZvcm1hdFJlYWRlckVycm9yX0FsbG9jYXRpb25GYWlsdXJlOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gU2V0IGEgbWluaW11bSBhdWRpbyBzYW1wbGUgZHVyYXRpb24gb2Yg
MCBzbyB0aGUgcGFyc2VyIGNyZWF0ZXMgaW5kaXZpc2libGUgc2FtcGxlcyB3aXRoIGJ5dGUgc291
cmNlIHJhbmdlcy4KKyAgICBwYXJzZXItPnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKDAp
OworCisgICAgcGFyc2VyLT5zZXRDYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbXShGdW5jdGlv
bjx2b2lkKCk+JiYgZnVuY3Rpb24pIHsKKyAgICAgICAgTWVkaWFUcmFja1JlYWRlcjo6c3RvcmFn
ZVF1ZXVlKCkuZGlzcGF0Y2goV1RGTW92ZShmdW5jdGlvbikpOworICAgIH0pOworCisgICAgcGFy
c2VyLT5zZXREaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRp
b25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgZGlkUGFyc2VUcmFja3MoV1RGTW92
ZShpbml0aWFsaXphdGlvblNlZ21lbnQpLCBub0Vycik7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7CisgICAgfSk7CisKKyAgICBwYXJzZXItPnNldERpZEVuY291bnRlckVycm9yRHVyaW5n
UGFyc2luZ0NhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKHVp
bnQ2NF90IGVycm9yQ29kZSkgeworICAgICAgICBkaWRQYXJzZVRyYWNrcyh7IH0sIGVycm9yQ29k
ZSk7CisgICAgfSk7CisKKyAgICBwYXJzZXItPnNldERpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFj
ayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZWY8TWVkaWFTYW1wbGU+
JiYgbWVkaWFTYW1wbGUsIHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBl
KSB7CisgICAgICAgIGRpZFByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShtZWRpYVNhbXBsZSksIHRy
YWNrSUQsIG1lZGlhVHlwZSk7CisgICAgfSk7CisKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fcGFyc2VUcmFja3NMb2NrKTsKKyAgICBtX2J5dGVTb3VyY2UgPSBXVEZNb3ZlKGJ5dGVTb3Vy
Y2UpOworICAgIG1fcGFyc2VUcmFja3NTdGF0dXMgPSBXVEY6Om51bGxvcHQ7CisgICAgbV9kdXJh
dGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICBtX3RyYWNrUmVhZGVycy5jbGVh
cigpOworCisgICAgcmVhZGVyUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBieXRlU291cmNlID0gbV9ieXRlU291cmNlLCBwYXJzZXIgPSBwYXJz
ZXIucmVsZWFzZU5vbk51bGwoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgcGFyc2VyLT5hcHBlbmRE
YXRhKFdURk1vdmUoYnl0ZVNvdXJjZSkpOworICAgICAgICBNZWRpYVRyYWNrUmVhZGVyOjpzdG9y
YWdlUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBwYXJzZXIgPSBXVEZNb3ZlKHBhcnNlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBmaW5p
c2hQYXJzaW5nKFdURk1vdmUocGFyc2VyKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2
b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpkaWRQYXJzZVRyYWNrcyhTb3VyY2VCdWZmZXJQcml2YXRl
Q2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQmJiBzZWdtZW50LCB1aW50NjRfdCBlcnJvckNv
ZGUpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fcGFyc2VUcmFja3NMb2NrKTsKKyAgICBBU1NFUlQoIW1fcGFyc2VUcmFja3NT
dGF0dXMpOworICAgIEFTU0VSVChtX2R1cmF0aW9uLmlzSW52YWxpZCgpKTsKKyAgICBBU1NFUlQo
bV90cmFja1JlYWRlcnMuaXNFbXB0eSgpKTsKKworICAgIG1fcGFyc2VUcmFja3NTdGF0dXMgPSBl
cnJvckNvZGUgPyBrTVRQbHVnaW5Gb3JtYXRSZWFkZXJFcnJvcl9QYXJzaW5nRmFpbHVyZSA6IG5v
RXJyOworICAgIG1fZHVyYXRpb24gPSBXVEZNb3ZlKHNlZ21lbnQuZHVyYXRpb24pOworCisgICAg
Zm9yIChhdXRvJiB2aWRlb1RyYWNrIDogc2VnbWVudC52aWRlb1RyYWNrcykgeworICAgICAgICBh
dXRvIHRyYWNrID0gdmlkZW9UcmFjay50cmFjay5nZXQoKTsKKyAgICAgICAgYXV0byB0cmFja1Jl
YWRlciA9IE1lZGlhVHJhY2tSZWFkZXI6OmNyZWF0ZShhbGxvY2F0b3IoKSwgKnRoaXMsIGtDTU1l
ZGlhVHlwZV9WaWRlbywgKnRyYWNrLT50cmFja1VJRCgpLCB0cmFjay0+ZGVmYXVsdEVuYWJsZWQo
KSk7CisgICAgICAgIGlmICghdHJhY2tSZWFkZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBtX3RyYWNrUmVhZGVycy5hcHBlbmQodHJhY2tSZWFkZXIucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrIDogc2VnbWVudC5hdWRpb1Ry
YWNrcykgeworICAgICAgICBhdXRvIHRyYWNrID0gYXVkaW9UcmFjay50cmFjay5nZXQoKTsKKyAg
ICAgICAgYXV0byB0cmFja1JlYWRlciA9IE1lZGlhVHJhY2tSZWFkZXI6OmNyZWF0ZShhbGxvY2F0
b3IoKSwgKnRoaXMsIGtDTU1lZGlhVHlwZV9BdWRpbywgKnRyYWNrLT50cmFja1VJRCgpLCB0cmFj
ay0+ZGVmYXVsdEVuYWJsZWQoKSk7CisgICAgICAgIGlmICghdHJhY2tSZWFkZXIpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBtX3RyYWNrUmVhZGVycy5hcHBlbmQodHJhY2tSZWFk
ZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sg
OiBzZWdtZW50LnRleHRUcmFja3MpIHsKKyAgICAgICAgYXV0byB0cmFjayA9IHRleHRUcmFjay50
cmFjay5nZXQoKTsKKyAgICAgICAgaWYgKGF1dG8gdHJhY2tSZWFkZXIgPSBNZWRpYVRyYWNrUmVh
ZGVyOjpjcmVhdGUoYWxsb2NhdG9yKCksICp0aGlzLCBrQ01NZWRpYVR5cGVfVGV4dCwgKnRyYWNr
LT50cmFja1VJRCgpLCB0cmFjay0+ZGVmYXVsdEVuYWJsZWQoKSkpCisgICAgICAgICAgICBtX3Ry
YWNrUmVhZGVycy5hcHBlbmQodHJhY2tSZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQor
CisgICAgbV9wYXJzZVRyYWNrc0NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKK30KKwordm9pZCBNZWRp
YUZvcm1hdFJlYWRlcjo6ZGlkUHJvdmlkZU1lZGlhRGF0YShSZWY8TWVkaWFTYW1wbGU+JiYgbWVk
aWFTYW1wbGUsIHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0IFN0cmluZyYpCit7CisgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyc2VU
cmFja3NMb2NrKTsKKyAgICBhdXRvIHRyYWNrSW5kZXggPSBtX3RyYWNrUmVhZGVycy5maW5kTWF0
Y2hpbmcoWyZdKGF1dG8mIHRyYWNrKSB7CisgICAgICAgIHJldHVybiB0cmFjay0+dHJhY2tJRCgp
ID09IHRyYWNrSUQ7CisgICAgfSk7CisKKyAgICBpZiAodHJhY2tJbmRleCAhPSBub3RGb3VuZCkK
KyAgICAgICAgbV90cmFja1JlYWRlcnNbdHJhY2tJbmRleF0tPmFkZFNhbXBsZShXVEZNb3ZlKG1l
ZGlhU2FtcGxlKSwgbV9ieXRlU291cmNlLmdldCgpKTsKK30KKwordm9pZCBNZWRpYUZvcm1hdFJl
YWRlcjo6ZmluaXNoUGFyc2luZyhSZWY8U291cmNlQnVmZmVyUGFyc2VyPiYmIHBhcnNlcikKK3sK
KyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9wYXJzZVRyYWNrc0xvY2spOworICAgIEFTU0VSVChtX3BhcnNlVHJhY2tzU3RhdHVzLmhh
c1ZhbHVlKCkpOworCisgICAgZm9yIChhdXRvJiB0cmFja1JlYWRlciA6IG1fdHJhY2tSZWFkZXJz
KQorICAgICAgICB0cmFja1JlYWRlci0+ZmluaXNoUGFyc2luZygpOworCisgICAgcGFyc2VyLT5z
ZXREaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKG51bGxwdHIpOworICAgIHBhcnNl
ci0+c2V0RGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2sobnVsbHB0cik7Cisg
ICAgcGFyc2VyLT5zZXREaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2sobnVsbHB0cik7CisgICAg
cGFyc2VyLT5yZXNldFBhcnNlclN0YXRlKCk7Cit9CisKK09TU3RhdHVzIE1lZGlhRm9ybWF0UmVh
ZGVyOjpjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYga2V5LCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0
b3IsIHZvaWQqIHZhbHVlQ29weSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFy
c2VUcmFja3NMb2NrKTsKKyAgICBtX3BhcnNlVHJhY2tzQ29uZGl0aW9uLndhaXQobV9wYXJzZVRy
YWNrc0xvY2ssIFsmXSB7CisgICAgICAgIHJldHVybiBtX3BhcnNlVHJhY2tzU3RhdHVzLmhhc1Zh
bHVlKCk7CisgICAgfSk7CisKKyAgICBpZiAoQ0ZFcXVhbChrZXksIFBBTDo6Z2V0X01lZGlhVG9v
bGJveF9rTVRQbHVnaW5Gb3JtYXRSZWFkZXJQcm9wZXJ0eV9EdXJhdGlvbigpKSkgeworICAgICAg
ICBpZiAoYXV0byBsZWFrZWREdXJhdGlvbiA9IGFkb3B0Q0YoQ01UaW1lQ29weUFzRGljdGlvbmFy
eShQQUw6OnRvQ01UaW1lKG1fZHVyYXRpb24pLCBhbGxvY2F0b3IpKS5sZWFrUmVmKCkpIHsKKyAg
ICAgICAgICAgICpyZWludGVycHJldF9jYXN0PENGRGljdGlvbmFyeVJlZio+KHZhbHVlQ29weSkg
PSBsZWFrZWREdXJhdGlvbjsKKyAgICAgICAgICAgIHJldHVybiBub0VycjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBrQ01CYXNlT2JqZWN0RXJyb3JfVmFsdWVOb3RBdmFpbGFibGU7
Cit9CisKK09TU3RhdHVzIE1lZGlhRm9ybWF0UmVhZGVyOjpjb3B5VHJhY2tBcnJheShDRkFycmF5
UmVmKiB0cmFja0FycmF5Q29weSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFy
c2VUcmFja3NMb2NrKTsKKyAgICBtX3BhcnNlVHJhY2tzQ29uZGl0aW9uLndhaXQobV9wYXJzZVRy
YWNrc0xvY2ssIFsmXSB7CisgICAgICAgIHJldHVybiBtX3BhcnNlVHJhY2tzU3RhdHVzLmhhc1Zh
bHVlKCk7CisgICAgfSk7CisKKyAgICBpZiAoKm1fcGFyc2VUcmFja3NTdGF0dXMgIT0gbm9FcnIp
CisgICAgICAgIHJldHVybiAqbV9wYXJzZVRyYWNrc1N0YXR1czsKKworICAgIGF1dG8gbXV0YWJs
ZUFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShhbGxvY2F0b3IoKSwgQ2hlY2tl
ZDxDRkluZGV4PihtX3RyYWNrUmVhZGVycy5zaXplKCkpLnVuc2FmZUdldCgpLCAma0NGVHlwZUFy
cmF5Q2FsbEJhY2tzKSk7CisgICAgZm9yIChhdXRvJiB0cmFja1JlYWRlciA6IG1fdHJhY2tSZWFk
ZXJzKQorICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUobXV0YWJsZUFycmF5LmdldCgpLCB0cmFj
a1JlYWRlci0+d3JhcHBlcigpKTsKKworICAgICp0cmFja0FycmF5Q29weSA9IGFkb3B0Q0YoQ0ZB
cnJheUNyZWF0ZUNvcHkoYWxsb2NhdG9yKCksIG11dGFibGVBcnJheS5nZXQoKSkpLmxlYWtSZWYo
KTsKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDdhNmI5NzkxZjZhY2UyZjRlMGE4NzFlYTZmZDNhZmFhMDVmZjJmMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9NZWRpYUZvcm1hdFJlYWRlci5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCisKKyNpbmNsdWRl
ICJDb3JlTWVkaWFXcmFwcGVkLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Tb3VyY2VCdWZmZXJQcml2
YXRlQ2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CisKK0RFQ0xBUkVfQ09SRV9NRURJQV9UUkFJVFMoRm9ybWF0UmVhZGVyKTsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyOworfQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgTWVkaWFUcmFja1JlYWRlcjsKKworY2xhc3MgTWVkaWFGb3Jt
YXRSZWFkZXIgZmluYWwgOiBwdWJsaWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYUZvcm1hdFJlYWRl
cj4geworcHVibGljOgorICAgIHVzaW5nIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFGb3JtYXRSZWFk
ZXI+Ojp1bndyYXA7CisKKyAgICBzdGF0aWMgY29uc3RleHByIFdyYXBwZXJDbGFzcyB3cmFwcGVy
Q2xhc3MoKTsKKyAgICBzdGF0aWMgQ01CYXNlQ2xhc3NJRCB3cmFwcGVyQ2xhc3NJRCgpOworICAg
IHN0YXRpYyBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhRm9ybWF0UmVhZGVyPiogdW53cmFwKENNQmFz
ZU9iamVjdFJlZik7CisKKyAgICBzdGF0aWMgUmVmUHRyPE1lZGlhRm9ybWF0UmVhZGVyPiBjcmVh
dGUoQWxsb2NhdG9yJiYpOworCisgICAgdm9pZCBzdGFydE9uTWFpblRocmVhZChNVFBsdWdpbkJ5
dGVTb3VyY2VSZWYpOworICAgIGNvbnN0IE1lZGlhVGltZSYgZHVyYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2R1cmF0aW9uOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgTWVkaWFGb3JtYXRS
ZWFkZXIoQWxsb2NhdG9yJiYpOworCisgICAgdm9pZCBwYXJzZUJ5dGVTb3VyY2UoUmV0YWluUHRy
PE1UUGx1Z2luQnl0ZVNvdXJjZVJlZj4mJik7CisgICAgdm9pZCBkaWRQYXJzZVRyYWNrcyhXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQmJiwg
dWludDY0X3QgZXJyb3JDb2RlKTsKKyAgICB2b2lkIGRpZFNlbGVjdFZpZGVvVHJhY2soV2ViQ29y
ZTo6VmlkZW9UcmFja1ByaXZhdGUmLCBib29sKSB7IH0KKyAgICB2b2lkIGRpZEVuYWJsZUF1ZGlv
VHJhY2soV2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGUmLCBib29sKSB7IH0KKyAgICB2b2lkIGRp
ZFByb3ZpZGVNZWRpYURhdGEoUmVmPFdlYkNvcmU6Ok1lZGlhU2FtcGxlPiYmLCB1aW50NjRfdCwg
Y29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBmaW5pc2hQYXJzaW5nKFJlZjxXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXI+JiYpOworCisgICAgLy8gQ01CYXNlQ2xhc3MKKyAgICBTdHJpbmcgZGVi
dWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJXZWJLaXQ6Ok1lZGlhRm9ybWF0
UmVhZGVyIl9zOyB9CisgICAgT1NTdGF0dXMgY29weVByb3BlcnR5KENGU3RyaW5nUmVmLCBDRkFs
bG9jYXRvclJlZiwgdm9pZCogY29waWVkVmFsdWUpIGZpbmFsOworCisgICAgLy8gV3JhcHBlckNs
YXNzCisgICAgT1NTdGF0dXMgY29weVRyYWNrQXJyYXkoQ0ZBcnJheVJlZiopOworCisgICAgUmV0
YWluUHRyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZj4gbV9ieXRlU291cmNlOworICAgIENvbmRpdGlv
biBtX3BhcnNlVHJhY2tzQ29uZGl0aW9uOworICAgIExvY2sgbV9wYXJzZVRyYWNrc0xvY2s7Cisg
ICAgTWVkaWFUaW1lIG1fZHVyYXRpb247CisgICAgT3B0aW9uYWw8T1NTdGF0dXM+IG1fcGFyc2VU
cmFja3NTdGF0dXM7CisgICAgVmVjdG9yPFJlZjxNZWRpYVRyYWNrUmVhZGVyPj4gbV90cmFja1Jl
YWRlcnM7Cit9OworCitjb25zdGV4cHIgTWVkaWFGb3JtYXRSZWFkZXI6OldyYXBwZXJDbGFzcyBN
ZWRpYUZvcm1hdFJlYWRlcjo6d3JhcHBlckNsYXNzKCkKK3sKKyAgICByZXR1cm4geworICAgICAg
ICAudmVyc2lvbiA9IGtNVFBsdWdpbkZvcm1hdFJlYWRlcl9DbGFzc1ZlcnNpb25fMSwKKyAgICAg
ICAgLmNvcHlUcmFja0FycmF5ID0gW10oV3JhcHBlclJlZiByZWFkZXIsIENGQXJyYXlSZWYqIHRy
YWNrQXJyYXlDb3B5KSB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFwKHJlYWRlciktPmNvcHlU
cmFja0FycmF5KHRyYWNrQXJyYXlDb3B5KTsKKyAgICAgICAgfSwKKyAgICB9OworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTJmNjA0
OWM5ZDA2MWU4NzE4MWE0ZTFmN2U0Y2I5ODk3ZDY2NmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJh
bmdlLmNwcApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlQnl0ZVJhbmdlLmgiCisKKyNpZiBFTkFCTEUoV0VCTV9G
T1JNQVRfUkVBREVSKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFBB
TDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6TWVk
aWFTYW1wbGVCeXRlUmFuZ2UoTWVkaWFTYW1wbGUmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNl
UmVmIGJ5dGVTb3VyY2UsIHVpbnQ2NF90IHRyYWNrSUQpCisgICAgOiBNZWRpYVNhbXBsZUFWRk9i
akMobnVsbHB0cikKKyAgICAsIG1fcHJlc2VudGF0aW9uVGltZShzYW1wbGUucHJlc2VudGF0aW9u
VGltZSgpKQorICAgICwgbV9kZWNvZGVUaW1lKHNhbXBsZS5kZWNvZGVUaW1lKCkpCisgICAgLCBt
X2R1cmF0aW9uKHNhbXBsZS5kdXJhdGlvbigpKQorICAgICwgbV9zaXplSW5CeXRlcyhzYW1wbGUu
c2l6ZUluQnl0ZXMoKSkKKyAgICAsIG1fcHJlc2VudGF0aW9uU2l6ZShzYW1wbGUucHJlc2VudGF0
aW9uU2l6ZSgpKQorICAgICwgbV9mbGFncyhzYW1wbGUuZmxhZ3MoKSkKKyAgICAsIG1fdHJhY2tJ
RCh0cmFja0lEKQorICAgICwgbV9ieXRlUmFuZ2Uoc2FtcGxlLmJ5dGVSYW5nZSgpKQorICAgICwg
bV9ieXRlU291cmNlKGJ5dGVTb3VyY2UpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CisgICAgYXV0byBwbGF0Zm9ybVNhbXBsZSA9IHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpOworICAg
IHN3aXRjaCAocGxhdGZvcm1TYW1wbGUudHlwZSkgeworICAgIGNhc2UgUGxhdGZvcm1TYW1wbGU6
OkNNU2FtcGxlQnVmZmVyVHlwZToKKyAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbiA9IENNU2Ft
cGxlQnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24ocGxhdGZvcm1TYW1wbGUuc2FtcGxlLmNtU2Ft
cGxlQnVmZmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybVNhbXBsZTo6Qnl0
ZVJhbmdlU2FtcGxlVHlwZToKKyAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbiA9IHBsYXRmb3Jt
U2FtcGxlLnNhbXBsZS5ieXRlUmFuZ2VTYW1wbGUuc2Vjb25kOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitBdG9tU3RyaW5nIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjp0cmFja0lEKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gQXRvbVN0cmluZzo6bnVtYmVyKG1fdHJhY2tJRCk7Cit9CisK
K1BsYXRmb3JtU2FtcGxlIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpwbGF0Zm9ybVNhbXBsZSgpCit7
CisgICAgcmV0dXJuIHsKKyAgICAgICAgUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5
cGUsCisgICAgICAgIHsgLmJ5dGVSYW5nZVNhbXBsZSA9IHN0ZDo6bWFrZV9wYWlyKG1fYnl0ZVNv
dXJjZS5nZXQoKSwgbV9mb3JtYXREZXNjcmlwdGlvbi5nZXQoKSkgfSwKKyAgICB9OworfQorCit2
b2lkIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFU
aW1lJiBvZmZzZXQpCit7CisgICAgc2V0VGltZXN0YW1wcyhwcmVzZW50YXRpb25UaW1lKCkgKyBv
ZmZzZXQsIGRlY29kZVRpbWUoKSArIG9mZnNldCk7Cit9CisKK3ZvaWQgTWVkaWFTYW1wbGVCeXRl
UmFuZ2U6OnNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBj
b25zdCBNZWRpYVRpbWUmIGRlY29kZVRpbWUpCit7CisgICAgbV9wcmVzZW50YXRpb25UaW1lID0g
cHJlc2VudGF0aW9uVGltZTsKKyAgICBtX2RlY29kZVRpbWUgPSBkZWNvZGVUaW1lOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFE
RVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFk
ZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRp
YUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2NjQ2ZWU4
MjViYWIzMjlhN2UxZGZiZDA3ODE1NzNiMTIwNzViNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFu
Z2UuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQorCisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNhbXBs
ZUFWRk9iakMuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL01lZGlhVG9vbGJveFNQSS5oPgor
I2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBNZWRpYVNhbXBsZUJ5dGVSYW5nZSBmaW5hbCA6
IHB1YmxpYyBXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakMgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8TWVkaWFTYW1wbGVCeXRlUmFuZ2U+IGNyZWF0ZShXZWJDb3JlOjpNZWRpYVNhbXBsZSYg
c2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJ
RCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhU2FtcGxlQnl0ZVJh
bmdlKHNhbXBsZSwgYnl0ZVNvdXJjZSwgdHJhY2tJRCkpOworICAgIH0KKworICAgIE1lZGlhVGlt
ZSBwcmVzZW50YXRpb25UaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcmVzZW50YXRpb25U
aW1lOyB9CisgICAgTWVkaWFUaW1lIGRlY29kZVRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2RlY29kZVRpbWU7IH0KKyAgICBNZWRpYVRpbWUgZHVyYXRpb24oKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2R1cmF0aW9uOyB9CisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQorICAgIEZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXpl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcmVzZW50YXRpb25TaXplOyB9CisgICAgU2FtcGxl
RmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZsYWdzOyB9CisgICAgT3B0aW9u
YWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J5dGVSYW5n
ZTsgfQorCisgICAgQXRvbVN0cmluZyB0cmFja0lEKCkgY29uc3QgZmluYWw7CisgICAgUGxhdGZv
cm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBmaW5hbDsKKyAgICB2b2lkIG9mZnNldFRpbWVzdGFt
cHNCeShjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKKyAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29u
c3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikgZmluYWw7CisKK3ByaXZhdGU6CisgICAg
TWVkaWFTYW1wbGVCeXRlUmFuZ2UoTWVkaWFTYW1wbGUmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYs
IHVpbnQ2NF90IHRyYWNrSUQpOworCisgICAgTWVkaWFUaW1lIG1fcHJlc2VudGF0aW9uVGltZTsK
KyAgICBNZWRpYVRpbWUgbV9kZWNvZGVUaW1lOworICAgIE1lZGlhVGltZSBtX2R1cmF0aW9uOwor
ICAgIHNpemVfdCBtX3NpemVJbkJ5dGVzOworICAgIEZsb2F0U2l6ZSBtX3ByZXNlbnRhdGlvblNp
emU7CisgICAgU2FtcGxlRmxhZ3MgbV9mbGFnczsKKyAgICB1aW50NjRfdCBtX3RyYWNrSUQ7Cisg
ICAgT3B0aW9uYWw8Qnl0ZVJhbmdlPiBtX2J5dGVSYW5nZTsKKyAgICBSZXRhaW5QdHI8TVRQbHVn
aW5CeXRlU291cmNlUmVmPiBtX2J5dGVTb3VyY2U7CisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVD
dXJzb3IuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01l
ZGlhU2FtcGxlQ3Vyc29yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZGI5MjBiZjYxNTEzMjBmY2IyMTUzZTNh
Y2Q1ODc2MWVlOGNlZjgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcApAQCAtMCwwICsxLDM2
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYVNh
bXBsZUN1cnNvci5oIgorCisjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKKworI2luY2x1
ZGUgIk1lZGlhVHJhY2tSZWFkZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2FtcGxlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TYW1wbGVNYXAuaD4KKyNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0
aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFu
ZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFu
dC5oPgorCisjaW5jbHVkZSA8cGFsL2NvY29hL01lZGlhVG9vbGJveFNvZnRMaW5rLmg+CisKK1dU
Rl9ERUNMQVJFX0NGX1RZUEVfVFJBSVQoTVRQbHVnaW5TYW1wbGVDdXJzb3IpOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFBBTDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitzdGF0aWMgT3B0aW9uYWw8TWVkaWFTYW1wbGVDdXJzb3I6OkRlY29kZU9yZGVySXRl
cmF0b3I+IG1ha2VJdGVyYXRvcihjb25zdCBNZWRpYVNhbXBsZUN1cnNvcjo6RGVjb2RlZFNhbXBs
ZSYgZGVjb2RlZFNhbXBsZSwgU2FtcGxlTWFwJiBzYW1wbGVzLCBib29sIGhhc0FsbFNhbXBsZXMp
Cit7CisgICAgYXV0byYgZGVjb2RlT3JkZXIgPSBzYW1wbGVzLmRlY29kZU9yZGVyKCk7CisgICAg
c3dpdGNoIChkZWNvZGVkU2FtcGxlKSB7CisgICAgY2FzZSBNZWRpYVNhbXBsZUN1cnNvcjo6RGVj
b2RlZFNhbXBsZTo6Rmlyc3Q6CisgICAgICAgIGlmIChzYW1wbGVzLnNpemUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBkZWNvZGVPcmRlci5iZWdpbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IE1lZGlhU2FtcGxlQ3Vyc29yOjpEZWNvZGVkU2FtcGxlOjpMYXN0OgorICAgICAgICBpZiAoc2Ft
cGxlcy5zaXplKCkgJiYgaGFzQWxsU2FtcGxlcykKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnBy
ZXYoZGVjb2RlT3JkZXIuZW5kKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIE9wdGlvbmFsPE1lZGlhU2FtcGxlQ3Vyc29yOjpE
ZWNvZGVPcmRlckl0ZXJhdG9yPiBtYWtlSXRlcmF0b3IoY29uc3QgTWVkaWFTYW1wbGVDdXJzb3I6
OlByZXNlbnRhdGlvbk9yZGVySXRlcmF0b3ImIGl0ZXJhdG9yLCBTYW1wbGVNYXAmIHNhbXBsZXMs
IGJvb2wpCit7CisgICAgTWVkaWFTYW1wbGUmIHNhbXBsZSA9ICppdGVyYXRvci0+c2Vjb25kLmdl
dCgpOworICAgIHJldHVybiBzYW1wbGVzLmRlY29kZU9yZGVyKCkuZmluZFNhbXBsZVdpdGhEZWNv
ZGVLZXkoc3RkOjptYWtlX3BhaXIoc2FtcGxlLmRlY29kZVRpbWUoKSwgc2FtcGxlLnByZXNlbnRh
dGlvblRpbWUoKSkpOworfQorCitzdGF0aWMgT3B0aW9uYWw8TWVkaWFTYW1wbGVDdXJzb3I6OlBy
ZXNlbnRhdGlvbk9yZGVySXRlcmF0b3I+IG1ha2VJdGVyYXRvcihjb25zdCBNZWRpYVRpbWUmIHBy
ZXNlbnRhdGlvblRpbWUsIFNhbXBsZU1hcCYgc2FtcGxlcywgYm9vbCBoYXNBbGxTYW1wbGVzKQor
eworICAgIGF1dG8mIHByZXNlbnRhdGlvbk9yZGVyID0gc2FtcGxlcy5wcmVzZW50YXRpb25PcmRl
cigpOworICAgIGF1dG8gaXRlcmF0b3IgPSBwcmVzZW50YXRpb25PcmRlci5maW5kU2FtcGxlQ29u
dGFpbmluZ09yQWZ0ZXJQcmVzZW50YXRpb25UaW1lKHByZXNlbnRhdGlvblRpbWUpOworICAgIGlm
IChpdGVyYXRvciAhPSBwcmVzZW50YXRpb25PcmRlci5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0
ZXJhdG9yOworICAgIGlmIChzYW1wbGVzLnNpemUoKSAmJiBoYXNBbGxTYW1wbGVzKQorICAgICAg
ICByZXR1cm4gc3RkOjpwcmV2KGl0ZXJhdG9yKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCitzdGF0aWMgT3B0aW9uYWw8TWVkaWFTYW1wbGVDdXJzb3I6OlByZXNlbnRhdGlvbk9yZGVy
SXRlcmF0b3I+IG1ha2VJdGVyYXRvcihjb25zdCBNZWRpYVNhbXBsZUN1cnNvcjo6RGVjb2RlT3Jk
ZXJJdGVyYXRvciYgaXRlcmF0b3IsIFNhbXBsZU1hcCYgc2FtcGxlcywgYm9vbCkKK3sKKyAgICBN
ZWRpYVNhbXBsZSYgc2FtcGxlID0gKml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJu
IHNhbXBsZXMucHJlc2VudGF0aW9uT3JkZXIoKS5maW5kU2FtcGxlV2l0aFByZXNlbnRhdGlvblRp
bWUoc2FtcGxlLnByZXNlbnRhdGlvblRpbWUoKSk7Cit9CisKK3N0YXRpYyBNZWRpYVRpbWUgbWFr
ZVRpbWUoY29uc3QgRGVjb2RlT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yJiBpdCkKK3sKKyAgICBy
ZXR1cm4gaXQtPnNlY29uZC0+ZGVjb2RlVGltZSgpOworfQorCitzdGF0aWMgTWVkaWFUaW1lIG1h
a2VUaW1lKGNvbnN0IFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvciYgaXQpCit7
CisgICAgcmV0dXJuIGl0LT5zZWNvbmQtPnByZXNlbnRhdGlvblRpbWUoKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgT3JkZXJlZE1hcD4gc3RhdGljIE9yZGVyZWRNYXAmIG9yZGVyZWRTYW1wbGVz
KFNhbXBsZU1hcCYpOworCit0ZW1wbGF0ZTw+CitEZWNvZGVPcmRlclNhbXBsZU1hcCYgb3JkZXJl
ZFNhbXBsZXMoU2FtcGxlTWFwJiBzYW1wbGVzKQoreworICAgIHJldHVybiBzYW1wbGVzLmRlY29k
ZU9yZGVyKCk7Cit9CisKK3RlbXBsYXRlPD4KK1ByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwJiBv
cmRlcmVkU2FtcGxlcyhTYW1wbGVNYXAmIHNhbXBsZXMpCit7CisgICAgcmV0dXJuIHNhbXBsZXMu
cHJlc2VudGF0aW9uT3JkZXIoKTsKK30KKworc3RhdGljIERlY29kZU9yZGVyU2FtcGxlTWFwOjpp
dGVyYXRvciB1cHBlckJvdW5kKERlY29kZU9yZGVyU2FtcGxlTWFwJiBtYXAsIGNvbnN0IE1lZGlh
VGltZSYgdGltZSkKK3sKKyAgICByZXR1cm4gbWFwLmZpbmRTYW1wbGVBZnRlckRlY29kZUtleShz
dGQ6Om1ha2VfcGFpcih0aW1lLCBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCkpKTsK
K30KKworc3RhdGljIFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvciB1cHBlckJv
dW5kKFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwJiBtYXAsIGNvbnN0IE1lZGlhVGltZSYgdGlt
ZSkKK3sKKyAgICByZXR1cm4gbWFwLmZpbmRTYW1wbGVTdGFydGluZ0FmdGVyUHJlc2VudGF0aW9u
VGltZSh0aW1lKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3JkZXJlZE1hcCwgdHlwZW5hbWUg
U3RlcD4gc3RhdGljIFN0ZXAgc3RlcEl0ZXJhdG9yKFN0ZXAsIHR5cGVuYW1lIE9yZGVyZWRNYXA6
Oml0ZXJhdG9yJiwgT3JkZXJlZE1hcCYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcmRlcmVkTWFw
PgoraW50NjRfdCBzdGVwSXRlcmF0b3IoaW50NjRfdCBzdGVwc1JlbWFpbmluZywgdHlwZW5hbWUg
T3JkZXJlZE1hcDo6aXRlcmF0b3ImIGl0ZXJhdG9yLCBPcmRlcmVkTWFwJiBzYW1wbGVzKQorewor
ICAgIEFTU0VSVChpdGVyYXRvciAhPSBzYW1wbGVzLmVuZCgpKTsKKyAgICBpZiAoc3RlcHNSZW1h
aW5pbmcgPCAwKQorICAgICAgICBmb3IgKDsgc3RlcHNSZW1haW5pbmcgJiYgaXRlcmF0b3IgIT0g
c2FtcGxlcy5iZWdpbigpOyArK3N0ZXBzUmVtYWluaW5nLCAtLWl0ZXJhdG9yKSB7IH0KKyAgICBl
bHNlCisgICAgICAgIGZvciAoYXV0byBuZXh0ID0gc3RkOjpuZXh0KGl0ZXJhdG9yKTsgc3RlcHNS
ZW1haW5pbmcgJiYgbmV4dCAhPSBzYW1wbGVzLmVuZCgpOyAtLXN0ZXBzUmVtYWluaW5nLCBpdGVy
YXRvciA9IG5leHQrKykgeyB9CisgICAgcmV0dXJuIHN0ZXBzUmVtYWluaW5nOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBPcmRlcmVkTWFwPgorTWVkaWFUaW1lIHN0ZXBJdGVyYXRvcihNZWRpYVRp
bWUgZGVsdGFSZW1haW5pbmcsIHR5cGVuYW1lIE9yZGVyZWRNYXA6Oml0ZXJhdG9yJiBpdGVyYXRv
ciwgT3JkZXJlZE1hcCYgc2FtcGxlcykKK3sKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gc2FtcGxl
cy5lbmQoKSk7CisgICAgYXV0byByZXF1ZXN0ZWRUaW1lID0gbWFrZVRpbWUoaXRlcmF0b3IpICsg
ZGVsdGFSZW1haW5pbmc7CisgICAgaXRlcmF0b3IgPSB1cHBlckJvdW5kKHNhbXBsZXMsIHJlcXVl
c3RlZFRpbWUpOworICAgIGlmIChpdGVyYXRvciAhPSBzYW1wbGVzLmJlZ2luKCkpCisgICAgICAg
IC0taXRlcmF0b3I7CisgICAgZGVsdGFSZW1haW5pbmcgPSByZXF1ZXN0ZWRUaW1lIC0gbWFrZVRp
bWUoaXRlcmF0b3IpOworICAgIGlmIChkZWx0YVJlbWFpbmluZyA+IE1lZGlhVGltZTo6emVyb1Rp
bWUoKSAmJiBkZWx0YVJlbWFpbmluZyA8IGl0ZXJhdG9yLT5zZWNvbmQtPmR1cmF0aW9uKCkpCisg
ICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CisgICAgcmV0dXJuIGRlbHRhUmVt
YWluaW5nOworfQorCitDTUJhc2VDbGFzc0lEIE1lZGlhU2FtcGxlQ3Vyc29yOjp3cmFwcGVyQ2xh
c3NJRCgpCit7CisgICAgcmV0dXJuIE1UUGx1Z2luU2FtcGxlQ3Vyc29yR2V0Q2xhc3NJRCgpOwor
fQorCitDb3JlTWVkaWFXcmFwcGVkPE1lZGlhU2FtcGxlQ3Vyc29yPiogTWVkaWFTYW1wbGVDdXJz
b3I6OnVud3JhcChDTUJhc2VPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiB1bndyYXAo
Y2hlY2tlZF9jZl9jYXN0PFdyYXBwZXJSZWY+KG9iamVjdCkpOworfQorCitSZWZQdHI8TWVkaWFT
YW1wbGVDdXJzb3I+IE1lZGlhU2FtcGxlQ3Vyc29yOjpjcmVhdGVBdFByZXNlbnRhdGlvblRpbWUo
QWxsb2NhdG9yJiYgYWxsb2NhdG9yLCBNZWRpYVRyYWNrUmVhZGVyJiB0cmFja1JlYWRlciwgTWVk
aWFUaW1lIHRpbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoYWxsb2NhdG9yKSBNZWRp
YVNhbXBsZUN1cnNvcihXVEZNb3ZlKGFsbG9jYXRvciksIHRyYWNrUmVhZGVyLCBXVEZNb3ZlKHRp
bWUpKSk7Cit9CisKK1JlZlB0cjxNZWRpYVNhbXBsZUN1cnNvcj4gTWVkaWFTYW1wbGVDdXJzb3I6
OmNyZWF0ZUF0RGVjb2RlZFNhbXBsZShBbGxvY2F0b3ImJiBhbGxvY2F0b3IsIE1lZGlhVHJhY2tS
ZWFkZXImIHRyYWNrUmVhZGVyLCBEZWNvZGVkU2FtcGxlIGRlY29kZWRTYW1wbGUpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyAoYWxsb2NhdG9yKSBNZWRpYVNhbXBsZUN1cnNvcihXVEZNb3Zl
KGFsbG9jYXRvciksIHRyYWNrUmVhZGVyLCBXVEZNb3ZlKGRlY29kZWRTYW1wbGUpKSk7Cit9CisK
K1JlZlB0cjxNZWRpYVNhbXBsZUN1cnNvcj4gTWVkaWFTYW1wbGVDdXJzb3I6OmNvcHkoQWxsb2Nh
dG9yJiYgYWxsb2NhdG9yLCBjb25zdCBNZWRpYVNhbXBsZUN1cnNvciYgY3Vyc29yKQoreworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soY3Vyc29yLm1fbG9jYXRvckxvY2spOworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgKGFsbG9jYXRvcikgTWVkaWFTYW1wbGVDdXJzb3IoV1RGTW92ZShhbGxv
Y2F0b3IpLCBjdXJzb3IpKTsKK30KKworTWVkaWFTYW1wbGVDdXJzb3I6Ok1lZGlhU2FtcGxlQ3Vy
c29yKEFsbG9jYXRvciYmIGFsbG9jYXRvciwgTWVkaWFUcmFja1JlYWRlciYgdHJhY2tSZWFkZXIs
IExvY2F0b3IgbG9jYXRvcikKKyAgICA6IENvcmVNZWRpYVdyYXBwZWQoV1RGTW92ZShhbGxvY2F0
b3IpKQorICAgICwgbV90cmFja1JlYWRlcih0cmFja1JlYWRlcikKKyAgICAsIG1fbG9jYXRvcihX
VEZNb3ZlKGxvY2F0b3IpKQoreworfQorCitNZWRpYVNhbXBsZUN1cnNvcjo6TWVkaWFTYW1wbGVD
dXJzb3IoQWxsb2NhdG9yJiYgYWxsb2NhdG9yLCBjb25zdCBNZWRpYVNhbXBsZUN1cnNvciYgY3Vy
c29yKQorICAgIDogQ29yZU1lZGlhV3JhcHBlZChXVEZNb3ZlKGFsbG9jYXRvcikpCisgICAgLCBt
X3RyYWNrUmVhZGVyKGN1cnNvci5tX3RyYWNrUmVhZGVyLmNvcHlSZWYoKSkKKyAgICAsIG1fbG9j
YXRvcihjdXJzb3IubV9sb2NhdG9yKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
cj4KK09wdGlvbmFsPEl0ZXJhdG9yPiBNZWRpYVNhbXBsZUN1cnNvcjo6bG9jYXRlSXRlcmF0b3Io
U2FtcGxlTWFwJiBzYW1wbGVzLCBib29sIGhhc0FsbFNhbXBsZXMpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fbG9jYXRvckxvY2suaXNMb2NrZWQoKSk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bV9sb2NhdG9yLAorICAgICAgICBbJl0oY29uc3QgYXV0byYgbG9jYXRvcikgLT4gT3B0aW9uYWw8
SXRlcmF0b3I+IHsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtYWtlSXRlcmF0b3IobG9j
YXRvciwgc2FtcGxlcywgaGFzQWxsU2FtcGxlcyk7CisgICAgICAgICAgICBpZiAoIWl0ZXJhdG9y
KQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBtX2xv
Y2F0b3IgPSBXVEZNb3ZlKCppdGVyYXRvcik7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRlSXRl
cmF0b3I8SXRlcmF0b3I+KHNhbXBsZXMsIGhhc0FsbFNhbXBsZXMpOworICAgICAgICB9LAorICAg
ICAgICBbJl0oY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9yKSB7CisgICAgICAgICAgICByZXR1cm4g
aXRlcmF0b3I7CisgICAgICAgIH0KKyAgICApOworfQorCitNZWRpYVNhbXBsZSogTWVkaWFTYW1w
bGVDdXJzb3I6OmxvY2F0ZU1lZGlhU2FtcGxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9sb2Nh
dG9yTG9jay5pc0xvY2tlZCgpKTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2xvY2F0b3Is
CisgICAgICAgIFsmXShjb25zdCBhdXRvJiBsb2NhdG9yKSB7CisgICAgICAgICAgICBtX3RyYWNr
UmVhZGVyLT53YWl0Rm9yU2FtcGxlKFsmXShTYW1wbGVNYXAmIHNhbXBsZXMsIGJvb2wgaGFzQWxs
U2FtcGxlcykgeworICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtYWtlSXRlcmF0b3Io
bG9jYXRvciwgc2FtcGxlcywgaGFzQWxsU2FtcGxlcyk7CisgICAgICAgICAgICAgICAgaWYgKCFp
dGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0FsbFNhbXBsZXM7CisgICAg
ICAgICAgICAgICAgbV9sb2NhdG9yID0gV1RGTW92ZSgqaXRlcmF0b3IpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gbG9j
YXRlTWVkaWFTYW1wbGUoKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IE1lZGlhU2Ft
cGxlQ3Vyc29yOjpEZWNvZGVPcmRlckl0ZXJhdG9yJiBpdGVyYXRvcikgeworICAgICAgICAgICAg
cmV0dXJuIGl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXShj
b25zdCBNZWRpYVNhbXBsZUN1cnNvcjo6UHJlc2VudGF0aW9uT3JkZXJJdGVyYXRvciYgaXRlcmF0
b3IpIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAg
ICB9CisgICAgKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3JkZXJlZE1hcCwgdHlwZW5hbWUg
U3RlcD4KK1N0ZXAgTWVkaWFTYW1wbGVDdXJzb3I6OnN0ZXBJbk9yZGVyZWRNYXAoU3RlcCBzdGVw
c1JlbWFpbmluZykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jYXRvckxvY2sp
OworICAgIG1fdHJhY2tSZWFkZXItPndhaXRGb3JTYW1wbGUoWyZdKFNhbXBsZU1hcCYgc2FtcGxl
cywgYm9vbCBoYXNBbGxTYW1wbGVzKSB7CisgICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbG9j
YXRlSXRlcmF0b3I8dHlwZW5hbWUgT3JkZXJlZE1hcDo6aXRlcmF0b3I+KHNhbXBsZXMsIGhhc0Fs
bFNhbXBsZXMpKSB7CisgICAgICAgICAgICBzdGVwc1JlbWFpbmluZyA9IHN0ZXBJdGVyYXRvcihz
dGVwc1JlbWFpbmluZywgKml0ZXJhdG9yLCBvcmRlcmVkU2FtcGxlczxPcmRlcmVkTWFwPihzYW1w
bGVzKSk7CisgICAgICAgICAgICBtX2xvY2F0b3IgPSBXVEZNb3ZlKCppdGVyYXRvcik7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGhhc0FsbFNhbXBsZXMgfHwgIXN0ZXBzUmVtYWluaW5nOwor
ICAgIH0pOworICAgIHJldHVybiBzdGVwc1JlbWFpbmluZzsKK30KKworT1NTdGF0dXMgTWVkaWFT
YW1wbGVDdXJzb3I6OmdldE1lZGlhU2FtcGxlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoTWVkaWFT
YW1wbGUmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jYXRvckxvY2spOworICAgIGF1dG8gc2FtcGxlID0gbG9jYXRlTWVkaWFT
YW1wbGUoKTsKKyAgICBpZiAoIXNhbXBsZSkKKyAgICAgICAgcmV0dXJuIGtNVFBsdWdpblNhbXBs
ZUN1cnNvckVycm9yX05vU2FtcGxlczsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigqc2FtcGxlKTsK
KyAgICByZXR1cm4gbm9FcnI7Cit9CisKK09TU3RhdHVzIE1lZGlhU2FtcGxlQ3Vyc29yOjpjb3B5
UHJvcGVydHkoQ0ZTdHJpbmdSZWYsIENGQWxsb2NhdG9yUmVmLCB2b2lkKikKK3sKKyAgICByZXR1
cm4ga0NNQmFzZU9iamVjdEVycm9yX1ZhbHVlTm90QXZhaWxhYmxlOworfQorCitPU1N0YXR1cyBN
ZWRpYVNhbXBsZUN1cnNvcjo6Y29weShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogc2FtcGxlQ3Vy
c29yKSBjb25zdAoreworICAgICpzYW1wbGVDdXJzb3IgPSBNZWRpYVNhbXBsZUN1cnNvcjo6Y29w
eShhbGxvY2F0b3IoKSwgKnRoaXMpLmxlYWtSZWYoKS0+d3JhcHBlcigpOworICAgIHJldHVybiBu
b0VycjsKK30KKworT1NTdGF0dXMgTWVkaWFTYW1wbGVDdXJzb3I6OnN0ZXBJbkRlY29kZU9yZGVy
QW5kUmVwb3J0U3RlcHNUYWtlbihpbnQ2NF90IHN0ZXBzVG9UYWtlLCBpbnQ2NF90KiBzdGVwc1Rh
a2VuKQoreworICAgIGF1dG8gc3RlcHNSZW1haW5pbmcgPSBzdGVwSW5PcmRlcmVkTWFwPERlY29k
ZU9yZGVyU2FtcGxlTWFwPihzdGVwc1RvVGFrZSk7CisgICAgKnN0ZXBzVGFrZW4gPSBzdGVwc1Rv
VGFrZSAtIHN0ZXBzUmVtYWluaW5nOworICAgIHJldHVybiBub0VycjsKK30KKworT1NTdGF0dXMg
TWVkaWFTYW1wbGVDdXJzb3I6OnN0ZXBJblByZXNlbnRhdGlvbk9yZGVyQW5kUmVwb3J0U3RlcHNU
YWtlbihpbnQ2NF90IHN0ZXBzVG9UYWtlLCBpbnQ2NF90KiBzdGVwc1Rha2VuKQoreworICAgIGF1
dG8gc3RlcHNSZW1haW5pbmcgPSBzdGVwSW5PcmRlcmVkTWFwPFByZXNlbnRhdGlvbk9yZGVyU2Ft
cGxlTWFwPihzdGVwc1RvVGFrZSk7CisgICAgKnN0ZXBzVGFrZW4gPSBzdGVwc1RvVGFrZSAtIHN0
ZXBzUmVtYWluaW5nOworICAgIHJldHVybiBub0VycjsKK30KKworT1NTdGF0dXMgTWVkaWFTYW1w
bGVDdXJzb3I6OnN0ZXBCeURlY29kZVRpbWUoQ01UaW1lIHRpbWUsIEJvb2xlYW4qIHdhc1Bpbm5l
ZCkKK3sKKyAgICBhdXRvIHRpbWVSZW1haW5pbmcgPSBzdGVwSW5PcmRlcmVkTWFwPERlY29kZU9y
ZGVyU2FtcGxlTWFwPihQQUw6OnRvTWVkaWFUaW1lKHRpbWUpKTsKKyAgICAqd2FzUGlubmVkID0g
ISF0aW1lUmVtYWluaW5nOworICAgIHJldHVybiBub0VycjsKK30KKworT1NTdGF0dXMgTWVkaWFT
YW1wbGVDdXJzb3I6OnN0ZXBCeVByZXNlbnRhdGlvblRpbWUoQ01UaW1lIHRpbWUsIEJvb2xlYW4q
IHdhc1Bpbm5lZCkKK3sKKyAgICBhdXRvIHRpbWVSZW1haW5pbmcgPSBzdGVwSW5PcmRlcmVkTWFw
PFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwPihQQUw6OnRvTWVkaWFUaW1lKHRpbWUpKTsKKyAg
ICAqd2FzUGlubmVkID0gISF0aW1lUmVtYWluaW5nOworICAgIHJldHVybiBub0VycjsKK30KKwor
Q0ZDb21wYXJpc29uUmVzdWx0IE1lZGlhU2FtcGxlQ3Vyc29yOjpjb21wYXJlSW5EZWNvZGVPcmRl
cihNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBvdGhlckN1cnNvclJlZikgY29uc3QKK3sKKyAgICBp
ZiAod3JhcHBlcigpID09IG90aGVyQ3Vyc29yUmVmKQorICAgICAgICByZXR1cm4ga0NGQ29tcGFy
ZUVxdWFsVG87CisKKyAgICBhdXRvIGRlY29kZVRpbWUgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1l
KCk7CisgICAgZ2V0TWVkaWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxlJiBzYW1wbGUpIHsKKyAgICAg
ICAgZGVjb2RlVGltZSA9IHNhbXBsZS5kZWNvZGVUaW1lKCk7CisgICAgfSk7CisKKyAgICBhdXRv
IG90aGVyRGVjb2RlVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICBpZiAoYXV0
byBvdGhlckN1cnNvciA9IHVud3JhcChvdGhlckN1cnNvclJlZikpIHsKKyAgICAgICAgb3RoZXJD
dXJzb3ItPmdldE1lZGlhU2FtcGxlKFsmXShNZWRpYVNhbXBsZSYgc2FtcGxlKSB7CisgICAgICAg
ICAgICBvdGhlckRlY29kZVRpbWUgPSBzYW1wbGUuZGVjb2RlVGltZSgpOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKGRlY29kZVRpbWUuY29tcGFyZShvdGhlckRlY29kZVRpbWUp
KSB7CisgICAgY2FzZSBNZWRpYVRpbWU6Okxlc3NUaGFuOgorICAgICAgICByZXR1cm4ga0NGQ29t
cGFyZUxlc3NUaGFuOworICAgIGNhc2UgTWVkaWFUaW1lOjpFcXVhbFRvOgorICAgICAgICByZXR1
cm4ga0NGQ29tcGFyZUVxdWFsVG87CisgICAgY2FzZSBNZWRpYVRpbWU6OkdyZWF0ZXJUaGFuOgor
ICAgICAgICByZXR1cm4ga0NGQ29tcGFyZUdyZWF0ZXJUaGFuOworICAgIH0KK30KKworT1NTdGF0
dXMgTWVkaWFTYW1wbGVDdXJzb3I6OmdldFNhbXBsZVRpbWluZyhDTVNhbXBsZVRpbWluZ0luZm8q
IHNhbXBsZVRpbWluZykgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0TWVkaWFTYW1wbGUoWyZdKE1l
ZGlhU2FtcGxlJiBzYW1wbGUpIHsKKyAgICAgICAgKnNhbXBsZVRpbWluZyA9IHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBEdXJhdGlvbiBzaG91bGQgYmUgdGhlIGRpZmZlcmVuY2UgaW4gcHJlc2Vu
dGF0aW9uIHRpbWUgYmV0d2VlbiB0aGlzIHNhbXBsZSBhbmQgdGhlIG5leHQgaW4gcHJlc2VudGF0
aW9uIG9yZGVyIChvciB0cmFjayBkdXJhdGlvbiBpZiB0aGlzIGlzIHRoZSBsYXN0IHNhbXBsZSku
CisgICAgICAgICAgICAuZHVyYXRpb24gPSBQQUw6OnRvQ01UaW1lKHNhbXBsZS5kdXJhdGlvbigp
KSwKKyAgICAgICAgICAgIC5wcmVzZW50YXRpb25UaW1lU3RhbXAgPSBQQUw6OnRvQ01UaW1lKHNh
bXBsZS5wcmVzZW50YXRpb25UaW1lKCkpLAorICAgICAgICAgICAgLmRlY29kZVRpbWVTdGFtcCA9
IFBBTDo6dG9DTVRpbWUoc2FtcGxlLmRlY29kZVRpbWUoKSksCisgICAgICAgIH07CisgICAgfSk7
Cit9CisKK09TU3RhdHVzIE1lZGlhU2FtcGxlQ3Vyc29yOjpnZXRTeW5jSW5mbyhNVFBsdWdpblNh
bXBsZUN1cnNvclN5bmNJbmZvKiBzeW5jSW5mbykgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0TWVk
aWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxlJiBzYW1wbGUpIHsKKyAgICAgICAgKnN5bmNJbmZvID0g
eworICAgICAgICAgICAgLmZ1bGxTeW5jID0gc2FtcGxlLmlzU3luYygpCisgICAgICAgIH07Cisg
ICAgfSk7Cit9CisKK09TU3RhdHVzIE1lZGlhU2FtcGxlQ3Vyc29yOjpjb3B5Rm9ybWF0RGVzY3Jp
cHRpb24oQ01Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRpb25PdXQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGdldE1lZGlhU2FtcGxlKFsmXShNZWRpYVNhbXBsZSYgc2FtcGxlKSB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc2FtcGxl
LnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxl
VHlwZSk7CisgICAgICAgICpmb3JtYXREZXNjcmlwdGlvbk91dCA9IHJldGFpblB0cihzYW1wbGUu
cGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZCkubGVha1JlZigp
OworICAgIH0pOworfQorCitPU1N0YXR1cyBNZWRpYVNhbXBsZUN1cnNvcjo6Y29weVNhbXBsZUxv
Y2F0aW9uKE1UUGx1Z2luU2FtcGxlQ3Vyc29yU3RvcmFnZVJhbmdlKiBzdG9yYWdlUmFuZ2UsIE1U
UGx1Z2luQnl0ZVNvdXJjZVJlZiogYnl0ZVNvdXJjZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0
TWVkaWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxlJiBzYW1wbGUpIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50
eXBlID09IFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlKTsKKyAgICAgICAgYXV0
byBieXRlUmFuZ2UgPSAqc2FtcGxlLmJ5dGVSYW5nZSgpOworICAgICAgICAqc3RvcmFnZVJhbmdl
ID0geworICAgICAgICAgICAgLm9mZnNldCA9IENoZWNrZWRJbnQ2NChieXRlUmFuZ2UuYnl0ZU9m
ZnNldCkudW5zYWZlR2V0KCksCisgICAgICAgICAgICAubGVuZ3RoID0gQ2hlY2tlZEludDY0KGJ5
dGVSYW5nZS5ieXRlTGVuZ3RoKS51bnNhZmVHZXQoKSwKKyAgICAgICAgfTsKKyAgICAgICAgKmJ5
dGVTb3VyY2UgPSByZXRhaW5QdHIoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVS
YW5nZVNhbXBsZS5maXJzdCkubGVha1JlZigpOworICAgIH0pOworfQorCitPU1N0YXR1cyBNZWRp
YVNhbXBsZUN1cnNvcjo6Z2V0UGxheWFibGVIb3Jpem9uKENNVGltZSopIGNvbnN0Cit7CisgICAg
cmV0dXJuIGtDTUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5vdEF2YWlsYWJsZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01l
ZGlhU2FtcGxlQ3Vyc29yLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRS
ZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzFhMGE4MDYxMWQ4ODUzN2Jk
MmQ3NWUyY2NjMWI5NGMyMTNhODc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmgKQEAgLTAsMCAr
MSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJNX0ZP
Uk1BVF9SRUFERVIpCisKKyNpbmNsdWRlICJDb3JlTWVkaWFXcmFwcGVkLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9TYW1wbGVNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KKworREVDTEFSRV9DT1JFX01FRElBX1RSQUlUUyhTYW1wbGVDdXJz
b3IpOworCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBrTVRQbHVnaW5TYW1wbGVDdXJzb3Jf
Q2xhc3NWZXJzaW9uXzQgaXMgYXZhaWxhYmxlIGluIFNES3MuCisjaWYgZGVmaW5lZChIQVZFX01U
X1BMVUdJTl9TQU1QTEVfQ1VSU09SX1BMQVlBQkxFX0hPUklaT04pCisjdW5kZWYgSEFWRV9NVF9Q
TFVHSU5fU0FNUExFX0NVUlNPUl9QTEFZQUJMRV9IT1JJWk9OCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgTWVkaWFTYW1wbGU7Cit9OworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgTWVkaWFUcmFja1JlYWRlcjsKKworY2xhc3MgTWVkaWFTYW1wbGVDdXJzb3IgOiBw
dWJsaWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYVNhbXBsZUN1cnNvcj4geworcHVibGljOgorICAg
IHVzaW5nIERlY29kZU9yZGVySXRlcmF0b3IgPSBEZWNvZGVPcmRlclNhbXBsZU1hcDo6aXRlcmF0
b3I7CisgICAgdXNpbmcgUHJlc2VudGF0aW9uT3JkZXJJdGVyYXRvciA9IFByZXNlbnRhdGlvbk9y
ZGVyU2FtcGxlTWFwOjppdGVyYXRvcjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgV3JhcHBlckNs
YXNzIHdyYXBwZXJDbGFzcygpOworICAgIHN0YXRpYyBDTUJhc2VDbGFzc0lEIHdyYXBwZXJDbGFz
c0lEKCk7CisgICAgc3RhdGljIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFTYW1wbGVDdXJzb3I+KiB1
bndyYXAoQ01CYXNlT2JqZWN0UmVmKTsKKworICAgIGVudW0gY2xhc3MgRGVjb2RlZFNhbXBsZSB7
CisgICAgICAgIEZpcnN0LAorICAgICAgICBMYXN0LAorICAgIH07CisKKyAgICBzdGF0aWMgUmVm
UHRyPE1lZGlhU2FtcGxlQ3Vyc29yPiBjb3B5KEFsbG9jYXRvciYmLCBjb25zdCBNZWRpYVNhbXBs
ZUN1cnNvciYpOworICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFTYW1wbGVDdXJzb3I+IGNyZWF0ZUF0
RGVjb2RlZFNhbXBsZShBbGxvY2F0b3ImJiwgTWVkaWFUcmFja1JlYWRlciYsIERlY29kZWRTYW1w
bGUpOworICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFTYW1wbGVDdXJzb3I+IGNyZWF0ZUF0UHJlc2Vu
dGF0aW9uVGltZShBbGxvY2F0b3ImJiwgTWVkaWFUcmFja1JlYWRlciYsIE1lZGlhVGltZSk7CisK
K3ByaXZhdGU6CisgICAgdXNpbmcgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYVNhbXBsZUN1cnNvcj46
OnVud3JhcDsKKyAgICB1c2luZyBMb2NhdG9yID0gVmFyaWFudDxNZWRpYVRpbWUsIERlY29kZWRT
YW1wbGUsIERlY29kZU9yZGVySXRlcmF0b3IsIFByZXNlbnRhdGlvbk9yZGVySXRlcmF0b3I+Owor
CisgICAgTWVkaWFTYW1wbGVDdXJzb3IoQWxsb2NhdG9yJiYsIE1lZGlhVHJhY2tSZWFkZXImLCBM
b2NhdG9yKTsKKyAgICBNZWRpYVNhbXBsZUN1cnNvcihBbGxvY2F0b3ImJiwgY29uc3QgTWVkaWFT
YW1wbGVDdXJzb3ImKTsKKworICAgIFdlYkNvcmU6Ok1lZGlhU2FtcGxlKiBsb2NhdGVNZWRpYVNh
bXBsZSgpIGNvbnN0OworICAgIE9TU3RhdHVzIGdldE1lZGlhU2FtcGxlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoV2ViQ29yZTo6TWVkaWFTYW1wbGUmKT4mJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSXRlcmF0b3I+IE9wdGlvbmFsPEl0ZXJhdG9yPiBsb2NhdGVJdGVyYXRvcihTYW1w
bGVNYXAmLCBib29sIGhhc0FsbFNhbXBsZXMpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3JkZXJlZE1hcCwgdHlwZW5hbWUgU3RlcD4gU3RlcCBzdGVwSW5PcmRlcmVkTWFwKFN0ZXAp
OworCisgICAgLy8gQ29yZU1lZGlhV3JhcHBlZAorICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9u
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIldlYktpdDo6TWVkaWFTYW1wbGVDdXJzb3IiX3M7IH0K
KyAgICBPU1N0YXR1cyBjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYsIENGQWxsb2NhdG9yUmVmLCB2
b2lkKiBjb3BpZWRWYWx1ZSkgZmluYWw7CisKKyAgICAvLyBXcmFwcGVyQ2xhc3MKKyAgICBPU1N0
YXR1cyBjb3B5KE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKikgY29uc3Q7CisgICAgT1NTdGF0dXMg
c3RlcEluRGVjb2RlT3JkZXJBbmRSZXBvcnRTdGVwc1Rha2VuKGludDY0X3QsIGludDY0X3QqKTsK
KyAgICBPU1N0YXR1cyBzdGVwSW5QcmVzZW50YXRpb25PcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4o
aW50NjRfdCwgaW50NjRfdCopOworICAgIE9TU3RhdHVzIHN0ZXBCeURlY29kZVRpbWUoQ01UaW1l
LCBCb29sZWFuKik7CisgICAgT1NTdGF0dXMgc3RlcEJ5UHJlc2VudGF0aW9uVGltZShDTVRpbWUs
IEJvb2xlYW4qKTsKKyAgICBDRkNvbXBhcmlzb25SZXN1bHQgY29tcGFyZUluRGVjb2RlT3JkZXIo
TVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYpIGNvbnN0OworICAgIE9TU3RhdHVzIGdldFNhbXBsZVRp
bWluZyhDTVNhbXBsZVRpbWluZ0luZm8qKSBjb25zdDsKKyAgICBPU1N0YXR1cyBnZXRTeW5jSW5m
byhNVFBsdWdpblNhbXBsZUN1cnNvclN5bmNJbmZvKikgY29uc3Q7CisgICAgT1NTdGF0dXMgY29w
eUZvcm1hdERlc2NyaXB0aW9uKENNRm9ybWF0RGVzY3JpcHRpb25SZWYqKSBjb25zdDsKKyAgICBP
U1N0YXR1cyBjb3B5U2FtcGxlTG9jYXRpb24oTVRQbHVnaW5TYW1wbGVDdXJzb3JTdG9yYWdlUmFu
Z2UqLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYqKSBjb25zdDsKKyAgICBPU1N0YXR1cyBnZXRQbGF5
YWJsZUhvcml6b24oQ01UaW1lKikgY29uc3Q7CisKKyAgICBSZWY8TWVkaWFUcmFja1JlYWRlcj4g
bV90cmFja1JlYWRlcjsKKyAgICBtdXRhYmxlIExvY2F0b3IgbV9sb2NhdG9yOworICAgIG11dGFi
bGUgTG9jayBtX2xvY2F0b3JMb2NrOworfTsKKworY29uc3RleHByIE1lZGlhU2FtcGxlQ3Vyc29y
OjpXcmFwcGVyQ2xhc3MgTWVkaWFTYW1wbGVDdXJzb3I6OndyYXBwZXJDbGFzcygpCit7CisgICAg
cmV0dXJuIHsKKyNpZiBIQVZFKE1UX1BMVUdJTl9TQU1QTEVfQ1VSU09SX1BMQVlBQkxFX0hPUkla
T04pCisgICAgICAgIC52ZXJzaW9uID0ga01UUGx1Z2luU2FtcGxlQ3Vyc29yX0NsYXNzVmVyc2lv
bl80LAorI2Vsc2UKKyAgICAgICAgLnZlcnNpb24gPSBrTVRQbHVnaW5TYW1wbGVDdXJzb3JfQ2xh
c3NWZXJzaW9uXzMsCisjZW5kaWYKKyAgICAgICAgLmNvcHkgPSBbXShNVFBsdWdpblNhbXBsZUN1
cnNvclJlZiBzYW1wbGVDdXJzb3IsIE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKiBzYW1wbGVDdXJz
b3JDb3B5KSB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPmNvcHko
c2FtcGxlQ3Vyc29yQ29weSk7CisgICAgICAgIH0sCisgICAgICAgIC5zdGVwSW5EZWNvZGVPcmRl
ckFuZFJlcG9ydFN0ZXBzVGFrZW4gPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVD
dXJzb3IsIGludDY0X3Qgc3RlcENvdW50LCBpbnQ2NF90KiBzdGVwc1Rha2VuKSB7CisgICAgICAg
ICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPnN0ZXBJbkRlY29kZU9yZGVyQW5kUmVw
b3J0U3RlcHNUYWtlbihzdGVwQ291bnQsIHN0ZXBzVGFrZW4pOworICAgICAgICB9LAorICAgICAg
ICAuc3RlcEluUHJlc2VudGF0aW9uT3JkZXJBbmRSZXBvcnRTdGVwc1Rha2VuID0gW10oTVRQbHVn
aW5TYW1wbGVDdXJzb3JSZWYgc2FtcGxlQ3Vyc29yLCBpbnQ2NF90IHN0ZXBDb3VudCwgaW50NjRf
dCogc3RlcHNUYWtlbikgeworICAgICAgICAgICAgcmV0dXJuIHVud3JhcChzYW1wbGVDdXJzb3Ip
LT5zdGVwSW5QcmVzZW50YXRpb25PcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4oc3RlcENvdW50LCBz
dGVwc1Rha2VuKTsKKyAgICAgICAgfSwKKyAgICAgICAgLnN0ZXBCeURlY29kZVRpbWUgPSBbXShN
VFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIENNVGltZSBkZWx0YURlY29kZVRp
bWUsIEJvb2xlYW4qIHBvc2l0aW9uV2FzUGlubmVkKSB7CisgICAgICAgICAgICByZXR1cm4gdW53
cmFwKHNhbXBsZUN1cnNvciktPnN0ZXBCeURlY29kZVRpbWUoZGVsdGFEZWNvZGVUaW1lLCBwb3Np
dGlvbldhc1Bpbm5lZCk7CisgICAgICAgIH0sCisgICAgICAgIC5zdGVwQnlQcmVzZW50YXRpb25U
aW1lID0gW10oTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYgc2FtcGxlQ3Vyc29yLCBDTVRpbWUgZGVs
dGFQcmVzZW50YXRpb25UaW1lLCBCb29sZWFuKiBwb3NpdGlvbldhc1Bpbm5lZCkgeworICAgICAg
ICAgICAgcmV0dXJuIHVud3JhcChzYW1wbGVDdXJzb3IpLT5zdGVwQnlQcmVzZW50YXRpb25UaW1l
KGRlbHRhUHJlc2VudGF0aW9uVGltZSwgcG9zaXRpb25XYXNQaW5uZWQpOworICAgICAgICB9LAor
ICAgICAgICAuY29tcGFyZUluRGVjb2RlT3JkZXIgPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJl
ZiBzYW1wbGVDdXJzb3IsIE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIG90aGVyU2FtcGxlQ3Vyc29y
KSB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPmNvbXBhcmVJbkRl
Y29kZU9yZGVyKG90aGVyU2FtcGxlQ3Vyc29yKTsKKyAgICAgICAgfSwKKyAgICAgICAgLmdldFNh
bXBsZVRpbWluZyA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgQ01T
YW1wbGVUaW1pbmdJbmZvKiBzYW1wbGVUaW1pbmdJbmZvKSB7CisgICAgICAgICAgICByZXR1cm4g
dW53cmFwKHNhbXBsZUN1cnNvciktPmdldFNhbXBsZVRpbWluZyhzYW1wbGVUaW1pbmdJbmZvKTsK
KyAgICAgICAgfSwKKyAgICAgICAgLmdldFN5bmNJbmZvID0gW10oTVRQbHVnaW5TYW1wbGVDdXJz
b3JSZWYgc2FtcGxlQ3Vyc29yLCBNVFBsdWdpblNhbXBsZUN1cnNvclN5bmNJbmZvKiBzeW5jSW5m
bykgLT4gT1NTdGF0dXMgeworICAgICAgICAgICAgcmV0dXJuIHVud3JhcChzYW1wbGVDdXJzb3Ip
LT5nZXRTeW5jSW5mbyhzeW5jSW5mbyk7CisgICAgICAgIH0sCisgICAgICAgIC5jb3B5Rm9ybWF0
RGVzY3JpcHRpb24gPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIENN
Rm9ybWF0RGVzY3JpcHRpb25SZWYqIGZvcm1hdERlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPmNvcHlGb3JtYXREZXNjcmlwdGlvbihmb3JtYXRE
ZXNjcmlwdGlvbik7CisgICAgICAgIH0sCisgICAgICAgIC5jb3B5U2FtcGxlTG9jYXRpb24gPSBb
XShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIE1UUGx1Z2luU2FtcGxlQ3Vy
c29yU3RvcmFnZVJhbmdlKiBzdG9yYWdlUmFuZ2UsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiogYnl0
ZVNvdXJjZSkgeworICAgICAgICAgICAgcmV0dXJuIHVud3JhcChzYW1wbGVDdXJzb3IpLT5jb3B5
U2FtcGxlTG9jYXRpb24oc3RvcmFnZVJhbmdlLCBieXRlU291cmNlKTsKKyAgICAgICAgfSwKKyNp
ZiBIQVZFKE1UX1BMVUdJTl9TQU1QTEVfQ1VSU09SX1BMQVlBQkxFX0hPUklaT04pCisgICAgICAg
IC5nZXRQbGF5YWJsZUhvcml6b24gPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVD
dXJzb3IsIENNVGltZSogcGxheWFibGVIb3Jpem9uKSB7CisgICAgICAgICAgICByZXR1cm4gdW53
cmFwKHNhbXBsZUN1cnNvciktPmdldFBsYXlhYmxlSG9yaXpvbihwbGF5YWJsZUhvcml6b24pOwor
ICAgICAgICB9LAorI2VuZGlmCisgICAgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tS
ZWFkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiMWNkMWRlMGVmOTAwY2ZlYzA4ZDI4MGY0M2I0ZGVhMjg5
M2E0NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHAKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFUcmFja1JlYWRlci5o
IgorCisjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKKworI2luY2x1ZGUgIk1lZGlhRm9y
bWF0UmVhZGVyLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCIKKyNpbmNsdWRl
ICJNZWRpYVNhbXBsZUN1cnNvci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQXVkaW9UcmFja1ByaXZh
dGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luYmFuZFRleHRUcmFja1ByaXZhdGUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL01lZGlhRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NhbXBs
ZU1hcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlkZW9UcmFja1ByaXZhdGUuaD4KKyNpbmNsdWRl
IDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgorCisjaW5jbHVkZSA8
cGFsL2NvY29hL01lZGlhVG9vbGJveFNvZnRMaW5rLmg+CisKK1dURl9ERUNMQVJFX0NGX1RZUEVf
VFJBSVQoTVRQbHVnaW5UcmFja1JlYWRlcik7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2lu
ZyBuYW1lc3BhY2UgUEFMOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0NNQmFzZUNsYXNz
SUQgTWVkaWFUcmFja1JlYWRlcjo6d3JhcHBlckNsYXNzSUQoKQoreworICAgIHJldHVybiBNVFBs
dWdpblRyYWNrUmVhZGVyR2V0Q2xhc3NJRCgpOworfQorCitDb3JlTWVkaWFXcmFwcGVkPE1lZGlh
VHJhY2tSZWFkZXI+KiBNZWRpYVRyYWNrUmVhZGVyOjp1bndyYXAoQ01CYXNlT2JqZWN0UmVmIG9i
amVjdCkKK3sKKyAgICByZXR1cm4gdW53cmFwKGNoZWNrZWRfY2ZfY2FzdDxXcmFwcGVyUmVmPihv
YmplY3QpKTsKK30KKworUmVmUHRyPE1lZGlhVHJhY2tSZWFkZXI+IE1lZGlhVHJhY2tSZWFkZXI6
OmNyZWF0ZShBbGxvY2F0b3ImJiBhbGxvY2F0b3IsIGNvbnN0IE1lZGlhRm9ybWF0UmVhZGVyJiBm
b3JtYXRSZWFkZXIsIENNTWVkaWFUeXBlIG1lZGlhVHlwZSwgdWludDY0X3QgdHJhY2tJRCwgT3B0
aW9uYWw8Ym9vbD4gZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IChhbGxvY2F0
b3IpIE1lZGlhVHJhY2tSZWFkZXIoV1RGTW92ZShhbGxvY2F0b3IpLCBmb3JtYXRSZWFkZXIsIG1l
ZGlhVHlwZSwgdHJhY2tJRCwgZW5hYmxlZCkpOworfQorCitXb3JrUXVldWUmIE1lZGlhVHJhY2tS
ZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpCit7CisgICAgc3RhdGljIGF1dG8mIHF1ZXVlID0gV29ya1F1
ZXVlOjpjcmVhdGUoIldlYktpdDo6TWVkaWFUcmFja1JlYWRlciBTdG9yYWdlIFF1ZXVlIiwgV29y
a1F1ZXVlOjpUeXBlOjpTZXJpYWwpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisK
K01lZGlhVHJhY2tSZWFkZXI6Ok1lZGlhVHJhY2tSZWFkZXIoQWxsb2NhdG9yJiYgYWxsb2NhdG9y
LCBjb25zdCBNZWRpYUZvcm1hdFJlYWRlciYgZm9ybWF0UmVhZGVyLCBDTU1lZGlhVHlwZSBtZWRp
YVR5cGUsIHVpbnQ2NF90IHRyYWNrSUQsIE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCisgICAgOiBD
b3JlTWVkaWFXcmFwcGVkKFdURk1vdmUoYWxsb2NhdG9yKSkKKyAgICAsIG1fdHJhY2tJRCh0cmFj
a0lEKQorICAgICwgbV9tZWRpYVR5cGUobWVkaWFUeXBlKQorICAgICwgbV9kdXJhdGlvbihmb3Jt
YXRSZWFkZXIuZHVyYXRpb24oKSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKwor
ICAgIGlmIChlbmFibGVkKQorICAgICAgICBtX2lzRW5hYmxlZCA9IGVuYWJsZWQudmFsdWUoKSA/
IEVuYWJsZWQ6OlRydWUgOiBFbmFibGVkOjpGYWxzZTsKK30KKwordm9pZCBNZWRpYVRyYWNrUmVh
ZGVyOjphZGRTYW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291
cmNlUmVmIGJ5dGVTb3VyY2UpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZVN0b3JhZ2VMb2NrKTsKKyAgICBpZiAoIW1f
c2FtcGxlU3RvcmFnZSkKKyAgICAgICAgbV9zYW1wbGVTdG9yYWdlID0gbWFrZVVuaXF1ZTxTYW1w
bGVTdG9yYWdlPigpOworCisgICAgQVNTRVJUKCFzYW1wbGUtPmlzRGl2aXNhYmxlKCkgJiYgc2Ft
cGxlLT5ieXRlUmFuZ2UoKSk7CisgICAgYXV0byBzYW1wbGVUb0FkZCA9IE1lZGlhU2FtcGxlQnl0
ZVJhbmdlOjpjcmVhdGUoc2FtcGxlLmdldCgpLCBieXRlU291cmNlLCBtX3RyYWNrSUQpOworCisg
ICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIFdlYk0gbXV4ZXIgZ3VpZGVsaW5lcyBzYXkgdGhpcyBt
dXN0IG5vdCBoYXBwZW4sIHNvbWUgdmlkZW8gdHJhY2tzIGhhdmUgdHdvCisgICAgLy8gY29uc2Vj
dXRpdmUgZnJhbWVzIHdpdGggdGhlIHNhbWUgcHJlc2VudGF0aW9uIHRpbWUuIFNhbXBsZU1hcCB3
aWxsIG5vdCBzdG9yZSB0aGUgc2Vjb25kIGZyYW1lCisgICAgLy8gaW4gdGhlc2UgY2FzZXMsIGNv
cnJ1cHRpbmcgYWxsIHN1YnNlcXVlbnQgbm9uLWtleSBmcmFtZXMuIEZpbmQgYSB3YXkgdG8gc3Rv
cmUgZnJhbWVzIHdpdGgKKyAgICAvLyBkdXBsaWNhdGUgcHJlc2VudGF0aW9uIHRpbWVzLgorCisg
ICAgbV9zYW1wbGVTdG9yYWdlLT5zYW1wbGVNYXAuYWRkU2FtcGxlKHNhbXBsZVRvQWRkLmdldCgp
KTsKKyAgICBtX3NhbXBsZVN0b3JhZ2VDb25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQg
TWVkaWFUcmFja1JlYWRlcjo6d2FpdEZvclNhbXBsZShGdW5jdGlvbjxib29sKFNhbXBsZU1hcCYs
IGJvb2wpPiYmIHByZWRpY2F0ZSkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fc2FtcGxlU3RvcmFnZUxvY2spOworICAgIGlmICghbV9zYW1wbGVTdG9yYWdlKQorICAgICAg
ICBtX3NhbXBsZVN0b3JhZ2UgPSBtYWtlVW5pcXVlPFNhbXBsZVN0b3JhZ2U+KCk7CisgICAgbV9z
YW1wbGVTdG9yYWdlQ29uZGl0aW9uLndhaXQobV9zYW1wbGVTdG9yYWdlTG9jaywgW3ByZWRpY2F0
ZSA9IFdURk1vdmUocHJlZGljYXRlKSwgdGhpc10geworICAgICAgICByZXR1cm4gcHJlZGljYXRl
KG1fc2FtcGxlU3RvcmFnZS0+c2FtcGxlTWFwLCBtX3NhbXBsZVN0b3JhZ2UtPmhhc0FsbFNhbXBs
ZXMpOworICAgIH0pOworfQorCit2b2lkIE1lZGlhVHJhY2tSZWFkZXI6OmZpbmlzaFBhcnNpbmco
KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9zYW1wbGVTdG9yYWdlTG9jayk7CisgICAgaWYgKCFtX3NhbXBsZVN0b3JhZ2UpCisg
ICAgICAgIG1fc2FtcGxlU3RvcmFnZSA9IG1ha2VVbmlxdWU8U2FtcGxlU3RvcmFnZT4oKTsKKyAg
ICBtX3NhbXBsZVN0b3JhZ2UtPmhhc0FsbFNhbXBsZXMgPSB0cnVlOworICAgIGlmIChtX2lzRW5h
YmxlZCA9PSBFbmFibGVkOjpVbmtub3duKQorICAgICAgICBtX2lzRW5hYmxlZCA9IG1fc2FtcGxl
U3RvcmFnZS0+c2FtcGxlTWFwLmVtcHR5KCkgPyBFbmFibGVkOjpGYWxzZSA6IEVuYWJsZWQ6OlRy
dWU7CisgICAgbV9zYW1wbGVTdG9yYWdlQ29uZGl0aW9uLm5vdGlmeUFsbCgpOworfQorCitPU1N0
YXR1cyBNZWRpYVRyYWNrUmVhZGVyOjpjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYga2V5LCBDRkFs
bG9jYXRvclJlZiBhbGxvY2F0b3IsIHZvaWQqIGNvcGllZFZhbHVlKQoreworICAgIC8vIERvbid0
IGJsb2NrIHdhaXRpbmcgZm9yIG1lZGlhIGlmIHRoZSB3ZSBrbm93IHRoZSBlbmFibGVkIHN0YXRl
LgorICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpnZXRfTWVkaWFUb29sYm94X2tNVFBsdWdpblRy
YWNrUmVhZGVyUHJvcGVydHlfRW5hYmxlZCgpKSAmJiBtX2lzRW5hYmxlZCAhPSBFbmFibGVkOjpV
bmtub3duKSB7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PENGQm9vbGVhblJlZio+KGNvcGll
ZFZhbHVlKSA9IHJldGFpblB0cihtX2lzRW5hYmxlZCA9PSBFbmFibGVkOjpUcnVlID8ga0NGQm9v
bGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2UpLmxlYWtSZWYoKTsKKyAgICAgICAgcmV0dXJuIG5v
RXJyOworICAgIH0KKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVTdG9yYWdl
TG9jayk7CisgICAgbV9zYW1wbGVTdG9yYWdlQ29uZGl0aW9uLndhaXQobV9zYW1wbGVTdG9yYWdl
TG9jaywgWyZdIHsKKyAgICAgICAgcmV0dXJuICEhbV9zYW1wbGVTdG9yYWdlOworICAgIH0pOwor
CisgICAgYXV0byYgc2FtcGxlTWFwID0gbV9zYW1wbGVTdG9yYWdlLT5zYW1wbGVNYXA7CisKKyAg
ICBpZiAoQ0ZFcXVhbChrZXksIFBBTDo6Z2V0X01lZGlhVG9vbGJveF9rTVRQbHVnaW5UcmFja1Jl
YWRlclByb3BlcnR5X0VuYWJsZWQoKSkpIHsKKyAgICAgICAgaWYgKG1faXNFbmFibGVkID09IEVu
YWJsZWQ6OlVua25vd24pCisgICAgICAgICAgICBtX2lzRW5hYmxlZCA9IHNhbXBsZU1hcC5lbXB0
eSgpID8gRW5hYmxlZDo6RmFsc2UgOiBFbmFibGVkOjpUcnVlOworCisgICAgICAgICpyZWludGVy
cHJldF9jYXN0PENGQm9vbGVhblJlZio+KGNvcGllZFZhbHVlKSA9IHJldGFpblB0cihtX2lzRW5h
YmxlZCA9PSBFbmFibGVkOjpUcnVlID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2Up
LmxlYWtSZWYoKTsKKyAgICAgICAgcmV0dXJuIG5vRXJyOworICAgIH0KKworICAgIGlmIChzYW1w
bGVNYXAuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGtDTUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5v
dEF2YWlsYWJsZTsKKworICAgIGF1dG8mIGxhc3RTYW1wbGUgPSAqc2FtcGxlTWFwLmRlY29kZU9y
ZGVyKCkucmJlZ2luKCktPnNlY29uZDsKKworICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpnZXRf
TWVkaWFUb29sYm94X2tNVFBsdWdpblRyYWNrUmVhZGVyUHJvcGVydHlfRm9ybWF0RGVzY3JpcHRp
b25BcnJheSgpKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGxhc3RTYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxl
OjpCeXRlUmFuZ2VTYW1wbGVUeXBlKTsKKyAgICAgICAgY29uc3Qgdm9pZCogZGVzY3JpcHRpb25z
WzFdID0geyBsYXN0U2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBs
ZS5zZWNvbmQgfTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZBcnJheVJlZio+KGNvcGll
ZFZhbHVlKSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZShhbGxvY2F0b3IsIGRlc2NyaXB0aW9ucywg
MSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpLmxlYWtSZWYoKTsKKyAgICAgICAgcmV0dXJuIG5v
RXJyOworICAgIH0KKworICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpnZXRfTWVkaWFUb29sYm94
X2tNVFBsdWdpblRyYWNrUmVhZGVyUHJvcGVydHlfTm9taW5hbEZyYW1lUmF0ZSgpKSkgeworICAg
ICAgICBmbG9hdCBmcmFtZVJhdGUgPSAxIC8gbGFzdFNhbXBsZS5kdXJhdGlvbigpLnRvRmxvYXQo
KTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZOdW1iZXJSZWYqPihjb3BpZWRWYWx1ZSkg
PSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGFsbG9jYXRvciwga0NGTnVtYmVyRmxvYXQzMlR5cGUs
ICZmcmFtZVJhdGUpKS5sZWFrUmVmKCk7CisgICAgICAgIHJldHVybiBub0VycjsKKyAgICB9CisK
KyAgICByZXR1cm4ga0NNQmFzZU9iamVjdEVycm9yX1ZhbHVlTm90QXZhaWxhYmxlOworfQorCit2
b2lkIE1lZGlhVHJhY2tSZWFkZXI6OmZpbmFsaXplKCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2spOworICAgIHN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNo
KFtzYW1wbGVTdG9yYWdlID0gc3RkOjpleGNoYW5nZShtX3NhbXBsZVN0b3JhZ2UsIG51bGxwdHIp
XSgpIG11dGFibGUgeworICAgICAgICBzYW1wbGVTdG9yYWdlID0gbnVsbHB0cjsKKyAgICB9KTsK
KyAgICBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhVHJhY2tSZWFkZXI+OjpmaW5hbGl6ZSgpOworfQor
CitPU1N0YXR1cyBNZWRpYVRyYWNrUmVhZGVyOjpnZXRUcmFja0luZm8oTVRQZXJzaXN0ZW50VHJh
Y2tJRCogdHJhY2tJRCwgQ01NZWRpYVR5cGUqIG1lZGlhVHlwZSkKK3sKKyAgICAqdHJhY2tJRCA9
IG1fdHJhY2tJRDsKKyAgICAqbWVkaWFUeXBlID0gbV9tZWRpYVR5cGU7CisgICAgcmV0dXJuIG5v
RXJyOworfQorCitPU1N0YXR1cyBNZWRpYVRyYWNrUmVhZGVyOjpjcmVhdGVDdXJzb3JBdFByZXNl
bnRhdGlvblRpbWVTdGFtcChDTVRpbWUgdGltZSwgTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqIHNh
bXBsZUN1cnNvcikKK3sKKyAgICAqc2FtcGxlQ3Vyc29yID0gTWVkaWFTYW1wbGVDdXJzb3I6OmNy
ZWF0ZUF0UHJlc2VudGF0aW9uVGltZShhbGxvY2F0b3IoKSwgKnRoaXMsIFBBTDo6dG9NZWRpYVRp
bWUodGltZSkpLmxlYWtSZWYoKS0+d3JhcHBlcigpOworICAgIHJldHVybiBub0VycjsKK30KKwor
T1NTdGF0dXMgTWVkaWFUcmFja1JlYWRlcjo6Y3JlYXRlQ3Vyc29yQXRGaXJzdFNhbXBsZUluRGVj
b2RlT3JkZXIoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqIHNhbXBsZUN1cnNvcikKK3sKKyAgICAq
c2FtcGxlQ3Vyc29yID0gTWVkaWFTYW1wbGVDdXJzb3I6OmNyZWF0ZUF0RGVjb2RlZFNhbXBsZShh
bGxvY2F0b3IoKSwgKnRoaXMsIE1lZGlhU2FtcGxlQ3Vyc29yOjpEZWNvZGVkU2FtcGxlOjpGaXJz
dCkubGVha1JlZigpLT53cmFwcGVyKCk7CisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1
cyBNZWRpYVRyYWNrUmVhZGVyOjpjcmVhdGVDdXJzb3JBdExhc3RTYW1wbGVJbkRlY29kZU9yZGVy
KE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKiBzYW1wbGVDdXJzb3IpCit7CisgICAgKnNhbXBsZUN1
cnNvciA9IE1lZGlhU2FtcGxlQ3Vyc29yOjpjcmVhdGVBdERlY29kZWRTYW1wbGUoYWxsb2NhdG9y
KCksICp0aGlzLCBNZWRpYVNhbXBsZUN1cnNvcjo6RGVjb2RlZFNhbXBsZTo6TGFzdCkubGVha1Jl
ZigpLT53cmFwcGVyKCk7CisgICAgcmV0dXJuIG5vRXJyOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1Jl
YWRlci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlh
VHJhY2tSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMTY1YjQ4ZmRmNzNhNDA0NzQ5MGJmYWVjZjZhZTVi
ODI2M2IwNWZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuaApAQCAtMCwwICsxLDEyNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikK
KworI2luY2x1ZGUgIkNvcmVNZWRpYVdyYXBwZWQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NhbXBs
ZU1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKworREVDTEFSRV9DT1JFX01FRElB
X1RSQUlUUyhUcmFja1JlYWRlcik7CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgV29ya1F1ZXVl
OworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBBdWRpb1RyYWNrUHJpdmF0ZTsKK2Ns
YXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7CitjbGFzcyBNZWRpYVNhbXBsZTsKK2NsYXNzIFRy
YWNrUHJpdmF0ZUJhc2U7CitjbGFzcyBWaWRlb1RyYWNrUHJpdmF0ZTsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIE1lZGlhRm9ybWF0UmVhZGVyOworCitjbGFzcyBNZWRpYVRyYWNr
UmVhZGVyIGZpbmFsIDogcHVibGljIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFUcmFja1JlYWRlcj4g
eworcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgV3JhcHBlckNsYXNzIHdyYXBwZXJDbGFz
cygpOworICAgIHN0YXRpYyBDTUJhc2VDbGFzc0lEIHdyYXBwZXJDbGFzc0lEKCk7CisgICAgc3Rh
dGljIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFUcmFja1JlYWRlcj4qIHVud3JhcChDTUJhc2VPYmpl
Y3RSZWYpOworICAgIHN0YXRpYyBXVEY6OldvcmtRdWV1ZSYgc3RvcmFnZVF1ZXVlKCk7CisKKyAg
ICBzdGF0aWMgUmVmUHRyPE1lZGlhVHJhY2tSZWFkZXI+IGNyZWF0ZShBbGxvY2F0b3ImJiwgY29u
c3QgTWVkaWFGb3JtYXRSZWFkZXImLCBDTU1lZGlhVHlwZSwgdWludDY0X3QsIE9wdGlvbmFsPGJv
b2w+KTsKKworICAgIHVpbnQ2NF90IHRyYWNrSUQoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrSUQ7
IH0KKyAgICB2b2lkIGFkZFNhbXBsZShSZWY8V2ViQ29yZTo6TWVkaWFTYW1wbGU+JiYsIE1UUGx1
Z2luQnl0ZVNvdXJjZVJlZik7CisgICAgdm9pZCB3YWl0Rm9yU2FtcGxlKEZ1bmN0aW9uPGJvb2wo
V2ViQ29yZTo6U2FtcGxlTWFwJiwgYm9vbCk+JiYpIGNvbnN0OworCisgICAgdm9pZCBzZXRFbmFi
bGVkKGJvb2wgZW5hYmxlZCkgeyBtX2lzRW5hYmxlZCA9IGVuYWJsZWQgPyBFbmFibGVkOjpUcnVl
IDogRW5hYmxlZDo6RmFsc2U7IH0KKyAgICBDTU1lZGlhVHlwZSBtZWRpYVR5cGUoKSBjb25zdCB7
IHJldHVybiBtX21lZGlhVHlwZTsgfQorCisgICAgdm9pZCBmaW5pc2hQYXJzaW5nKCk7CisKK3By
aXZhdGU6CisgICAgdXNpbmcgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYVRyYWNrUmVhZGVyPjo6dW53
cmFwOworCisgICAgTWVkaWFUcmFja1JlYWRlcihBbGxvY2F0b3ImJiwgY29uc3QgTWVkaWFGb3Jt
YXRSZWFkZXImLCBDTU1lZGlhVHlwZSwgdWludDY0X3QsIE9wdGlvbmFsPGJvb2w+KTsKKworICAg
IC8vIENNQmFzZUNsYXNzCisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5h
bCB7IHJldHVybiAiV2ViS2l0OjpNZWRpYVRyYWNrUmVhZGVyIl9zOyB9CisgICAgT1NTdGF0dXMg
Y29weVByb3BlcnR5KENGU3RyaW5nUmVmLCBDRkFsbG9jYXRvclJlZiwgdm9pZCogY29waWVkVmFs
dWUpIGZpbmFsOworICAgIHZvaWQgZmluYWxpemUoKSBmaW5hbDsKKworICAgIC8vIFdyYXBwZXJD
bGFzcworICAgIE9TU3RhdHVzIGdldFRyYWNrSW5mbyhNVFBlcnNpc3RlbnRUcmFja0lEKiwgQ01N
ZWRpYVR5cGUqKTsKKyAgICBPU1N0YXR1cyBjcmVhdGVDdXJzb3JBdFByZXNlbnRhdGlvblRpbWVT
dGFtcChDTVRpbWUsIE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKik7CisgICAgT1NTdGF0dXMgY3Jl
YXRlQ3Vyc29yQXRGaXJzdFNhbXBsZUluRGVjb2RlT3JkZXIoTVRQbHVnaW5TYW1wbGVDdXJzb3JS
ZWYqKTsKKyAgICBPU1N0YXR1cyBjcmVhdGVDdXJzb3JBdExhc3RTYW1wbGVJbkRlY29kZU9yZGVy
KE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKik7CisKKyAgICBzdHJ1Y3QgU2FtcGxlU3RvcmFnZSB7
CisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgflNhbXBs
ZVN0b3JhZ2UoKSB7IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOyB9CisgICAgICAgIFdlYkNvcmU6
OlNhbXBsZU1hcCBzYW1wbGVNYXA7CisgICAgICAgIGJvb2wgaGFzQWxsU2FtcGxlcyB7IGZhbHNl
IH07CisgICAgfTsKKworICAgIGVudW0gRW5hYmxlZCA6IHVpbnQ4X3QgeyBVbmtub3duLCBGYWxz
ZSwgVHJ1ZSB9OworCisgICAgY29uc3QgdWludDY0X3QgbV90cmFja0lEOworICAgIGNvbnN0IENN
TWVkaWFUeXBlIG1fbWVkaWFUeXBlOworICAgIGNvbnN0IE1lZGlhVGltZSBtX2R1cmF0aW9uOwor
ICAgIHN0ZDo6YXRvbWljPEVuYWJsZWQ+IG1faXNFbmFibGVkIHsgRW5hYmxlZDo6VW5rbm93biB9
OworICAgIG11dGFibGUgQ29uZGl0aW9uIG1fc2FtcGxlU3RvcmFnZUNvbmRpdGlvbjsKKyAgICBt
dXRhYmxlIExvY2sgbV9zYW1wbGVTdG9yYWdlTG9jazsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVl
X3B0cjxTYW1wbGVTdG9yYWdlPiBtX3NhbXBsZVN0b3JhZ2U7Cit9OworCitjb25zdGV4cHIgTWVk
aWFUcmFja1JlYWRlcjo6V3JhcHBlckNsYXNzIE1lZGlhVHJhY2tSZWFkZXI6OndyYXBwZXJDbGFz
cygpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgLnZlcnNpb24gPSBrTVRQbHVnaW5UcmFja1Jl
YWRlcl9DbGFzc1ZlcnNpb25fMSwKKyAgICAgICAgLmdldFRyYWNrSW5mbyA9IFtdKE1UUGx1Z2lu
VHJhY2tSZWFkZXJSZWYgdHJhY2tSZWFkZXIsIE1UUGVyc2lzdGVudFRyYWNrSUQqIHRyYWNrSUQs
IENNTWVkaWFUeXBlKiBtZWRpYVR5cGUpIHsKKyAgICAgICAgICAgIHJldHVybiB1bndyYXAodHJh
Y2tSZWFkZXIpLT5nZXRUcmFja0luZm8odHJhY2tJRCwgbWVkaWFUeXBlKTsKKyAgICAgICAgfSwK
KyAgICAgICAgLmNyZWF0ZUN1cnNvckF0UHJlc2VudGF0aW9uVGltZVN0YW1wID0gW10oTVRQbHVn
aW5UcmFja1JlYWRlclJlZiB0cmFja1JlYWRlciwgQ01UaW1lIHRpbWVzdGFtcCwgTVRQbHVnaW5T
YW1wbGVDdXJzb3JSZWYqIGN1cnNvcikgeworICAgICAgICAgICAgcmV0dXJuIHVud3JhcCh0cmFj
a1JlYWRlciktPmNyZWF0ZUN1cnNvckF0UHJlc2VudGF0aW9uVGltZVN0YW1wKHRpbWVzdGFtcCwg
Y3Vyc29yKTsKKyAgICAgICAgfSwKKyAgICAgICAgLmNyZWF0ZUN1cnNvckF0Rmlyc3RTYW1wbGVJ
bkRlY29kZU9yZGVyID0gW10oTVRQbHVnaW5UcmFja1JlYWRlclJlZiB0cmFja1JlYWRlciwgTVRQ
bHVnaW5TYW1wbGVDdXJzb3JSZWYqIGN1cnNvcikgeworICAgICAgICAgICAgcmV0dXJuIHVud3Jh
cCh0cmFja1JlYWRlciktPmNyZWF0ZUN1cnNvckF0Rmlyc3RTYW1wbGVJbkRlY29kZU9yZGVyKGN1
cnNvcik7CisgICAgICAgIH0sCisgICAgICAgIC5jcmVhdGVDdXJzb3JBdExhc3RTYW1wbGVJbkRl
Y29kZU9yZGVyID0gW10oTVRQbHVnaW5UcmFja1JlYWRlclJlZiB0cmFja1JlYWRlciwgTVRQbHVn
aW5TYW1wbGVDdXJzb3JSZWYqIGN1cnNvcikgeworICAgICAgICAgICAgcmV0dXJuIHVud3JhcCh0
cmFja1JlYWRlciktPmNyZWF0ZUN1cnNvckF0TGFzdFNhbXBsZUluRGVjb2RlT3JkZXIoY3Vyc29y
KTsKKyAgICAgICAgfSwKKyAgICB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvU2FtcGxlQ3Vyc29yLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9TYW1wbGVDdXJzb3IuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmU0MWI3OTg4ZjNkZmQ4MjBlZjVkN2JlMmMz
MzhjMTY3Yzg1OGUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9TYW1wbGVDdXJz
b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2FtcGxlQ3Vyc29yLmgiCi0KLSNpZiBFTkFCTEUo
V0VCTV9GT1JNQVRfUkVBREVSKQotCi0jaW5jbHVkZSAiVHJhY2tSZWFkZXIuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL01lZGlhU2FtcGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TYW1wbGVNYXAuaD4K
LSNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgotI2lu
Y2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgotI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUu
aD4KLSNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgotCi0jaW5jbHVkZSA8cGFsL2NvY29hL01lZGlh
VG9vbGJveFNvZnRMaW5rLmg+Ci0KLVdURl9ERUNMQVJFX0NGX1RZUEVfVFJBSVQoTVRQbHVnaW5T
YW1wbGVDdXJzb3IpOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFBB
TDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgT3B0aW9uYWw8U2FtcGxlQ3Vy
c29yOjpEZWNvZGVPcmRlckl0ZXJhdG9yPiBtYWtlSXRlcmF0b3IoY29uc3QgU2FtcGxlQ3Vyc29y
OjpEZWNvZGVkU2FtcGxlJiBkZWNvZGVkU2FtcGxlLCBTYW1wbGVNYXAmIHNhbXBsZXMsIGJvb2wg
aGFzQWxsU2FtcGxlcykKLXsKLSAgICBhdXRvJiBkZWNvZGVPcmRlciA9IHNhbXBsZXMuZGVjb2Rl
T3JkZXIoKTsKLSAgICBzd2l0Y2ggKGRlY29kZWRTYW1wbGUpIHsKLSAgICBjYXNlIFNhbXBsZUN1
cnNvcjo6RGVjb2RlZFNhbXBsZTo6Rmlyc3Q6Ci0gICAgICAgIGlmIChzYW1wbGVzLnNpemUoKSkK
LSAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcmRlci5iZWdpbigpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNhbXBsZUN1cnNvcjo6RGVjb2RlZFNhbXBsZTo6TGFzdDoKLSAgICAgICAgaWYg
KHNhbXBsZXMuc2l6ZSgpICYmIGhhc0FsbFNhbXBsZXMpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpwcmV2KGRlY29kZU9yZGVyLmVuZCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXN0YXRpYyBPcHRpb25hbDxTYW1wbGVDdXJzb3I6OkRl
Y29kZU9yZGVySXRlcmF0b3I+IG1ha2VJdGVyYXRvcihjb25zdCBTYW1wbGVDdXJzb3I6OlByZXNl
bnRhdGlvbk9yZGVySXRlcmF0b3ImIGl0ZXJhdG9yLCBTYW1wbGVNYXAmIHNhbXBsZXMsIGJvb2wp
Ci17Ci0gICAgTWVkaWFTYW1wbGUmIHNhbXBsZSA9ICppdGVyYXRvci0+c2Vjb25kLmdldCgpOwot
ICAgIHJldHVybiBzYW1wbGVzLmRlY29kZU9yZGVyKCkuZmluZFNhbXBsZVdpdGhEZWNvZGVLZXko
c3RkOjptYWtlX3BhaXIoc2FtcGxlLmRlY29kZVRpbWUoKSwgc2FtcGxlLnByZXNlbnRhdGlvblRp
bWUoKSkpOwotfQotCi1zdGF0aWMgT3B0aW9uYWw8U2FtcGxlQ3Vyc29yOjpQcmVzZW50YXRpb25P
cmRlckl0ZXJhdG9yPiBtYWtlSXRlcmF0b3IoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25U
aW1lLCBTYW1wbGVNYXAmIHNhbXBsZXMsIGJvb2wgaGFzQWxsU2FtcGxlcykKLXsKLSAgICBhdXRv
JiBwcmVzZW50YXRpb25PcmRlciA9IHNhbXBsZXMucHJlc2VudGF0aW9uT3JkZXIoKTsKLSAgICBh
dXRvIGl0ZXJhdG9yID0gcHJlc2VudGF0aW9uT3JkZXIuZmluZFNhbXBsZUNvbnRhaW5pbmdPckFm
dGVyUHJlc2VudGF0aW9uVGltZShwcmVzZW50YXRpb25UaW1lKTsKLSAgICBpZiAoaXRlcmF0b3Ig
IT0gcHJlc2VudGF0aW9uT3JkZXIuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvcjsKLSAg
ICBpZiAoc2FtcGxlcy5zaXplKCkgJiYgaGFzQWxsU2FtcGxlcykKLSAgICAgICAgcmV0dXJuIHN0
ZDo6cHJldihpdGVyYXRvcik7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotc3RhdGlj
IE9wdGlvbmFsPFNhbXBsZUN1cnNvcjo6UHJlc2VudGF0aW9uT3JkZXJJdGVyYXRvcj4gbWFrZUl0
ZXJhdG9yKGNvbnN0IFNhbXBsZUN1cnNvcjo6RGVjb2RlT3JkZXJJdGVyYXRvciYgaXRlcmF0b3Is
IFNhbXBsZU1hcCYgc2FtcGxlcywgYm9vbCkKLXsKLSAgICBNZWRpYVNhbXBsZSYgc2FtcGxlID0g
Kml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7Ci0gICAgcmV0dXJuIHNhbXBsZXMucHJlc2VudGF0aW9u
T3JkZXIoKS5maW5kU2FtcGxlV2l0aFByZXNlbnRhdGlvblRpbWUoc2FtcGxlLnByZXNlbnRhdGlv
blRpbWUoKSk7Ci19Ci0KLXN0YXRpYyBNZWRpYVRpbWUgbWFrZVRpbWUoY29uc3QgRGVjb2RlT3Jk
ZXJTYW1wbGVNYXA6Oml0ZXJhdG9yJiBpdCkKLXsKLSAgICByZXR1cm4gaXQtPnNlY29uZC0+ZGVj
b2RlVGltZSgpOwotfQotCi1zdGF0aWMgTWVkaWFUaW1lIG1ha2VUaW1lKGNvbnN0IFByZXNlbnRh
dGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvciYgaXQpCi17Ci0gICAgcmV0dXJuIGl0LT5zZWNv
bmQtPnByZXNlbnRhdGlvblRpbWUoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3JkZXJlZE1h
cD4gc3RhdGljIE9yZGVyZWRNYXAmIG9yZGVyZWRTYW1wbGVzKFNhbXBsZU1hcCYpOwotCi10ZW1w
bGF0ZTw+Ci1EZWNvZGVPcmRlclNhbXBsZU1hcCYgb3JkZXJlZFNhbXBsZXMoU2FtcGxlTWFwJiBz
YW1wbGVzKQotewotICAgIHJldHVybiBzYW1wbGVzLmRlY29kZU9yZGVyKCk7Ci19Ci0KLXRlbXBs
YXRlPD4KLVByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwJiBvcmRlcmVkU2FtcGxlcyhTYW1wbGVN
YXAmIHNhbXBsZXMpCi17Ci0gICAgcmV0dXJuIHNhbXBsZXMucHJlc2VudGF0aW9uT3JkZXIoKTsK
LX0KLQotc3RhdGljIERlY29kZU9yZGVyU2FtcGxlTWFwOjppdGVyYXRvciB1cHBlckJvdW5kKERl
Y29kZU9yZGVyU2FtcGxlTWFwJiBtYXAsIGNvbnN0IE1lZGlhVGltZSYgdGltZSkKLXsKLSAgICBy
ZXR1cm4gbWFwLmZpbmRTYW1wbGVBZnRlckRlY29kZUtleShzdGQ6Om1ha2VfcGFpcih0aW1lLCBN
ZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCkpKTsKLX0KLQotc3RhdGljIFByZXNlbnRh
dGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvciB1cHBlckJvdW5kKFByZXNlbnRhdGlvbk9yZGVy
U2FtcGxlTWFwJiBtYXAsIGNvbnN0IE1lZGlhVGltZSYgdGltZSkKLXsKLSAgICByZXR1cm4gbWFw
LmZpbmRTYW1wbGVTdGFydGluZ0FmdGVyUHJlc2VudGF0aW9uVGltZSh0aW1lKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgT3JkZXJlZE1hcCwgdHlwZW5hbWUgU3RlcD4gc3RhdGljIFN0ZXAgc3Rl
cEl0ZXJhdG9yKFN0ZXAsIHR5cGVuYW1lIE9yZGVyZWRNYXA6Oml0ZXJhdG9yJiwgT3JkZXJlZE1h
cCYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcmRlcmVkTWFwPgotaW50NjRfdCBzdGVwSXRlcmF0
b3IoaW50NjRfdCBzdGVwc1JlbWFpbmluZywgdHlwZW5hbWUgT3JkZXJlZE1hcDo6aXRlcmF0b3Im
IGl0ZXJhdG9yLCBPcmRlcmVkTWFwJiBzYW1wbGVzKQotewotICAgIEFTU0VSVChpdGVyYXRvciAh
PSBzYW1wbGVzLmVuZCgpKTsKLSAgICBpZiAoc3RlcHNSZW1haW5pbmcgPCAwKQotICAgICAgICBm
b3IgKDsgc3RlcHNSZW1haW5pbmcgJiYgaXRlcmF0b3IgIT0gc2FtcGxlcy5iZWdpbigpOyArK3N0
ZXBzUmVtYWluaW5nLCAtLWl0ZXJhdG9yKSB7IH0KLSAgICBlbHNlCi0gICAgICAgIGZvciAoYXV0
byBuZXh0ID0gc3RkOjpuZXh0KGl0ZXJhdG9yKTsgc3RlcHNSZW1haW5pbmcgJiYgbmV4dCAhPSBz
YW1wbGVzLmVuZCgpOyAtLXN0ZXBzUmVtYWluaW5nLCBpdGVyYXRvciA9IG5leHQrKykgeyB9Ci0g
ICAgcmV0dXJuIHN0ZXBzUmVtYWluaW5nOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcmRlcmVk
TWFwPgotTWVkaWFUaW1lIHN0ZXBJdGVyYXRvcihNZWRpYVRpbWUgZGVsdGFSZW1haW5pbmcsIHR5
cGVuYW1lIE9yZGVyZWRNYXA6Oml0ZXJhdG9yJiBpdGVyYXRvciwgT3JkZXJlZE1hcCYgc2FtcGxl
cykKLXsKLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gc2FtcGxlcy5lbmQoKSk7Ci0gICAgYXV0byBy
ZXF1ZXN0ZWRUaW1lID0gbWFrZVRpbWUoaXRlcmF0b3IpICsgZGVsdGFSZW1haW5pbmc7Ci0gICAg
aXRlcmF0b3IgPSB1cHBlckJvdW5kKHNhbXBsZXMsIHJlcXVlc3RlZFRpbWUpOwotICAgIGlmIChp
dGVyYXRvciAhPSBzYW1wbGVzLmJlZ2luKCkpCi0gICAgICAgIC0taXRlcmF0b3I7Ci0gICAgZGVs
dGFSZW1haW5pbmcgPSByZXF1ZXN0ZWRUaW1lIC0gbWFrZVRpbWUoaXRlcmF0b3IpOwotICAgIGlm
IChkZWx0YVJlbWFpbmluZyA+IE1lZGlhVGltZTo6emVyb1RpbWUoKSAmJiBkZWx0YVJlbWFpbmlu
ZyA8IGl0ZXJhdG9yLT5zZWNvbmQtPmR1cmF0aW9uKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVRp
bWU6Onplcm9UaW1lKCk7Ci0gICAgcmV0dXJuIGRlbHRhUmVtYWluaW5nOwotfQotCi1DTUJhc2VD
bGFzc0lEIFNhbXBsZUN1cnNvcjo6d3JhcHBlckNsYXNzSUQoKQotewotICAgIHJldHVybiBNVFBs
dWdpblNhbXBsZUN1cnNvckdldENsYXNzSUQoKTsKLX0KLQotQ29yZU1lZGlhV3JhcHBlZDxTYW1w
bGVDdXJzb3I+KiBTYW1wbGVDdXJzb3I6OnVud3JhcChDTUJhc2VPYmplY3RSZWYgb2JqZWN0KQot
ewotICAgIHJldHVybiB1bndyYXAoY2hlY2tlZF9jZl9jYXN0PFdyYXBwZXJSZWY+KG9iamVjdCkp
OwotfQotCi1SZWZQdHI8U2FtcGxlQ3Vyc29yPiBTYW1wbGVDdXJzb3I6OmNyZWF0ZUF0UHJlc2Vu
dGF0aW9uVGltZShBbGxvY2F0b3ImJiBhbGxvY2F0b3IsIFRyYWNrUmVhZGVyJiB0cmFja1JlYWRl
ciwgTWVkaWFUaW1lIHRpbWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoYWxsb2NhdG9y
KSBTYW1wbGVDdXJzb3IoV1RGTW92ZShhbGxvY2F0b3IpLCB0cmFja1JlYWRlciwgV1RGTW92ZSh0
aW1lKSkpOwotfQotCi1SZWZQdHI8U2FtcGxlQ3Vyc29yPiBTYW1wbGVDdXJzb3I6OmNyZWF0ZUF0
RGVjb2RlZFNhbXBsZShBbGxvY2F0b3ImJiBhbGxvY2F0b3IsIFRyYWNrUmVhZGVyJiB0cmFja1Jl
YWRlciwgRGVjb2RlZFNhbXBsZSBkZWNvZGVkU2FtcGxlKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgKGFsbG9jYXRvcikgU2FtcGxlQ3Vyc29yKFdURk1vdmUoYWxsb2NhdG9yKSwgdHJhY2tS
ZWFkZXIsIFdURk1vdmUoZGVjb2RlZFNhbXBsZSkpKTsKLX0KLQotUmVmUHRyPFNhbXBsZUN1cnNv
cj4gU2FtcGxlQ3Vyc29yOjpjb3B5KEFsbG9jYXRvciYmIGFsbG9jYXRvciwgY29uc3QgU2FtcGxl
Q3Vyc29yJiBjdXJzb3IpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjdXJzb3IubV9s
b2NhdG9yTG9jayk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoYWxsb2NhdG9yKSBTYW1wbGVD
dXJzb3IoV1RGTW92ZShhbGxvY2F0b3IpLCBjdXJzb3IpKTsKLX0KLQotU2FtcGxlQ3Vyc29yOjpT
YW1wbGVDdXJzb3IoQWxsb2NhdG9yJiYgYWxsb2NhdG9yLCBUcmFja1JlYWRlciYgdHJhY2tSZWFk
ZXIsIExvY2F0b3IgbG9jYXRvcikKLSAgICA6IENvcmVNZWRpYVdyYXBwZWQoV1RGTW92ZShhbGxv
Y2F0b3IpKQotICAgICwgbV90cmFja1JlYWRlcih0cmFja1JlYWRlcikKLSAgICAsIG1fbG9jYXRv
cihXVEZNb3ZlKGxvY2F0b3IpKQotewotfQotCi1TYW1wbGVDdXJzb3I6OlNhbXBsZUN1cnNvcihB
bGxvY2F0b3ImJiBhbGxvY2F0b3IsIGNvbnN0IFNhbXBsZUN1cnNvciYgY3Vyc29yKQotICAgIDog
Q29yZU1lZGlhV3JhcHBlZChXVEZNb3ZlKGFsbG9jYXRvcikpCi0gICAgLCBtX3RyYWNrUmVhZGVy
KGN1cnNvci5tX3RyYWNrUmVhZGVyLmNvcHlSZWYoKSkKLSAgICAsIG1fbG9jYXRvcihjdXJzb3Iu
bV9sb2NhdG9yKQotewotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KLU9wdGlvbmFs
PEl0ZXJhdG9yPiBTYW1wbGVDdXJzb3I6OmxvY2F0ZUl0ZXJhdG9yKFNhbXBsZU1hcCYgc2FtcGxl
cywgYm9vbCBoYXNBbGxTYW1wbGVzKSBjb25zdAotewotICAgIEFTU0VSVChtX2xvY2F0b3JMb2Nr
LmlzTG9ja2VkKCkpOwotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fbG9jYXRvciwKLSAgICAg
ICAgWyZdKGNvbnN0IGF1dG8mIGxvY2F0b3IpIC0+IE9wdGlvbmFsPEl0ZXJhdG9yPiB7Ci0gICAg
ICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbWFrZUl0ZXJhdG9yKGxvY2F0b3IsIHNhbXBsZXMsIGhh
c0FsbFNhbXBsZXMpOwotICAgICAgICAgICAgaWYgKCFpdGVyYXRvcikKLSAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgbV9sb2NhdG9yID0gV1RGTW92ZSgq
aXRlcmF0b3IpOwotICAgICAgICAgICAgcmV0dXJuIGxvY2F0ZUl0ZXJhdG9yPEl0ZXJhdG9yPihz
YW1wbGVzLCBoYXNBbGxTYW1wbGVzKTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdKGNvbnN0IEl0
ZXJhdG9yJiBpdGVyYXRvcikgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yOwotICAgICAg
ICB9Ci0gICAgKTsKLX0KLQotTWVkaWFTYW1wbGUqIFNhbXBsZUN1cnNvcjo6bG9jYXRlTWVkaWFT
YW1wbGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX2xvY2F0b3JMb2NrLmlzTG9ja2VkKCkpOwot
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fbG9jYXRvciwKLSAgICAgICAgWyZdKGNvbnN0IGF1
dG8mIGxvY2F0b3IpIHsKLSAgICAgICAgICAgIG1fdHJhY2tSZWFkZXItPndhaXRGb3JTYW1wbGUo
WyZdKFNhbXBsZU1hcCYgc2FtcGxlcywgYm9vbCBoYXNBbGxTYW1wbGVzKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBpdGVyYXRvciA9IG1ha2VJdGVyYXRvcihsb2NhdG9yLCBzYW1wbGVzLCBoYXNB
bGxTYW1wbGVzKTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaGFzQWxsU2FtcGxlczsKLSAgICAgICAgICAgICAgICBtX2xvY2F0b3Ig
PSBXVEZNb3ZlKCppdGVyYXRvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGVNZWRpYVNhbXBsZSgpOwotICAg
ICAgICB9LAotICAgICAgICBbJl0oY29uc3QgU2FtcGxlQ3Vyc29yOjpEZWNvZGVPcmRlckl0ZXJh
dG9yJiBpdGVyYXRvcikgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT5zZWNvbmQuZ2V0
KCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXShjb25zdCBTYW1wbGVDdXJzb3I6OlByZXNlbnRh
dGlvbk9yZGVySXRlcmF0b3ImIGl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcmF0
b3ItPnNlY29uZC5nZXQoKTsKLSAgICAgICAgfQotICAgICk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9yZGVyZWRNYXAsIHR5cGVuYW1lIFN0ZXA+Ci1TdGVwIFNhbXBsZUN1cnNvcjo6c3RlcElu
T3JkZXJlZE1hcChTdGVwIHN0ZXBzUmVtYWluaW5nKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NhdG9yTG9jayk7Ci0gICAgbV90cmFja1JlYWRlci0+d2FpdEZvclNhbXBsZShb
Jl0oU2FtcGxlTWFwJiBzYW1wbGVzLCBib29sIGhhc0FsbFNhbXBsZXMpIHsKLSAgICAgICAgaWYg
KGF1dG8gaXRlcmF0b3IgPSBsb2NhdGVJdGVyYXRvcjx0eXBlbmFtZSBPcmRlcmVkTWFwOjppdGVy
YXRvcj4oc2FtcGxlcywgaGFzQWxsU2FtcGxlcykpIHsKLSAgICAgICAgICAgIHN0ZXBzUmVtYWlu
aW5nID0gc3RlcEl0ZXJhdG9yKHN0ZXBzUmVtYWluaW5nLCAqaXRlcmF0b3IsIG9yZGVyZWRTYW1w
bGVzPE9yZGVyZWRNYXA+KHNhbXBsZXMpKTsKLSAgICAgICAgICAgIG1fbG9jYXRvciA9IFdURk1v
dmUoKml0ZXJhdG9yKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaGFzQWxsU2FtcGxlcyB8
fCAhc3RlcHNSZW1haW5pbmc7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHN0ZXBzUmVtYWluaW5nOwot
fQotCi1PU1N0YXR1cyBTYW1wbGVDdXJzb3I6OmdldE1lZGlhU2FtcGxlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoTWVkaWFTYW1wbGUmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKLXsKLSAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jYXRvckxvY2spOwotICAgIGF1dG8gc2FtcGxl
ID0gbG9jYXRlTWVkaWFTYW1wbGUoKTsKLSAgICBpZiAoIXNhbXBsZSkKLSAgICAgICAgcmV0dXJu
IGtNVFBsdWdpblNhbXBsZUN1cnNvckVycm9yX05vU2FtcGxlczsKLSAgICBjb21wbGV0aW9uSGFu
ZGxlcigqc2FtcGxlKTsKLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLU9TU3RhdHVzIFNhbXBsZUN1
cnNvcjo6Y29weVByb3BlcnR5KENGU3RyaW5nUmVmLCBDRkFsbG9jYXRvclJlZiwgdm9pZCopCi17
Ci0gICAgcmV0dXJuIGtDTUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5vdEF2YWlsYWJsZTsKLX0KLQot
T1NTdGF0dXMgU2FtcGxlQ3Vyc29yOjpjb3B5KE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKiBzYW1w
bGVDdXJzb3IpIGNvbnN0Ci17Ci0gICAgKnNhbXBsZUN1cnNvciA9IFNhbXBsZUN1cnNvcjo6Y29w
eShhbGxvY2F0b3IoKSwgKnRoaXMpLmxlYWtSZWYoKS0+d3JhcHBlcigpOwotICAgIHJldHVybiBu
b0VycjsKLX0KLQotT1NTdGF0dXMgU2FtcGxlQ3Vyc29yOjpzdGVwSW5EZWNvZGVPcmRlckFuZFJl
cG9ydFN0ZXBzVGFrZW4oaW50NjRfdCBzdGVwc1RvVGFrZSwgaW50NjRfdCogc3RlcHNUYWtlbikK
LXsKLSAgICBhdXRvIHN0ZXBzUmVtYWluaW5nID0gc3RlcEluT3JkZXJlZE1hcDxEZWNvZGVPcmRl
clNhbXBsZU1hcD4oc3RlcHNUb1Rha2UpOwotICAgICpzdGVwc1Rha2VuID0gc3RlcHNUb1Rha2Ug
LSBzdGVwc1JlbWFpbmluZzsKLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLU9TU3RhdHVzIFNhbXBs
ZUN1cnNvcjo6c3RlcEluUHJlc2VudGF0aW9uT3JkZXJBbmRSZXBvcnRTdGVwc1Rha2VuKGludDY0
X3Qgc3RlcHNUb1Rha2UsIGludDY0X3QqIHN0ZXBzVGFrZW4pCi17Ci0gICAgYXV0byBzdGVwc1Jl
bWFpbmluZyA9IHN0ZXBJbk9yZGVyZWRNYXA8UHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA+KHN0
ZXBzVG9UYWtlKTsKLSAgICAqc3RlcHNUYWtlbiA9IHN0ZXBzVG9UYWtlIC0gc3RlcHNSZW1haW5p
bmc7Ci0gICAgcmV0dXJuIG5vRXJyOwotfQotCi1PU1N0YXR1cyBTYW1wbGVDdXJzb3I6OnN0ZXBC
eURlY29kZVRpbWUoQ01UaW1lIHRpbWUsIEJvb2xlYW4qIHdhc1Bpbm5lZCkKLXsKLSAgICBhdXRv
IHRpbWVSZW1haW5pbmcgPSBzdGVwSW5PcmRlcmVkTWFwPERlY29kZU9yZGVyU2FtcGxlTWFwPihQ
QUw6OnRvTWVkaWFUaW1lKHRpbWUpKTsKLSAgICAqd2FzUGlubmVkID0gISF0aW1lUmVtYWluaW5n
OwotICAgIHJldHVybiBub0VycjsKLX0KLQotT1NTdGF0dXMgU2FtcGxlQ3Vyc29yOjpzdGVwQnlQ
cmVzZW50YXRpb25UaW1lKENNVGltZSB0aW1lLCBCb29sZWFuKiB3YXNQaW5uZWQpCi17Ci0gICAg
YXV0byB0aW1lUmVtYWluaW5nID0gc3RlcEluT3JkZXJlZE1hcDxQcmVzZW50YXRpb25PcmRlclNh
bXBsZU1hcD4oUEFMOjp0b01lZGlhVGltZSh0aW1lKSk7Ci0gICAgKndhc1Bpbm5lZCA9ICEhdGlt
ZVJlbWFpbmluZzsKLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLUNGQ29tcGFyaXNvblJlc3VsdCBT
YW1wbGVDdXJzb3I6OmNvbXBhcmVJbkRlY29kZU9yZGVyKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVm
IG90aGVyQ3Vyc29yUmVmKSBjb25zdAotewotICAgIGlmICh3cmFwcGVyKCkgPT0gb3RoZXJDdXJz
b3JSZWYpCi0gICAgICAgIHJldHVybiBrQ0ZDb21wYXJlRXF1YWxUbzsKLQotICAgIGF1dG8gZGVj
b2RlVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAgICBnZXRNZWRpYVNhbXBsZShb
Jl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgewotICAgICAgICBkZWNvZGVUaW1lID0gc2FtcGxlLmRl
Y29kZVRpbWUoKTsKLSAgICB9KTsKLQotICAgIGF1dG8gb3RoZXJEZWNvZGVUaW1lID0gTWVkaWFU
aW1lOjppbnZhbGlkVGltZSgpOwotICAgIGlmIChhdXRvIG90aGVyQ3Vyc29yID0gdW53cmFwKG90
aGVyQ3Vyc29yUmVmKSkgewotICAgICAgICBvdGhlckN1cnNvci0+Z2V0TWVkaWFTYW1wbGUoWyZd
KE1lZGlhU2FtcGxlJiBzYW1wbGUpIHsKLSAgICAgICAgICAgIG90aGVyRGVjb2RlVGltZSA9IHNh
bXBsZS5kZWNvZGVUaW1lKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHN3aXRjaCAoZGVj
b2RlVGltZS5jb21wYXJlKG90aGVyRGVjb2RlVGltZSkpIHsKLSAgICBjYXNlIE1lZGlhVGltZTo6
TGVzc1RoYW46Ci0gICAgICAgIHJldHVybiBrQ0ZDb21wYXJlTGVzc1RoYW47Ci0gICAgY2FzZSBN
ZWRpYVRpbWU6OkVxdWFsVG86Ci0gICAgICAgIHJldHVybiBrQ0ZDb21wYXJlRXF1YWxUbzsKLSAg
ICBjYXNlIE1lZGlhVGltZTo6R3JlYXRlclRoYW46Ci0gICAgICAgIHJldHVybiBrQ0ZDb21wYXJl
R3JlYXRlclRoYW47Ci0gICAgfQotfQotCi1PU1N0YXR1cyBTYW1wbGVDdXJzb3I6OmdldFNhbXBs
ZVRpbWluZyhDTVNhbXBsZVRpbWluZ0luZm8qIHNhbXBsZVRpbWluZykgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0TWVkaWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxlJiBzYW1wbGUpIHsKLSAgICAgICAg
KnNhbXBsZVRpbWluZyA9IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEdXJhdGlvbiBzaG91bGQg
YmUgdGhlIGRpZmZlcmVuY2UgaW4gcHJlc2VudGF0aW9uIHRpbWUgYmV0d2VlbiB0aGlzIHNhbXBs
ZSBhbmQgdGhlIG5leHQgaW4gcHJlc2VudGF0aW9uIG9yZGVyIChvciB0cmFjayBkdXJhdGlvbiBp
ZiB0aGlzIGlzIHRoZSBsYXN0IHNhbXBsZSkuCi0gICAgICAgICAgICAuZHVyYXRpb24gPSBQQUw6
OnRvQ01UaW1lKHNhbXBsZS5kdXJhdGlvbigpKSwKLSAgICAgICAgICAgIC5wcmVzZW50YXRpb25U
aW1lU3RhbXAgPSBQQUw6OnRvQ01UaW1lKHNhbXBsZS5wcmVzZW50YXRpb25UaW1lKCkpLAotICAg
ICAgICAgICAgLmRlY29kZVRpbWVTdGFtcCA9IFBBTDo6dG9DTVRpbWUoc2FtcGxlLmRlY29kZVRp
bWUoKSksCi0gICAgICAgIH07Ci0gICAgfSk7Ci19Ci0KLU9TU3RhdHVzIFNhbXBsZUN1cnNvcjo6
Z2V0U3luY0luZm8oTVRQbHVnaW5TYW1wbGVDdXJzb3JTeW5jSW5mbyogc3luY0luZm8pIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldE1lZGlhU2FtcGxlKFsmXShNZWRpYVNhbXBsZSYgc2FtcGxlKSB7
Ci0gICAgICAgICpzeW5jSW5mbyA9IHsKLSAgICAgICAgICAgIC5mdWxsU3luYyA9IHNhbXBsZS5p
c1N5bmMoKQotICAgICAgICB9OwotICAgIH0pOwotfQotCi1PU1N0YXR1cyBTYW1wbGVDdXJzb3I6
OmNvcHlGb3JtYXREZXNjcmlwdGlvbihDTUZvcm1hdERlc2NyaXB0aW9uUmVmKiBmb3JtYXREZXNj
cmlwdGlvbk91dCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0TWVkaWFTYW1wbGUoWyZdKE1lZGlh
U2FtcGxlJiBzYW1wbGUpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxl
OjpCeXRlUmFuZ2VTYW1wbGVUeXBlKTsKLSAgICAgICAgKmZvcm1hdERlc2NyaXB0aW9uT3V0ID0g
cmV0YWluUHRyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5ieXRlUmFuZ2VTYW1wbGUu
c2Vjb25kKS5sZWFrUmVmKCk7Ci0gICAgfSk7Ci19Ci0KLU9TU3RhdHVzIFNhbXBsZUN1cnNvcjo6
Y29weVNhbXBsZUxvY2F0aW9uKE1UUGx1Z2luU2FtcGxlQ3Vyc29yU3RvcmFnZVJhbmdlKiBzdG9y
YWdlUmFuZ2UsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiogYnl0ZVNvdXJjZSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0TWVkaWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxlJiBzYW1wbGUpIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzYW1wbGUucGxhdGZv
cm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlKTsK
LSAgICAgICAgYXV0byBieXRlUmFuZ2UgPSAqc2FtcGxlLmJ5dGVSYW5nZSgpOwotICAgICAgICAq
c3RvcmFnZVJhbmdlID0gewotICAgICAgICAgICAgLm9mZnNldCA9IENoZWNrZWRJbnQ2NChieXRl
UmFuZ2UuYnl0ZU9mZnNldCkudW5zYWZlR2V0KCksCi0gICAgICAgICAgICAubGVuZ3RoID0gQ2hl
Y2tlZEludDY0KGJ5dGVSYW5nZS5ieXRlTGVuZ3RoKS51bnNhZmVHZXQoKSwKLSAgICAgICAgfTsK
LSAgICAgICAgKmJ5dGVTb3VyY2UgPSByZXRhaW5QdHIoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCku
c2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5maXJzdCkubGVha1JlZigpOwotICAgIH0pOwotfQotCi1P
U1N0YXR1cyBTYW1wbGVDdXJzb3I6OmdldFBsYXlhYmxlSG9yaXpvbihDTVRpbWUqKSBjb25zdAot
ewotICAgIHJldHVybiBrQ01CYXNlT2JqZWN0RXJyb3JfVmFsdWVOb3RBdmFpbGFibGU7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JF
QURFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9TYW1wbGVDdXJzb3IuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1h
dFJlYWRlci9TYW1wbGVDdXJzb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Nk
YjdhZTczZmM1NzlkMzE0ZGY3ODExYzNkNjU1MzljZjMzZGU0ZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVk
aWFGb3JtYXRSZWFkZXIvU2FtcGxlQ3Vyc29yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQk1fRk9STUFU
X1JFQURFUikKLQotI2luY2x1ZGUgIkNvcmVNZWRpYVdyYXBwZWQuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL1NhbXBsZU1hcC5oPgotI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KLSNpbmNsdWRlIDx3
dGYvVmFyaWFudC5oPgotCi1ERUNMQVJFX0NPUkVfTUVESUFfVFJBSVRTKFNhbXBsZUN1cnNvcik7
Ci0KLS8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGtNVFBsdWdpblNhbXBsZUN1cnNvcl9DbGFz
c1ZlcnNpb25fNCBpcyBhdmFpbGFibGUgaW4gU0RLcy4KLSNpZiBkZWZpbmVkKEhBVkVfTVRfUExV
R0lOX1NBTVBMRV9DVVJTT1JfUExBWUFCTEVfSE9SSVpPTikKLSN1bmRlZiBIQVZFX01UX1BMVUdJ
Tl9TQU1QTEVfQ1VSU09SX1BMQVlBQkxFX0hPUklaT04KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci1jbGFzcyBNZWRpYVNhbXBsZTsKLX07Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBUcmFja1JlYWRlcjsKLQotY2xhc3MgU2FtcGxlQ3Vyc29yIDogcHVibGljIENvcmVNZWRp
YVdyYXBwZWQ8U2FtcGxlQ3Vyc29yPiB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgRGVjb2RlT3JkZXJJ
dGVyYXRvciA9IERlY29kZU9yZGVyU2FtcGxlTWFwOjppdGVyYXRvcjsKLSAgICB1c2luZyBQcmVz
ZW50YXRpb25PcmRlckl0ZXJhdG9yID0gUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Oml0ZXJh
dG9yOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBXcmFwcGVyQ2xhc3Mgd3JhcHBlckNsYXNzKCk7
Ci0gICAgc3RhdGljIENNQmFzZUNsYXNzSUQgd3JhcHBlckNsYXNzSUQoKTsKLSAgICBzdGF0aWMg
Q29yZU1lZGlhV3JhcHBlZDxTYW1wbGVDdXJzb3I+KiB1bndyYXAoQ01CYXNlT2JqZWN0UmVmKTsK
LQotICAgIGVudW0gY2xhc3MgRGVjb2RlZFNhbXBsZSB7Ci0gICAgICAgIEZpcnN0LAotICAgICAg
ICBMYXN0LAotICAgIH07Ci0KLSAgICBzdGF0aWMgUmVmUHRyPFNhbXBsZUN1cnNvcj4gY29weShB
bGxvY2F0b3ImJiwgY29uc3QgU2FtcGxlQ3Vyc29yJik7Ci0gICAgc3RhdGljIFJlZlB0cjxTYW1w
bGVDdXJzb3I+IGNyZWF0ZUF0RGVjb2RlZFNhbXBsZShBbGxvY2F0b3ImJiwgVHJhY2tSZWFkZXIm
LCBEZWNvZGVkU2FtcGxlKTsKLSAgICBzdGF0aWMgUmVmUHRyPFNhbXBsZUN1cnNvcj4gY3JlYXRl
QXRQcmVzZW50YXRpb25UaW1lKEFsbG9jYXRvciYmLCBUcmFja1JlYWRlciYsIE1lZGlhVGltZSk7
Ci0KLXByaXZhdGU6Ci0gICAgdXNpbmcgQ29yZU1lZGlhV3JhcHBlZDxTYW1wbGVDdXJzb3I+Ojp1
bndyYXA7Ci0gICAgdXNpbmcgTG9jYXRvciA9IFZhcmlhbnQ8TWVkaWFUaW1lLCBEZWNvZGVkU2Ft
cGxlLCBEZWNvZGVPcmRlckl0ZXJhdG9yLCBQcmVzZW50YXRpb25PcmRlckl0ZXJhdG9yPjsKLQot
ICAgIFNhbXBsZUN1cnNvcihBbGxvY2F0b3ImJiwgVHJhY2tSZWFkZXImLCBMb2NhdG9yKTsKLSAg
ICBTYW1wbGVDdXJzb3IoQWxsb2NhdG9yJiYsIGNvbnN0IFNhbXBsZUN1cnNvciYpOwotCi0gICAg
V2ViQ29yZTo6TWVkaWFTYW1wbGUqIGxvY2F0ZU1lZGlhU2FtcGxlKCkgY29uc3Q7Ci0gICAgT1NT
dGF0dXMgZ2V0TWVkaWFTYW1wbGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpNZWRp
YVNhbXBsZSYpPiYmKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gT3B0
aW9uYWw8SXRlcmF0b3I+IGxvY2F0ZUl0ZXJhdG9yKFNhbXBsZU1hcCYsIGJvb2wgaGFzQWxsU2Ft
cGxlcykgY29uc3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcmRlcmVkTWFwLCB0eXBlbmFt
ZSBTdGVwPiBTdGVwIHN0ZXBJbk9yZGVyZWRNYXAoU3RlcCk7Ci0KLSAgICAvLyBDb3JlTWVkaWFX
cmFwcGVkCi0gICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiV2ViS2l0OjpTYW1wbGVDdXJzb3IiX3M7IH0KLSAgICBPU1N0YXR1cyBjb3B5UHJvcGVydHko
Q0ZTdHJpbmdSZWYsIENGQWxsb2NhdG9yUmVmLCB2b2lkKiBjb3BpZWRWYWx1ZSkgZmluYWw7Ci0K
LSAgICAvLyBXcmFwcGVyQ2xhc3MKLSAgICBPU1N0YXR1cyBjb3B5KE1UUGx1Z2luU2FtcGxlQ3Vy
c29yUmVmKikgY29uc3Q7Ci0gICAgT1NTdGF0dXMgc3RlcEluRGVjb2RlT3JkZXJBbmRSZXBvcnRT
dGVwc1Rha2VuKGludDY0X3QsIGludDY0X3QqKTsKLSAgICBPU1N0YXR1cyBzdGVwSW5QcmVzZW50
YXRpb25PcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4oaW50NjRfdCwgaW50NjRfdCopOwotICAgIE9T
U3RhdHVzIHN0ZXBCeURlY29kZVRpbWUoQ01UaW1lLCBCb29sZWFuKik7Ci0gICAgT1NTdGF0dXMg
c3RlcEJ5UHJlc2VudGF0aW9uVGltZShDTVRpbWUsIEJvb2xlYW4qKTsKLSAgICBDRkNvbXBhcmlz
b25SZXN1bHQgY29tcGFyZUluRGVjb2RlT3JkZXIoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYpIGNv
bnN0OwotICAgIE9TU3RhdHVzIGdldFNhbXBsZVRpbWluZyhDTVNhbXBsZVRpbWluZ0luZm8qKSBj
b25zdDsKLSAgICBPU1N0YXR1cyBnZXRTeW5jSW5mbyhNVFBsdWdpblNhbXBsZUN1cnNvclN5bmNJ
bmZvKikgY29uc3Q7Ci0gICAgT1NTdGF0dXMgY29weUZvcm1hdERlc2NyaXB0aW9uKENNRm9ybWF0
RGVzY3JpcHRpb25SZWYqKSBjb25zdDsKLSAgICBPU1N0YXR1cyBjb3B5U2FtcGxlTG9jYXRpb24o
TVRQbHVnaW5TYW1wbGVDdXJzb3JTdG9yYWdlUmFuZ2UqLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYq
KSBjb25zdDsKLSAgICBPU1N0YXR1cyBnZXRQbGF5YWJsZUhvcml6b24oQ01UaW1lKikgY29uc3Q7
Ci0KLSAgICBSZWY8VHJhY2tSZWFkZXI+IG1fdHJhY2tSZWFkZXI7Ci0gICAgbXV0YWJsZSBMb2Nh
dG9yIG1fbG9jYXRvcjsKLSAgICBtdXRhYmxlIExvY2sgbV9sb2NhdG9yTG9jazsKLX07Ci0KLWNv
bnN0ZXhwciBTYW1wbGVDdXJzb3I6OldyYXBwZXJDbGFzcyBTYW1wbGVDdXJzb3I6OndyYXBwZXJD
bGFzcygpCi17Ci0gICAgcmV0dXJuIHsKLSNpZiBIQVZFKE1UX1BMVUdJTl9TQU1QTEVfQ1VSU09S
X1BMQVlBQkxFX0hPUklaT04pCi0gICAgICAgIC52ZXJzaW9uID0ga01UUGx1Z2luU2FtcGxlQ3Vy
c29yX0NsYXNzVmVyc2lvbl80LAotI2Vsc2UKLSAgICAgICAgLnZlcnNpb24gPSBrTVRQbHVnaW5T
YW1wbGVDdXJzb3JfQ2xhc3NWZXJzaW9uXzMsCi0jZW5kaWYKLSAgICAgICAgLmNvcHkgPSBbXShN
VFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIE1UUGx1Z2luU2FtcGxlQ3Vyc29y
UmVmKiBzYW1wbGVDdXJzb3JDb3B5KSB7Ci0gICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBs
ZUN1cnNvciktPmNvcHkoc2FtcGxlQ3Vyc29yQ29weSk7Ci0gICAgICAgIH0sCi0gICAgICAgIC5z
dGVwSW5EZWNvZGVPcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4gPSBbXShNVFBsdWdpblNhbXBsZUN1
cnNvclJlZiBzYW1wbGVDdXJzb3IsIGludDY0X3Qgc3RlcENvdW50LCBpbnQ2NF90KiBzdGVwc1Rh
a2VuKSB7Ci0gICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPnN0ZXBJbkRl
Y29kZU9yZGVyQW5kUmVwb3J0U3RlcHNUYWtlbihzdGVwQ291bnQsIHN0ZXBzVGFrZW4pOwotICAg
ICAgICB9LAotICAgICAgICAuc3RlcEluUHJlc2VudGF0aW9uT3JkZXJBbmRSZXBvcnRTdGVwc1Rh
a2VuID0gW10oTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYgc2FtcGxlQ3Vyc29yLCBpbnQ2NF90IHN0
ZXBDb3VudCwgaW50NjRfdCogc3RlcHNUYWtlbikgewotICAgICAgICAgICAgcmV0dXJuIHVud3Jh
cChzYW1wbGVDdXJzb3IpLT5zdGVwSW5QcmVzZW50YXRpb25PcmRlckFuZFJlcG9ydFN0ZXBzVGFr
ZW4oc3RlcENvdW50LCBzdGVwc1Rha2VuKTsKLSAgICAgICAgfSwKLSAgICAgICAgLnN0ZXBCeURl
Y29kZVRpbWUgPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIENNVGlt
ZSBkZWx0YURlY29kZVRpbWUsIEJvb2xlYW4qIHBvc2l0aW9uV2FzUGlubmVkKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPnN0ZXBCeURlY29kZVRpbWUoZGVsdGFE
ZWNvZGVUaW1lLCBwb3NpdGlvbldhc1Bpbm5lZCk7Ci0gICAgICAgIH0sCi0gICAgICAgIC5zdGVw
QnlQcmVzZW50YXRpb25UaW1lID0gW10oTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYgc2FtcGxlQ3Vy
c29yLCBDTVRpbWUgZGVsdGFQcmVzZW50YXRpb25UaW1lLCBCb29sZWFuKiBwb3NpdGlvbldhc1Bp
bm5lZCkgewotICAgICAgICAgICAgcmV0dXJuIHVud3JhcChzYW1wbGVDdXJzb3IpLT5zdGVwQnlQ
cmVzZW50YXRpb25UaW1lKGRlbHRhUHJlc2VudGF0aW9uVGltZSwgcG9zaXRpb25XYXNQaW5uZWQp
OwotICAgICAgICB9LAotICAgICAgICAuY29tcGFyZUluRGVjb2RlT3JkZXIgPSBbXShNVFBsdWdp
blNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIG90
aGVyU2FtcGxlQ3Vyc29yKSB7Ci0gICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNv
ciktPmNvbXBhcmVJbkRlY29kZU9yZGVyKG90aGVyU2FtcGxlQ3Vyc29yKTsKLSAgICAgICAgfSwK
LSAgICAgICAgLmdldFNhbXBsZVRpbWluZyA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNh
bXBsZUN1cnNvciwgQ01TYW1wbGVUaW1pbmdJbmZvKiBzYW1wbGVUaW1pbmdJbmZvKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPmdldFNhbXBsZVRpbWluZyhzYW1w
bGVUaW1pbmdJbmZvKTsKLSAgICAgICAgfSwKLSAgICAgICAgLmdldFN5bmNJbmZvID0gW10oTVRQ
bHVnaW5TYW1wbGVDdXJzb3JSZWYgc2FtcGxlQ3Vyc29yLCBNVFBsdWdpblNhbXBsZUN1cnNvclN5
bmNJbmZvKiBzeW5jSW5mbykgLT4gT1NTdGF0dXMgewotICAgICAgICAgICAgcmV0dXJuIHVud3Jh
cChzYW1wbGVDdXJzb3IpLT5nZXRTeW5jSW5mbyhzeW5jSW5mbyk7Ci0gICAgICAgIH0sCi0gICAg
ICAgIC5jb3B5Rm9ybWF0RGVzY3JpcHRpb24gPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBz
YW1wbGVDdXJzb3IsIENNRm9ybWF0RGVzY3JpcHRpb25SZWYqIGZvcm1hdERlc2NyaXB0aW9uKSB7
Ci0gICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPmNvcHlGb3JtYXREZXNj
cmlwdGlvbihmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAgICAgIH0sCi0gICAgICAgIC5jb3B5U2Ft
cGxlTG9jYXRpb24gPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIE1U
UGx1Z2luU2FtcGxlQ3Vyc29yU3RvcmFnZVJhbmdlKiBzdG9yYWdlUmFuZ2UsIE1UUGx1Z2luQnl0
ZVNvdXJjZVJlZiogYnl0ZVNvdXJjZSkgewotICAgICAgICAgICAgcmV0dXJuIHVud3JhcChzYW1w
bGVDdXJzb3IpLT5jb3B5U2FtcGxlTG9jYXRpb24oc3RvcmFnZVJhbmdlLCBieXRlU291cmNlKTsK
LSAgICAgICAgfSwKLSNpZiBIQVZFKE1UX1BMVUdJTl9TQU1QTEVfQ1VSU09SX1BMQVlBQkxFX0hP
UklaT04pCi0gICAgICAgIC5nZXRQbGF5YWJsZUhvcml6b24gPSBbXShNVFBsdWdpblNhbXBsZUN1
cnNvclJlZiBzYW1wbGVDdXJzb3IsIENNVGltZSogcGxheWFibGVIb3Jpem9uKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPmdldFBsYXlhYmxlSG9yaXpvbihwbGF5
YWJsZUhvcml6b24pOwotICAgICAgICB9LAotI2VuZGlmCi0gICAgfTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1RyYWNr
UmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9U
cmFja1JlYWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZGEyZjQyMGM5
MmZmZDNhMzE2MmMyNmExMzVhYjk1YmFiN2I2MzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0
UmVhZGVyL1RyYWNrUmVhZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRyYWNrUmVhZGVyLmgi
Ci0KLSNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQotCi0jaW5jbHVkZSAiRm9ybWF0UmVh
ZGVyLmgiCi0jaW5jbHVkZSAiU2FtcGxlQ3Vyc29yLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9BdWRp
b1RyYWNrUHJpdmF0ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFEZXNjcmlwdGlvbi5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvTWVkaWFTYW1wbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2FtcGxlQVZGT2Jq
Qy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2FtcGxlTWFwLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9W
aWRlb1RyYWNrUHJpdmF0ZS5oPgotI2luY2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1l
QVZGb3VuZGF0aW9uLmg+Ci0KLSNpbmNsdWRlIDxwYWwvY29jb2EvTWVkaWFUb29sYm94U29mdExp
bmsuaD4KLQotV1RGX0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChNVFBsdWdpblRyYWNrUmVhZGVyKTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBQQUw7Ci11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotY2xhc3MgTWVkaWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJs
aWMgTWVkaWFTYW1wbGVBVkZPYmpDIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlPiBjcmVhdGUoTWVkaWFTYW1wbGUmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291
cmNlUmVmIGJ5dGVTb3VyY2UsIHVpbnQ2NF90IHRyYWNrSUQpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBsZUJ5dGVSYW5nZShzYW1wbGUsIGJ5dGVTb3VyY2Us
IHRyYWNrSUQpKTsKLSAgICB9Ci0KLSAgICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJlc2VudGF0aW9uVGltZTsgfQotICAgIE1lZGlhVGltZSBk
ZWNvZGVUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kZWNvZGVUaW1lOyB9Ci0gICAgTWVk
aWFUaW1lIGR1cmF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAg
IHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7
IH0KLSAgICBGbG9hdFNpemUgcHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fcHJlc2VudGF0aW9uU2l6ZTsgfQotICAgIFNhbXBsZUZsYWdzIGZsYWdzKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9mbGFnczsgfQotICAgIE9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9ieXRlUmFuZ2U7IH0KLQotICAgIEF0b21TdHJpbmcg
dHJhY2tJRCgpIGNvbnN0IGZpbmFsOwotICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxl
KCkgZmluYWw7Ci0gICAgdm9pZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJikg
ZmluYWw7Ci0gICAgdm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1l
ZGlhVGltZSYpIGZpbmFsOwotCi1wcml2YXRlOgotICAgIE1lZGlhU2FtcGxlQnl0ZVJhbmdlKE1l
ZGlhU2FtcGxlJiwgTVRQbHVnaW5CeXRlU291cmNlUmVmLCB1aW50NjRfdCB0cmFja0lEKTsKLQot
ICAgIE1lZGlhVGltZSBtX3ByZXNlbnRhdGlvblRpbWU7Ci0gICAgTWVkaWFUaW1lIG1fZGVjb2Rl
VGltZTsKLSAgICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKLSAgICBzaXplX3QgbV9zaXplSW5CeXRl
czsKLSAgICBGbG9hdFNpemUgbV9wcmVzZW50YXRpb25TaXplOwotICAgIFNhbXBsZUZsYWdzIG1f
ZmxhZ3M7Ci0gICAgdWludDY0X3QgbV90cmFja0lEOwotICAgIE9wdGlvbmFsPEJ5dGVSYW5nZT4g
bV9ieXRlUmFuZ2U7Ci0gICAgUmV0YWluUHRyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZj4gbV9ieXRl
U291cmNlOwotICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBtX2Zvcm1hdERl
c2NyaXB0aW9uOwotfTsKLQotTWVkaWFTYW1wbGVCeXRlUmFuZ2U6Ok1lZGlhU2FtcGxlQnl0ZVJh
bmdlKE1lZGlhU2FtcGxlJiBzYW1wbGUsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNl
LCB1aW50NjRfdCB0cmFja0lEKQotICAgIDogTWVkaWFTYW1wbGVBVkZPYmpDKG51bGxwdHIpCi0g
ICAgLCBtX3ByZXNlbnRhdGlvblRpbWUoc2FtcGxlLnByZXNlbnRhdGlvblRpbWUoKSkKLSAgICAs
IG1fZGVjb2RlVGltZShzYW1wbGUuZGVjb2RlVGltZSgpKQotICAgICwgbV9kdXJhdGlvbihzYW1w
bGUuZHVyYXRpb24oKSkKLSAgICAsIG1fc2l6ZUluQnl0ZXMoc2FtcGxlLnNpemVJbkJ5dGVzKCkp
Ci0gICAgLCBtX3ByZXNlbnRhdGlvblNpemUoc2FtcGxlLnByZXNlbnRhdGlvblNpemUoKSkKLSAg
ICAsIG1fZmxhZ3Moc2FtcGxlLmZsYWdzKCkpCi0gICAgLCBtX3RyYWNrSUQodHJhY2tJRCkKLSAg
ICAsIG1fYnl0ZVJhbmdlKHNhbXBsZS5ieXRlUmFuZ2UoKSkKLSAgICAsIG1fYnl0ZVNvdXJjZShi
eXRlU291cmNlKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIGF1dG8gcGxh
dGZvcm1TYW1wbGUgPSBzYW1wbGUucGxhdGZvcm1TYW1wbGUoKTsKLSAgICBzd2l0Y2ggKHBsYXRm
b3JtU2FtcGxlLnR5cGUpIHsKLSAgICBjYXNlIFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZl
clR5cGU6Ci0gICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24gPSBDTVNhbXBsZUJ1ZmZlckdldEZv
cm1hdERlc2NyaXB0aW9uKHBsYXRmb3JtU2FtcGxlLnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5
cGU6Ci0gICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24gPSBwbGF0Zm9ybVNhbXBsZS5zYW1wbGUu
Ynl0ZVJhbmdlU2FtcGxlLnNlY29uZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
QXRvbVN0cmluZyBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6dHJhY2tJRCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIEF0b21TdHJpbmc6Om51bWJlcihtX3RyYWNrSUQpOwotfQotCi1QbGF0Zm9ybVNhbXBs
ZSBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6cGxhdGZvcm1TYW1wbGUoKQotewotICAgIHJldHVybiB7
Ci0gICAgICAgIFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlLAotICAgICAgICB7
IC5ieXRlUmFuZ2VTYW1wbGUgPSBzdGQ6Om1ha2VfcGFpcihtX2J5dGVTb3VyY2UuZ2V0KCksIG1f
Zm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpIH0sCi0gICAgfTsKLX0KLQotdm9pZCBNZWRpYVNhbXBs
ZUJ5dGVSYW5nZTo6b2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYgb2Zmc2V0KQot
ewotICAgIHNldFRpbWVzdGFtcHMocHJlc2VudGF0aW9uVGltZSgpICsgb2Zmc2V0LCBkZWNvZGVU
aW1lKCkgKyBvZmZzZXQpOwotfQotCi12b2lkIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpzZXRUaW1l
c3RhbXBzKGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgY29uc3QgTWVkaWFUaW1l
JiBkZWNvZGVUaW1lKQotewotICAgIG1fcHJlc2VudGF0aW9uVGltZSA9IHByZXNlbnRhdGlvblRp
bWU7Ci0gICAgbV9kZWNvZGVUaW1lID0gZGVjb2RlVGltZTsKLX0KLQotQ01CYXNlQ2xhc3NJRCBU
cmFja1JlYWRlcjo6d3JhcHBlckNsYXNzSUQoKQotewotICAgIHJldHVybiBNVFBsdWdpblRyYWNr
UmVhZGVyR2V0Q2xhc3NJRCgpOwotfQotCi1Db3JlTWVkaWFXcmFwcGVkPFRyYWNrUmVhZGVyPiog
VHJhY2tSZWFkZXI6OnVud3JhcChDTUJhc2VPYmplY3RSZWYgb2JqZWN0KQotewotICAgIHJldHVy
biB1bndyYXAoY2hlY2tlZF9jZl9jYXN0PFdyYXBwZXJSZWY+KG9iamVjdCkpOwotfQotCi1SZWZQ
dHI8VHJhY2tSZWFkZXI+IFRyYWNrUmVhZGVyOjpjcmVhdGUoQWxsb2NhdG9yJiYgYWxsb2NhdG9y
LCBjb25zdCBGb3JtYXRSZWFkZXImIGZvcm1hdFJlYWRlciwgQ01NZWRpYVR5cGUgbWVkaWFUeXBl
LCB1aW50NjRfdCB0cmFja0lELCBPcHRpb25hbDxib29sPiBlbmFibGVkKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgKGFsbG9jYXRvcikgVHJhY2tSZWFkZXIoV1RGTW92ZShhbGxvY2F0b3Ip
LCBmb3JtYXRSZWFkZXIsIG1lZGlhVHlwZSwgdHJhY2tJRCwgZW5hYmxlZCkpOwotfQotCi1Xb3Jr
UXVldWUmIFRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKQotewotICAgIHN0YXRpYyBhdXRvJiBx
dWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJLaXQ6OlRyYWNrUmVhZGVyIFN0b3JhZ2UgUXVl
dWUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCkubGVha1JlZigpOwotICAgIHJldHVybiBxdWV1
ZTsKLX0KLQotVHJhY2tSZWFkZXI6OlRyYWNrUmVhZGVyKEFsbG9jYXRvciYmIGFsbG9jYXRvciwg
Y29uc3QgRm9ybWF0UmVhZGVyJiBmb3JtYXRSZWFkZXIsIENNTWVkaWFUeXBlIG1lZGlhVHlwZSwg
dWludDY0X3QgdHJhY2tJRCwgT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKLSAgICA6IENvcmVNZWRp
YVdyYXBwZWQoV1RGTW92ZShhbGxvY2F0b3IpKQotICAgICwgbV90cmFja0lEKHRyYWNrSUQpCi0g
ICAgLCBtX21lZGlhVHlwZShtZWRpYVR5cGUpCi0gICAgLCBtX2R1cmF0aW9uKGZvcm1hdFJlYWRl
ci5kdXJhdGlvbigpKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYg
KGVuYWJsZWQpCi0gICAgICAgIG1faXNFbmFibGVkID0gZW5hYmxlZC52YWx1ZSgpID8gRW5hYmxl
ZDo6VHJ1ZSA6IEVuYWJsZWQ6OkZhbHNlOwotfQotCi12b2lkIFRyYWNrUmVhZGVyOjphZGRTYW1w
bGUoUmVmPE1lZGlhU2FtcGxlPiYmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVT
b3VyY2UpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX3NhbXBsZVN0b3JhZ2VMb2NrKTsKLSAgICBpZiAoIW1fc2FtcGxlU3RvcmFn
ZSkKLSAgICAgICAgbV9zYW1wbGVTdG9yYWdlID0gbWFrZVVuaXF1ZTxTYW1wbGVTdG9yYWdlPigp
OwotCi0gICAgQVNTRVJUKCFzYW1wbGUtPmlzRGl2aXNhYmxlKCkgJiYgc2FtcGxlLT5ieXRlUmFu
Z2UoKSk7Ci0gICAgYXV0byBzYW1wbGVUb0FkZCA9IE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpjcmVh
dGUoc2FtcGxlLmdldCgpLCBieXRlU291cmNlLCBtX3RyYWNrSUQpOwotCi0gICAgLy8gRklYTUU6
IEV2ZW4gdGhvdWdoIFdlYk0gbXV4ZXIgZ3VpZGVsaW5lcyBzYXkgdGhpcyBtdXN0IG5vdCBoYXBw
ZW4sIHNvbWUgdmlkZW8gdHJhY2tzIGhhdmUgdHdvCi0gICAgLy8gY29uc2VjdXRpdmUgZnJhbWVz
IHdpdGggdGhlIHNhbWUgcHJlc2VudGF0aW9uIHRpbWUuIFNhbXBsZU1hcCB3aWxsIG5vdCBzdG9y
ZSB0aGUgc2Vjb25kIGZyYW1lCi0gICAgLy8gaW4gdGhlc2UgY2FzZXMsIGNvcnJ1cHRpbmcgYWxs
IHN1YnNlcXVlbnQgbm9uLWtleSBmcmFtZXMuIEZpbmQgYSB3YXkgdG8gc3RvcmUgZnJhbWVzIHdp
dGgKLSAgICAvLyBkdXBsaWNhdGUgcHJlc2VudGF0aW9uIHRpbWVzLgotCi0gICAgbV9zYW1wbGVT
dG9yYWdlLT5zYW1wbGVNYXAuYWRkU2FtcGxlKHNhbXBsZVRvQWRkLmdldCgpKTsKLSAgICBtX3Nh
bXBsZVN0b3JhZ2VDb25kaXRpb24ubm90aWZ5QWxsKCk7Ci19Ci0KLXZvaWQgVHJhY2tSZWFkZXI6
OndhaXRGb3JTYW1wbGUoRnVuY3Rpb248Ym9vbChTYW1wbGVNYXAmLCBib29sKT4mJiBwcmVkaWNh
dGUpIGNvbnN0Ci17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZVN0b3JhZ2VM
b2NrKTsKLSAgICBpZiAoIW1fc2FtcGxlU3RvcmFnZSkKLSAgICAgICAgbV9zYW1wbGVTdG9yYWdl
ID0gbWFrZVVuaXF1ZTxTYW1wbGVTdG9yYWdlPigpOwotICAgIG1fc2FtcGxlU3RvcmFnZUNvbmRp
dGlvbi53YWl0KG1fc2FtcGxlU3RvcmFnZUxvY2ssIFtwcmVkaWNhdGUgPSBXVEZNb3ZlKHByZWRp
Y2F0ZSksIHRoaXNdIHsKLSAgICAgICAgcmV0dXJuIHByZWRpY2F0ZShtX3NhbXBsZVN0b3JhZ2Ut
PnNhbXBsZU1hcCwgbV9zYW1wbGVTdG9yYWdlLT5oYXNBbGxTYW1wbGVzKTsKLSAgICB9KTsKLX0K
LQotdm9pZCBUcmFja1JlYWRlcjo6ZmluaXNoUGFyc2luZygpCi17Ci0gICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZVN0b3JhZ2VM
b2NrKTsKLSAgICBpZiAoIW1fc2FtcGxlU3RvcmFnZSkKLSAgICAgICAgbV9zYW1wbGVTdG9yYWdl
ID0gbWFrZVVuaXF1ZTxTYW1wbGVTdG9yYWdlPigpOwotICAgIG1fc2FtcGxlU3RvcmFnZS0+aGFz
QWxsU2FtcGxlcyA9IHRydWU7Ci0gICAgaWYgKG1faXNFbmFibGVkID09IEVuYWJsZWQ6OlVua25v
d24pCi0gICAgICAgIG1faXNFbmFibGVkID0gbV9zYW1wbGVTdG9yYWdlLT5zYW1wbGVNYXAuZW1w
dHkoKSA/IEVuYWJsZWQ6OkZhbHNlIDogRW5hYmxlZDo6VHJ1ZTsKLSAgICBtX3NhbXBsZVN0b3Jh
Z2VDb25kaXRpb24ubm90aWZ5QWxsKCk7Ci19Ci0KLU9TU3RhdHVzIFRyYWNrUmVhZGVyOjpjb3B5
UHJvcGVydHkoQ0ZTdHJpbmdSZWYga2V5LCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIHZvaWQq
IGNvcGllZFZhbHVlKQotewotICAgIC8vIERvbid0IGJsb2NrIHdhaXRpbmcgZm9yIG1lZGlhIGlm
IHRoZSB3ZSBrbm93IHRoZSBlbmFibGVkIHN0YXRlLgotICAgIGlmIChDRkVxdWFsKGtleSwgUEFM
OjpnZXRfTWVkaWFUb29sYm94X2tNVFBsdWdpblRyYWNrUmVhZGVyUHJvcGVydHlfRW5hYmxlZCgp
KSAmJiBtX2lzRW5hYmxlZCAhPSBFbmFibGVkOjpVbmtub3duKSB7Ci0gICAgICAgICpyZWludGVy
cHJldF9jYXN0PENGQm9vbGVhblJlZio+KGNvcGllZFZhbHVlKSA9IHJldGFpblB0cihtX2lzRW5h
YmxlZCA9PSBFbmFibGVkOjpUcnVlID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2Up
LmxlYWtSZWYoKTsKLSAgICAgICAgcmV0dXJuIG5vRXJyOwotICAgIH0KLQotICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9zYW1wbGVTdG9yYWdlTG9jayk7Ci0gICAgbV9zYW1wbGVTdG9yYWdl
Q29uZGl0aW9uLndhaXQobV9zYW1wbGVTdG9yYWdlTG9jaywgWyZdIHsKLSAgICAgICAgcmV0dXJu
ICEhbV9zYW1wbGVTdG9yYWdlOwotICAgIH0pOwotCi0gICAgYXV0byYgc2FtcGxlTWFwID0gbV9z
YW1wbGVTdG9yYWdlLT5zYW1wbGVNYXA7Ci0KLSAgICBpZiAoQ0ZFcXVhbChrZXksIFBBTDo6Z2V0
X01lZGlhVG9vbGJveF9rTVRQbHVnaW5UcmFja1JlYWRlclByb3BlcnR5X0VuYWJsZWQoKSkpIHsK
LSAgICAgICAgaWYgKG1faXNFbmFibGVkID09IEVuYWJsZWQ6OlVua25vd24pCi0gICAgICAgICAg
ICBtX2lzRW5hYmxlZCA9IHNhbXBsZU1hcC5lbXB0eSgpID8gRW5hYmxlZDo6RmFsc2UgOiBFbmFi
bGVkOjpUcnVlOwotCi0gICAgICAgICpyZWludGVycHJldF9jYXN0PENGQm9vbGVhblJlZio+KGNv
cGllZFZhbHVlKSA9IHJldGFpblB0cihtX2lzRW5hYmxlZCA9PSBFbmFibGVkOjpUcnVlID8ga0NG
Qm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2UpLmxlYWtSZWYoKTsKLSAgICAgICAgcmV0dXJu
IG5vRXJyOwotICAgIH0KLQotICAgIGlmIChzYW1wbGVNYXAuZW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGtDTUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5vdEF2YWlsYWJsZTsKLQotICAgIGF1dG8mIGxh
c3RTYW1wbGUgPSAqc2FtcGxlTWFwLmRlY29kZU9yZGVyKCkucmJlZ2luKCktPnNlY29uZDsKLQot
ICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpnZXRfTWVkaWFUb29sYm94X2tNVFBsdWdpblRyYWNr
UmVhZGVyUHJvcGVydHlfRm9ybWF0RGVzY3JpcHRpb25BcnJheSgpKSkgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGxhc3RTYW1wbGUucGxhdGZvcm1T
YW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlKTsKLSAg
ICAgICAgY29uc3Qgdm9pZCogZGVzY3JpcHRpb25zWzFdID0geyBsYXN0U2FtcGxlLnBsYXRmb3Jt
U2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQgfTsKLSAgICAgICAgKnJlaW50
ZXJwcmV0X2Nhc3Q8Q0ZBcnJheVJlZio+KGNvcGllZFZhbHVlKSA9IGFkb3B0Q0YoQ0ZBcnJheUNy
ZWF0ZShhbGxvY2F0b3IsIGRlc2NyaXB0aW9ucywgMSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykp
LmxlYWtSZWYoKTsKLSAgICAgICAgcmV0dXJuIG5vRXJyOwotICAgIH0KLQotICAgIGlmIChDRkVx
dWFsKGtleSwgUEFMOjpnZXRfTWVkaWFUb29sYm94X2tNVFBsdWdpblRyYWNrUmVhZGVyUHJvcGVy
dHlfTm9taW5hbEZyYW1lUmF0ZSgpKSkgewotICAgICAgICBmbG9hdCBmcmFtZVJhdGUgPSAxIC8g
bGFzdFNhbXBsZS5kdXJhdGlvbigpLnRvRmxvYXQoKTsKLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nh
c3Q8Q0ZOdW1iZXJSZWYqPihjb3BpZWRWYWx1ZSkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGFs
bG9jYXRvciwga0NGTnVtYmVyRmxvYXQzMlR5cGUsICZmcmFtZVJhdGUpKS5sZWFrUmVmKCk7Ci0g
ICAgICAgIHJldHVybiBub0VycjsKLSAgICB9Ci0KLSAgICByZXR1cm4ga0NNQmFzZU9iamVjdEVy
cm9yX1ZhbHVlTm90QXZhaWxhYmxlOwotfQotCi12b2lkIFRyYWNrUmVhZGVyOjpmaW5hbGl6ZSgp
Ci17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZVN0b3JhZ2VMb2NrKTsKLSAg
ICBzdG9yYWdlUXVldWUoKS5kaXNwYXRjaChbc2FtcGxlU3RvcmFnZSA9IHN0ZDo6ZXhjaGFuZ2Uo
bV9zYW1wbGVTdG9yYWdlLCBudWxscHRyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgc2FtcGxlU3Rv
cmFnZSA9IG51bGxwdHI7Ci0gICAgfSk7Ci0gICAgQ29yZU1lZGlhV3JhcHBlZDxUcmFja1JlYWRl
cj46OmZpbmFsaXplKCk7Ci19Ci0KLU9TU3RhdHVzIFRyYWNrUmVhZGVyOjpnZXRUcmFja0luZm8o
TVRQZXJzaXN0ZW50VHJhY2tJRCogdHJhY2tJRCwgQ01NZWRpYVR5cGUqIG1lZGlhVHlwZSkKLXsK
LSAgICAqdHJhY2tJRCA9IG1fdHJhY2tJRDsKLSAgICAqbWVkaWFUeXBlID0gbV9tZWRpYVR5cGU7
Ci0gICAgcmV0dXJuIG5vRXJyOwotfQotCi1PU1N0YXR1cyBUcmFja1JlYWRlcjo6Y3JlYXRlQ3Vy
c29yQXRQcmVzZW50YXRpb25UaW1lU3RhbXAoQ01UaW1lIHRpbWUsIE1UUGx1Z2luU2FtcGxlQ3Vy
c29yUmVmKiBzYW1wbGVDdXJzb3IpCi17Ci0gICAgKnNhbXBsZUN1cnNvciA9IFNhbXBsZUN1cnNv
cjo6Y3JlYXRlQXRQcmVzZW50YXRpb25UaW1lKGFsbG9jYXRvcigpLCAqdGhpcywgUEFMOjp0b01l
ZGlhVGltZSh0aW1lKSkubGVha1JlZigpLT53cmFwcGVyKCk7Ci0gICAgcmV0dXJuIG5vRXJyOwot
fQotCi1PU1N0YXR1cyBUcmFja1JlYWRlcjo6Y3JlYXRlQ3Vyc29yQXRGaXJzdFNhbXBsZUluRGVj
b2RlT3JkZXIoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqIHNhbXBsZUN1cnNvcikKLXsKLSAgICAq
c2FtcGxlQ3Vyc29yID0gU2FtcGxlQ3Vyc29yOjpjcmVhdGVBdERlY29kZWRTYW1wbGUoYWxsb2Nh
dG9yKCksICp0aGlzLCBTYW1wbGVDdXJzb3I6OkRlY29kZWRTYW1wbGU6OkZpcnN0KS5sZWFrUmVm
KCktPndyYXBwZXIoKTsKLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLU9TU3RhdHVzIFRyYWNrUmVh
ZGVyOjpjcmVhdGVDdXJzb3JBdExhc3RTYW1wbGVJbkRlY29kZU9yZGVyKE1UUGx1Z2luU2FtcGxl
Q3Vyc29yUmVmKiBzYW1wbGVDdXJzb3IpCi17Ci0gICAgKnNhbXBsZUN1cnNvciA9IFNhbXBsZUN1
cnNvcjo6Y3JlYXRlQXREZWNvZGVkU2FtcGxlKGFsbG9jYXRvcigpLCAqdGhpcywgU2FtcGxlQ3Vy
c29yOjpEZWNvZGVkU2FtcGxlOjpMYXN0KS5sZWFrUmVmKCktPndyYXBwZXIoKTsKLSAgICByZXR1
cm4gbm9FcnI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxF
KFdFQk1fRk9STUFUX1JFQURFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9NZWRpYUZvcm1hdFJlYWRlci9UcmFja1JlYWRlci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL1RyYWNrUmVhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGYwMWZmZGQ3MGM5NzkzZDliNTRiNDIzZWI0NDliNGQ5N2ZjYTkwYTUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1RyYWNrUmVhZGVyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KFdFQk1fRk9STUFUX1JFQURFUikKLQotI2luY2x1ZGUgIkNvcmVNZWRpYVdyYXBwZWQuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL1NhbXBsZU1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4K
LQotREVDTEFSRV9DT1JFX01FRElBX1RSQUlUUyhUcmFja1JlYWRlcik7Ci0KLW5hbWVzcGFjZSBX
VEYgewotY2xhc3MgV29ya1F1ZXVlOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBB
dWRpb1RyYWNrUHJpdmF0ZTsKLWNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7Ci1jbGFzcyBN
ZWRpYVNhbXBsZTsKLWNsYXNzIFRyYWNrUHJpdmF0ZUJhc2U7Ci1jbGFzcyBWaWRlb1RyYWNrUHJp
dmF0ZTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEZvcm1hdFJlYWRlcjsKLQot
Y2xhc3MgVHJhY2tSZWFkZXIgZmluYWwgOiBwdWJsaWMgQ29yZU1lZGlhV3JhcHBlZDxUcmFja1Jl
YWRlcj4gewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgV3JhcHBlckNsYXNzIHdyYXBw
ZXJDbGFzcygpOwotICAgIHN0YXRpYyBDTUJhc2VDbGFzc0lEIHdyYXBwZXJDbGFzc0lEKCk7Ci0g
ICAgc3RhdGljIENvcmVNZWRpYVdyYXBwZWQ8VHJhY2tSZWFkZXI+KiB1bndyYXAoQ01CYXNlT2Jq
ZWN0UmVmKTsKLSAgICBzdGF0aWMgV1RGOjpXb3JrUXVldWUmIHN0b3JhZ2VRdWV1ZSgpOwotCi0g
ICAgc3RhdGljIFJlZlB0cjxUcmFja1JlYWRlcj4gY3JlYXRlKEFsbG9jYXRvciYmLCBjb25zdCBG
b3JtYXRSZWFkZXImLCBDTU1lZGlhVHlwZSwgdWludDY0X3QsIE9wdGlvbmFsPGJvb2w+KTsKLQot
ICAgIHVpbnQ2NF90IHRyYWNrSUQoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrSUQ7IH0KLSAgICB2
b2lkIGFkZFNhbXBsZShSZWY8V2ViQ29yZTo6TWVkaWFTYW1wbGU+JiYsIE1UUGx1Z2luQnl0ZVNv
dXJjZVJlZik7Ci0gICAgdm9pZCB3YWl0Rm9yU2FtcGxlKEZ1bmN0aW9uPGJvb2woV2ViQ29yZTo6
U2FtcGxlTWFwJiwgYm9vbCk+JiYpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRFbmFibGVkKGJvb2wg
ZW5hYmxlZCkgeyBtX2lzRW5hYmxlZCA9IGVuYWJsZWQgPyBFbmFibGVkOjpUcnVlIDogRW5hYmxl
ZDo6RmFsc2U7IH0KLSAgICBDTU1lZGlhVHlwZSBtZWRpYVR5cGUoKSBjb25zdCB7IHJldHVybiBt
X21lZGlhVHlwZTsgfQotCi0gICAgdm9pZCBmaW5pc2hQYXJzaW5nKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgdXNpbmcgQ29yZU1lZGlhV3JhcHBlZDxUcmFja1JlYWRlcj46OnVud3JhcDsKLQotICAgIFRy
YWNrUmVhZGVyKEFsbG9jYXRvciYmLCBjb25zdCBGb3JtYXRSZWFkZXImLCBDTU1lZGlhVHlwZSwg
dWludDY0X3QsIE9wdGlvbmFsPGJvb2w+KTsKLQotICAgIC8vIENNQmFzZUNsYXNzCi0gICAgU3Ry
aW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAiV2ViS2l0OjpUcmFj
a1JlYWRlciJfczsgfQotICAgIE9TU3RhdHVzIGNvcHlQcm9wZXJ0eShDRlN0cmluZ1JlZiwgQ0ZB
bGxvY2F0b3JSZWYsIHZvaWQqIGNvcGllZFZhbHVlKSBmaW5hbDsKLSAgICB2b2lkIGZpbmFsaXpl
KCkgZmluYWw7Ci0KLSAgICAvLyBXcmFwcGVyQ2xhc3MKLSAgICBPU1N0YXR1cyBnZXRUcmFja0lu
Zm8oTVRQZXJzaXN0ZW50VHJhY2tJRCosIENNTWVkaWFUeXBlKik7Ci0gICAgT1NTdGF0dXMgY3Jl
YXRlQ3Vyc29yQXRQcmVzZW50YXRpb25UaW1lU3RhbXAoQ01UaW1lLCBNVFBsdWdpblNhbXBsZUN1
cnNvclJlZiopOwotICAgIE9TU3RhdHVzIGNyZWF0ZUN1cnNvckF0Rmlyc3RTYW1wbGVJbkRlY29k
ZU9yZGVyKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKik7Ci0gICAgT1NTdGF0dXMgY3JlYXRlQ3Vy
c29yQXRMYXN0U2FtcGxlSW5EZWNvZGVPcmRlcihNVFBsdWdpblNhbXBsZUN1cnNvclJlZiopOwot
Ci0gICAgc3RydWN0IFNhbXBsZVN0b3JhZ2UgewotICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFT
VF9BTExPQ0FURUQ7Ci0gICAgICAgIH5TYW1wbGVTdG9yYWdlKCkgeyBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsgfQotICAgICAgICBXZWJDb3JlOjpTYW1wbGVNYXAgc2FtcGxlTWFwOwotICAgICAg
ICBib29sIGhhc0FsbFNhbXBsZXMgeyBmYWxzZSB9OwotICAgIH07Ci0KLSAgICBlbnVtIEVuYWJs
ZWQgOiB1aW50OF90IHsgVW5rbm93biwgRmFsc2UsIFRydWUgfTsKLQotICAgIGNvbnN0IHVpbnQ2
NF90IG1fdHJhY2tJRDsKLSAgICBjb25zdCBDTU1lZGlhVHlwZSBtX21lZGlhVHlwZTsKLSAgICBj
b25zdCBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKLSAgICBzdGQ6OmF0b21pYzxFbmFibGVkPiBtX2lz
RW5hYmxlZCB7IEVuYWJsZWQ6OlVua25vd24gfTsKLSAgICBtdXRhYmxlIENvbmRpdGlvbiBtX3Nh
bXBsZVN0b3JhZ2VDb25kaXRpb247Ci0gICAgbXV0YWJsZSBMb2NrIG1fc2FtcGxlU3RvcmFnZUxv
Y2s7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8U2FtcGxlU3RvcmFnZT4gbV9zYW1wbGVT
dG9yYWdlOwotfTsKLQotY29uc3RleHByIFRyYWNrUmVhZGVyOjpXcmFwcGVyQ2xhc3MgVHJhY2tS
ZWFkZXI6OndyYXBwZXJDbGFzcygpCi17Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLnZlcnNpb24g
PSBrTVRQbHVnaW5UcmFja1JlYWRlcl9DbGFzc1ZlcnNpb25fMSwKLSAgICAgICAgLmdldFRyYWNr
SW5mbyA9IFtdKE1UUGx1Z2luVHJhY2tSZWFkZXJSZWYgdHJhY2tSZWFkZXIsIE1UUGVyc2lzdGVu
dFRyYWNrSUQqIHRyYWNrSUQsIENNTWVkaWFUeXBlKiBtZWRpYVR5cGUpIHsKLSAgICAgICAgICAg
IHJldHVybiB1bndyYXAodHJhY2tSZWFkZXIpLT5nZXRUcmFja0luZm8odHJhY2tJRCwgbWVkaWFU
eXBlKTsKLSAgICAgICAgfSwKLSAgICAgICAgLmNyZWF0ZUN1cnNvckF0UHJlc2VudGF0aW9uVGlt
ZVN0YW1wID0gW10oTVRQbHVnaW5UcmFja1JlYWRlclJlZiB0cmFja1JlYWRlciwgQ01UaW1lIHRp
bWVzdGFtcCwgTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqIGN1cnNvcikgewotICAgICAgICAgICAg
cmV0dXJuIHVud3JhcCh0cmFja1JlYWRlciktPmNyZWF0ZUN1cnNvckF0UHJlc2VudGF0aW9uVGlt
ZVN0YW1wKHRpbWVzdGFtcCwgY3Vyc29yKTsKLSAgICAgICAgfSwKLSAgICAgICAgLmNyZWF0ZUN1
cnNvckF0Rmlyc3RTYW1wbGVJbkRlY29kZU9yZGVyID0gW10oTVRQbHVnaW5UcmFja1JlYWRlclJl
ZiB0cmFja1JlYWRlciwgTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqIGN1cnNvcikgewotICAgICAg
ICAgICAgcmV0dXJuIHVud3JhcCh0cmFja1JlYWRlciktPmNyZWF0ZUN1cnNvckF0Rmlyc3RTYW1w
bGVJbkRlY29kZU9yZGVyKGN1cnNvcik7Ci0gICAgICAgIH0sCi0gICAgICAgIC5jcmVhdGVDdXJz
b3JBdExhc3RTYW1wbGVJbkRlY29kZU9yZGVyID0gW10oTVRQbHVnaW5UcmFja1JlYWRlclJlZiB0
cmFja1JlYWRlciwgTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqIGN1cnNvcikgewotICAgICAgICAg
ICAgcmV0dXJuIHVud3JhcCh0cmFja1JlYWRlciktPmNyZWF0ZUN1cnNvckF0TGFzdFNhbXBsZUlu
RGVjb2RlT3JkZXIoY3Vyc29yKTsKLSAgICAgICAgfSwKLSAgICB9OwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggY2JhMzgyNjQ5MDFmYTFkOGUwZjUwZjVlN2Q0ODc5MTU3NGY0
ZjRkZi4uYjgzZDczODYyNTk2OGRmZDdlODkyM2QyZmU3ODQyYmIwNTcyZmUyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0NvY29hLnR4dApAQCAtMTA3LDcgKzEwNyw3IEBAIFNoYXJlZC9BUEkvYy9jZi9XS1VSTENG
Lm1tCiBTaGFyZWQvQVBJL2MvY2cvV0tJbWFnZUNHLmNwcAogCiBTaGFyZWQvQVBJL2MvbWFjL1dL
Q2VydGlmaWNhdGVJbmZvTWFjLm1tCi1TaGFyZWQvQVBJL2MvbWFjL1dLRm9ybWF0UmVhZGVyLmNw
cAorU2hhcmVkL0FQSS9jL21hYy9XS01lZGlhRm9ybWF0UmVhZGVyLmNwcAogU2hhcmVkL0FQSS9j
L21hYy9XS09iakNUeXBlV3JhcHBlclJlZi5tbQogU2hhcmVkL0FQSS9jL21hYy9XS1VSTFJlcXVl
c3ROUy5tbQogU2hhcmVkL0FQSS9jL21hYy9XS1VSTFJlc3BvbnNlTlMubW0KQEAgLTIxNSw5ICsy
MTUsMTAgQEAgU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0RGF0YS5tbQogU2hhcmVkL21hYy9X
ZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQogCiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL0Nv
cmVNZWRpYVdyYXBwZWQuY3BwCi1TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL0Zvcm1hdFJl
YWRlci5jcHAKLVNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvU2FtcGxlQ3Vyc29yLmNwcAot
U2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9UcmFja1JlYWRlci5jcHAKK1NoYXJlZC9tYWMv
TWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCitTaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcAorU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5jcHAKK1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRS
ZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHAKIAogU2hhcmVkL1BsdWdpbnMvbWFjL1BsdWdpblNh
bmRib3hQcm9maWxlLm1tCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDcyNWFiNmExOGVjYzI3ZjM5YWNjNGM1NTg0OWYxOTQ5OGQ1Mzg5
ZDIuLjA1Njk4MDI4ZmViNTFjNDdiNmNlN2ZkMmMyODQ2Y2ZkZDkxN2RlOWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTU0MywxMSAr
MTU0MywxMSBAQAogCQlBMTNCM0RBMjIwN0YzOURFMDA5MEM1OEQgLyogTW9iaWxlV2lGaVNQSS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEzQjNEQTEy
MDdGMzlERTAwOTBDNThEIC8qIE1vYmlsZVdpRmlTUEkuaCAqLzsgfTsKIAkJQTEzREM2ODIyMDdB
QTZCMjAwNjZFRjcyIC8qIFdLQXBwbGljYXRpb25TdGF0ZVRyYWNraW5nVmlldy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEzREM2ODAyMDdBQTZCMjAw
NjZFRjcyIC8qIFdLQXBwbGljYXRpb25TdGF0ZVRyYWNraW5nVmlldy5oICovOyB9OwogCQlBMTU3
OTc2NDI1ODJCMURCMDA1MjgyMzYgLyogTWVkaWFGb3JtYXRSZWFkZXIuYnVuZGxlIGluIENvcHkg
UGx1Zy1pbnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE2RTY2MDAyNTgx
OTMwODAwRUUxNzQ5IC8qIE1lZGlhRm9ybWF0UmVhZGVyLmJ1bmRsZSAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChSZW1vdmVIZWFkZXJzT25Db3B5LCApOyB9OyB9OwotCQlBMTU3OTlCNzI1
ODQ0MzMyMDA1MjgyMzYgLyogVHJhY2tSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNTc5OUFFMjU4NDQzMzEwMDUyODIzNiAvKiBUcmFja1Jl
YWRlci5oICovOyB9OworCQlBMTU3OTlCNzI1ODQ0MzMyMDA1MjgyMzYgLyogTWVkaWFUcmFja1Jl
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE1
Nzk5QUUyNTg0NDMzMTAwNTI4MjM2IC8qIE1lZGlhVHJhY2tSZWFkZXIuaCAqLzsgfTsKIAkJQTE1
Nzk5QkMyNTg0NDMzMjAwNTI4MjM2IC8qIENvcmVNZWRpYVdyYXBwZWQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNTc5OUIzMjU4NDQzMzEwMDUyODIz
NiAvKiBDb3JlTWVkaWFXcmFwcGVkLmggKi87IH07Ci0JCUExNTc5OUJEMjU4NDQzMzIwMDUyODIz
NiAvKiBTYW1wbGVDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEExNTc5OUI0MjU4NDQzMzEwMDUyODIzNiAvKiBTYW1wbGVDdXJzb3IuaCAqLzsg
fTsKLQkJQTE1Nzk5QkUyNTg0NDMzMjAwNTI4MjM2IC8qIEZvcm1hdFJlYWRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE1Nzk5QjUyNTg0NDMzMTAw
NTI4MjM2IC8qIEZvcm1hdFJlYWRlci5oICovOyB9OwotCQlBMTU3OUIyODI1ODQ5MEU1MDA1Mjgy
MzYgLyogV0tGb3JtYXRSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEExNTc5QjI2MjU4NDkwRTUwMDUyODIzNiAvKiBXS0Zvcm1hdFJlYWRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUExNTc5
OUJEMjU4NDQzMzIwMDUyODIzNiAvKiBNZWRpYVNhbXBsZUN1cnNvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE1Nzk5QjQyNTg0NDMzMTAwNTI4MjM2
IC8qIE1lZGlhU2FtcGxlQ3Vyc29yLmggKi87IH07CisJCUExNTc5OUJFMjU4NDQzMzIwMDUyODIz
NiAvKiBNZWRpYUZvcm1hdFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTE1Nzk5QjUyNTg0NDMzMTAwNTI4MjM2IC8qIE1lZGlhRm9ybWF0UmVh
ZGVyLmggKi87IH07CisJCUExNTc5QjI4MjU4NDkwRTUwMDUyODIzNiAvKiBXS01lZGlhRm9ybWF0
UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MTU3OUIyNjI1ODQ5MEU1MDA1MjgyMzYgLyogV0tNZWRpYUZvcm1hdFJlYWRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExNUVFREU2MUUzMDFD
RUUwMDAwNjlCMCAvKiBXS1Bhc3N3b3JkVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTE1RUVERTQxRTMwMUNFRTAwMDA2OUIwIC8qIFdLUGFzc3dv
cmRWaWV3LmggKi87IH07CiAJCUExNkU2Njc1MjU4MUE0NDgwMEVFMTc0OSAvKiBXZWJLaXQuZnJh
bWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OERDMkVGNUIwNDg2QTY5NDAwOThCMjE2IC8qIFdlYktpdC5mcmFtZXdvcmsgKi87IH07CiAJCUEx
NkU2Njg3MjU4MUE0RjcwMEVFMTc0OSAvKiBNZWRpYUZvcm1hdFJlYWRlclBsdWdJbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTZFNjY4NjI1ODFB
NEY3MDBFRTE3NDkgLyogTWVkaWFGb3JtYXRSZWFkZXJQbHVnSW4uY3BwICovOyB9OwpAQCAtMTU2
NSw2ICsxNTY1LDcgQEAKIAkJQTFBNEZFNUMxOERDRTlGQTAwQjVFQThBIC8qIF9XS0Rvd25sb2Fk
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExQTRGRTU5MThEQ0U5RkEwMEI1RUE4QSAvKiBfV0tEb3dubG9hZEludGVybmFsLmggKi87IH07
CiAJCUExQTRGRTYxMThERDU0QTQwMEI1RUE4QSAvKiBfV0tEb3dubG9hZERlbGVnYXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUE0RkU2MDE4REQ1
NEE0MDBCNUVBOEEgLyogX1dLRG93bmxvYWREZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExQURBRkI2MjM2OEU2QTgwMDlDQjc3NiAv
KiBTaGFyZWRNZW1vcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTFBREFGQjUyMzY4RTRCODAwOUNCNzc2IC8qIFNoYXJlZE1lbW9yeS5jcHAgKi87
IH07CisJCUExQjREQ0UxMjVBNzkyM0MwMDdEMTc4QyAvKiBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTFCNERDREYy
NUE3OTIxMTAwN0QxNzhDIC8qIE1lZGlhU2FtcGxlQnl0ZVJhbmdlLmggKi87IH07CiAJCUExQzUx
MkM5MTkwNjU2RTUwMDQ0ODkxNCAvKiBXZWJQcmV2aWV3TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUM1MTJDNzE5MDY1NkU1MDA0
NDg5MTQgLyogV2ViUHJldmlld0xvYWRlckNsaWVudC5oICovOyB9OwogCQlBMURGNjMxMzE4RTBC
N0M4MDAzQTNFMkEgLyogTGVnYWN5RG93bmxvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExREY2MzExMThFMEI3QzgwMDNBM0UyQSAvKiBM
ZWdhY3lEb3dubG9hZENsaWVudC5oICovOyB9OwogCQlBMUU2ODg3MDFGNkUyQkFCMDA3MDA2QTYg
LyogUXVhcmFudGluZVNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTFFNjg4NkYxRjZFMkJBQjAwNzAwNkE2IC8qIFF1YXJhbnRpbmVTUEkuaCAqLzsg
fTsKQEAgLTQ4OTksMTUgKzQ5MDAsMTUgQEAKIAkJQTEzQjNEQTEyMDdGMzlERTAwOTBDNThEIC8q
IE1vYmlsZVdpRmlTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9iaWxlV2lGaVNQSS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBMTNEQzY4MDIwN0FBNkIyMDA2NkVGNzIgLyogV0tBcHBs
aWNhdGlvblN0YXRlVHJhY2tpbmdWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLQXBwbGljYXRpb25T
dGF0ZVRyYWNraW5nVmlldy5oOyBwYXRoID0gaW9zL1dLQXBwbGljYXRpb25TdGF0ZVRyYWNraW5n
Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTNEQzY4MTIwN0FBNkIyMDA2
NkVGNzIgLyogV0tBcHBsaWNhdGlvblN0YXRlVHJhY2tpbmdWaWV3Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gV0tBcHBsaWNhdGlvblN0YXRlVHJhY2tpbmdWaWV3Lm1tOyBwYXRoID0gaW9zL1dL
QXBwbGljYXRpb25TdGF0ZVRyYWNraW5nVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTE1Nzk5QUUyNTg0NDMzMTAwNTI4MjM2IC8qIFRyYWNrUmVhZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYWNrUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUExNTc5OUFGMjU4NDQzMzEwMDUyODIzNiAvKiBTYW1wbGVDdXJzb3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxlQ3Vyc29yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTE1Nzk5QjAyNTg0NDMzMTAwNTI4MjM2IC8q
IEZvcm1hdFJlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
b3JtYXRSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMTU3OTlCMTI1
ODQ0MzMxMDA1MjgyMzYgLyogVHJhY2tSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVHJhY2tSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMTU3OTlBRTI1ODQ0MzMxMDA1MjgyMzYgLyogTWVkaWFUcmFja1JlYWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVRyYWNrUmVhZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNTc5OUFGMjU4NDQzMzEwMDUyODIzNiAvKiBNZWRpYVNh
bXBsZUN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRp
YVNhbXBsZUN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNTc5OUIw
MjU4NDQzMzEwMDUyODIzNiAvKiBNZWRpYUZvcm1hdFJlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUZvcm1hdFJlYWRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUExNTc5OUIxMjU4NDQzMzEwMDUyODIzNiAvKiBNZWRpYVRyYWNr
UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhVHJh
Y2tSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTU3OTlCMzI1ODQ0
MzMxMDA1MjgyMzYgLyogQ29yZU1lZGlhV3JhcHBlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb3JlTWVkaWFXcmFwcGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUExNTc5OUI0MjU4NDQzMzEwMDUyODIzNiAvKiBTYW1wbGVDdXJzb3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxlQ3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUExNTc5OUI1MjU4NDQzMzEwMDUyODIzNiAvKiBGb3JtYXRSZWFkZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybWF0UmVhZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUExNTc5QjI1MjU4NDkwRTUwMDUyODIzNiAvKiBXS0Zvcm1h
dFJlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0Zvcm1h
dFJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUExNTc5QjI2MjU4NDkw
RTUwMDUyODIzNiAvKiBXS0Zvcm1hdFJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS0Zvcm1hdFJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MTU3OTlCNDI1ODQ0MzMxMDA1MjgyMzYgLyogTWVkaWFTYW1wbGVDdXJzb3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTYW1wbGVDdXJzb3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTE1Nzk5QjUyNTg0NDMzMTAwNTI4MjM2IC8qIE1lZGlhRm9ybWF0
UmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRm9ybWF0UmVh
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNTc5QjI1MjU4NDkwRTUwMDUy
ODIzNiAvKiBXS01lZGlhRm9ybWF0UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdLTWVkaWFGb3JtYXRSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMTU3OUIyNjI1ODQ5MEU1MDA1MjgyMzYgLyogV0tNZWRpYUZvcm1hdFJlYWRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS01lZGlhRm9ybWF0UmVhZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNTc5QjgzMjU4NTJCN0MwMDUyODIz
NiAvKiBDb3JlTWVkaWFXcmFwcGVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcmVNZWRpYVdy
YXBwZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTVFRURFMzFFMzAxQ0VF
MDAwMDY5QjAgLyogV0tQYXNzd29yZFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBXS1Bhc3N3b3JkVmlldy5tbTsgcGF0aCA9IGlvcy9XS1Bhc3N3b3JkVmll
dy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE1RUVERTQxRTMwMUNFRTAwMDA2
OUIwIC8qIFdLUGFzc3dvcmRWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdLUGFzc3dvcmRWaWV3Lmg7IHBhdGggPSBpb3MvV0tQYXNzd29yZFZpZXcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5MzYsNiArNDkzNyw4IEBACiAJCUExQTRGRTU5MThEQ0U5
RkEwMEI1RUE4QSAvKiBfV0tEb3dubG9hZEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IF9XS0Rvd25sb2FkSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTFBNEZFNjAxOERENTRBNDAwQjVFQThBIC8qIF9XS0Rvd25sb2FkRGVsZWdhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLRG93bmxvYWREZWxlZ2F0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUFEQUZCNTIzNjhFNEI4MDA5Q0I3NzYg
LyogU2hhcmVkTWVtb3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZE1lbW9yeS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExQjREQ0RGMjVBNzkyMTEwMDdEMTc4QyAv
KiBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVNhbXBsZUJ5dGVS
YW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUI0RENFMDI1QTc5MjExMDA3
RDE3OEMgLyogTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVk
aWFTYW1wbGVCeXRlUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUI4
OUI5MjIyMUUwMjMzMDBFQjRDRUEgLyogU0RLVmFyaWFudC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IHBhdGggPSBTREtWYXJpYW50LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMUI5Q0EzODIyNDZFNTRBMDAzRDZEQ0EgLyogV2ViUGF5bWVudENvb3Jk
aW5hdG9yQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQYXltZW50Q29vcmRpbmF0
b3JDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTFDNTEyQzYxOTA2NTZF
NTAwNDQ4OTE0IC8qIFdlYlByZXZpZXdMb2FkZXJDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUHJldmlld0xvYWRlckNsaWVudC5jcHA7IHBhdGggPSBp
b3MvV2ViUHJldmlld0xvYWRlckNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC05MzE2LDEyICs5MzE5LDE0IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBMTU3OUI4MzI1
ODUyQjdDMDA1MjgyMzYgLyogQ29yZU1lZGlhV3JhcHBlZC5jcHAgKi8sCiAJCQkJQTE1Nzk5QjMy
NTg0NDMzMTAwNTI4MjM2IC8qIENvcmVNZWRpYVdyYXBwZWQuaCAqLywKLQkJCQlBMTU3OTlCMDI1
ODQ0MzMxMDA1MjgyMzYgLyogRm9ybWF0UmVhZGVyLmNwcCAqLywKLQkJCQlBMTU3OTlCNTI1ODQ0
MzMxMDA1MjgyMzYgLyogRm9ybWF0UmVhZGVyLmggKi8sCi0JCQkJQTE1Nzk5QUYyNTg0NDMzMTAw
NTI4MjM2IC8qIFNhbXBsZUN1cnNvci5jcHAgKi8sCi0JCQkJQTE1Nzk5QjQyNTg0NDMzMTAwNTI4
MjM2IC8qIFNhbXBsZUN1cnNvci5oICovLAotCQkJCUExNTc5OUIxMjU4NDQzMzEwMDUyODIzNiAv
KiBUcmFja1JlYWRlci5jcHAgKi8sCi0JCQkJQTE1Nzk5QUUyNTg0NDMzMTAwNTI4MjM2IC8qIFRy
YWNrUmVhZGVyLmggKi8sCisJCQkJQTE1Nzk5QjAyNTg0NDMzMTAwNTI4MjM2IC8qIE1lZGlhRm9y
bWF0UmVhZGVyLmNwcCAqLywKKwkJCQlBMTU3OTlCNTI1ODQ0MzMxMDA1MjgyMzYgLyogTWVkaWFG
b3JtYXRSZWFkZXIuaCAqLywKKwkJCQlBMUI0RENFMDI1QTc5MjExMDA3RDE3OEMgLyogTWVkaWFT
YW1wbGVCeXRlUmFuZ2UuY3BwICovLAorCQkJCUExQjREQ0RGMjVBNzkyMTEwMDdEMTc4QyAvKiBN
ZWRpYVNhbXBsZUJ5dGVSYW5nZS5oICovLAorCQkJCUExNTc5OUFGMjU4NDQzMzEwMDUyODIzNiAv
KiBNZWRpYVNhbXBsZUN1cnNvci5jcHAgKi8sCisJCQkJQTE1Nzk5QjQyNTg0NDMzMTAwNTI4MjM2
IC8qIE1lZGlhU2FtcGxlQ3Vyc29yLmggKi8sCisJCQkJQTE1Nzk5QjEyNTg0NDMzMTAwNTI4MjM2
IC8qIE1lZGlhVHJhY2tSZWFkZXIuY3BwICovLAorCQkJCUExNTc5OUFFMjU4NDQzMzEwMDUyODIz
NiAvKiBNZWRpYVRyYWNrUmVhZGVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IE1lZGlhRm9ybWF0
UmVhZGVyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEwMjk3LDggKzEwMzAyLDgg
QEAKIAkJCQk3Q0Q1RUJCQTE3NDZBODNFMDAwQzFDNDUgLyogV0tCYXNlTWFjLmggKi8sCiAJCQkJ
QkM0MDc2MjExMjRGRjA0MDAwNjhGMjBBIC8qIFdLQ2VydGlmaWNhdGVJbmZvTWFjLmggKi8sCiAJ
CQkJQkM0MDc2MjIxMjRGRjA0MDAwNjhGMjBBIC8qIFdLQ2VydGlmaWNhdGVJbmZvTWFjLm1tICov
LAotCQkJCUExNTc5QjI1MjU4NDkwRTUwMDUyODIzNiAvKiBXS0Zvcm1hdFJlYWRlci5jcHAgKi8s
Ci0JCQkJQTE1NzlCMjYyNTg0OTBFNTAwNTI4MjM2IC8qIFdLRm9ybWF0UmVhZGVyLmggKi8sCisJ
CQkJQTE1NzlCMjUyNTg0OTBFNTAwNTI4MjM2IC8qIFdLTWVkaWFGb3JtYXRSZWFkZXIuY3BwICov
LAorCQkJCUExNTc5QjI2MjU4NDkwRTUwMDUyODIzNiAvKiBXS01lZGlhRm9ybWF0UmVhZGVyLmgg
Ki8sCiAJCQkJN0NENUVCQjcxNzQ2QTE1QjAwMEMxQzQ1IC8qIFdLT2JqQ1R5cGVXcmFwcGVyUmVm
LmggKi8sCiAJCQkJN0NENUVCQjYxNzQ2QTE1QjAwMEMxQzQ1IC8qIFdLT2JqQ1R5cGVXcmFwcGVy
UmVmLm1tICovLAogCQkJCUJDNDA3NjIzMTI0RkYwNDAwMDY4RjIwQSAvKiBXS1VSTFJlcXVlc3RO
Uy5oICovLApAQCAtMTE1NzUsNyArMTE1ODAsNiBAQAogCQkJCUM1OUM0QTU5MThCODExNzQwMDdC
RENCNiAvKiBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0U4MUQ4RDEzMTlGN0VGMDAyNDE5MTAgLyogRm9udEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTlCRDhBQjRBMjU4MjBFNTMwMDUzODZGOCAvKiBGb250UmVmZXJlbmNlLmggaW4gSGVhZGVycyAq
LywKLQkJCQlBMTU3OTlCRTI1ODQ0MzMyMDA1MjgyMzYgLyogRm9ybWF0UmVhZGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTE0RjhFMjFENzRDODM0MDA2Q0JFQzYgLyogRnJhbWVJbmZvRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMDBENjExODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9h
ZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzEyMUU4NDI0MTAyMDhEMDA0ODZGOUIgLyog
RnJhbWVUcmVlTm9kZURhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMTE2NTksOSArMTE2NjMsMTMg
QEAKIAkJCQkxQTZEODZDMjFERjc1MjY1MDA3NzQ1RTggLyogTWFjaE1lc3NhZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDQzU2Rjc5MTE1OTk1N0QwMDFDQ0FGOSAvKiBNYWNoUG9ydC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUEyNEI1RjMxMUY1MzFFODAwQzM4MjY5IC8qIE1hY2hVdGlsaXRpZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCUExNTc5OUJFMjU4NDQzMzIwMDUyODIzNiAvKiBNZWRpYUZv
cm1hdFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0MjU4OUEyNTVCNTM1QTAwNTlFRURE
IC8qIE1lZGlhUGVybWlzc2lvblV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDdFMTlF
RkMyM0Q0MDFGMTAwOTRGRkI0IC8qIE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwN0UxOUVGRDIzRDQwMUYxMDA5NEZGQjQgLyogTWVkaWFQbGF5
ZXJQcml2YXRlUmVtb3RlTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMUI0
RENFMTI1QTc5MjNDMDA3RDE3OEMgLyogTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUExNTc5OUJEMjU4NDQzMzIwMDUyODIzNiAvKiBNZWRpYVNhbXBsZUN1cnNvci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTE1Nzk5QjcyNTg0NDMzMjAwNTI4MjM2IC8qIE1lZGlhVHJh
Y2tSZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOTMzREVGMTk2NUVCMzEwMDhBQzNFQSAv
KiBNZW51VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjQ3OTA4RDI1MzE0RDgzMDBF
QzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQUM0QzgyOTE2Qjg3NkE5MDA2OURDQ0QgLyogTWVzc2FnZUZsYWdzLmggaW4gSGVhZGVycyAq
LywKQEAgLTExODcyLDcgKzExODgwLDYgQEAKIAkJCQkwRTk3RDc0RDIwMEU5MDA0MDBCRjY2NDMg
LyogU2FmZUJyb3dzaW5nU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0E5ODU0QTIxMEJFQjY0
MDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2FybmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMy
RDAyMTcxMkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmggaW4g
SGVhZGVycyAqLywKLQkJCQlBMTU3OTlCRDI1ODQ0MzMyMDA1MjgyMzYgLyogU2FtcGxlQ3Vyc29y
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFCNEE4RDEyOTZGMEEyMDAyMzk1MkYgLyogU2FuZGJv
eEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFNTUyQzUxNkFFMDY1RjAwNEVENjUz
IC8qIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU0RDU0RDA0MjFGMUQ3MkQwMDdFM0MzNiAvKiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlUmVtb3RlSU9TLmggaW4gSGVhZGVycyAqLywKQEAgLTExOTM2LDcgKzExOTQzLDYgQEAKIAkJ
CQkxQUFGMjYzOTE0Njg3QzM5MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjA1RDg3MTQ2ODgzNDgwMDhCMUU4MSAvKiBUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRjgz
MzY4NjFGQTEzOURGMDBDNkUwODAgLyogVG91Y2hCYXJNZW51RGF0YS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQTE1Nzk5QjcyNTg0NDMzMjAwNTI4MjM2IC8qIFRyYWNrUmVhZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0NkJFQjZFMzIyRkJCMjFBMDAyNjk4NjcgLyogVHJhbnNpZW50TG9jYWxTdG9y
YWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1N0VCMkUzQTIxRTE5ODNFMDBCODlD
REYgLyogVTJmQXV0aGVudGljYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGRTQzNjYxOEI2
QzA4MTAwOUM3QTQ4IC8qIFVJRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTIzNTYsNyAr
MTIzNjIsNiBAQAogCQkJCTUxNDg5Q0MzMjM3MERCRkEwMDQ0RTY4QSAvKiBXS0ZpbmRSZXN1bHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxNDg5Q0M3MjM3MjM3ODAwMDQ0RTY4QSAvKiBXS0ZpbmRS
ZXN1bHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUxNkI2Q0YyMDE3QjdBRDAwODk5
NkQ2IC8qIFdLRm9jdXNlZEZvcm1Db250cm9sVmlldy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTE1
NzlCMjgyNTg0OTBFNTAwNTI4MjM2IC8qIFdLRm9ybWF0UmVhZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNUNCMDdEQzIwRTE2NzhGMDAyMkMxODMgLyogV0tGb3JtQ29sb3JDb250cm9sLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNTQ4RUJEMTIxMDE1RjBFMDBCRTNDMzIgLyogV0tGb3JtQ29sb3JQ
aWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NDI1NkI3MThCRUMxOEMwMERFNDE3OSAvKiBX
S0Zvcm1QZXJpcGhlcmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTEyNDA4LDYgKzEyNDEzLDcgQEAK
IAkJCQk1MUE5RTEwQjEzMTVDRDE4MDA5RTcwMzEgLyogV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDc5MEE5RjFBRDcxNjQ5MDBBQjkwQjMgLyogV0tMYXlv
dXRNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0U5MTIxNDIyOTNDMjgwMDA1QkVDNzggLyog
V0tNYWluLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTU3OUIyODI1ODQ5MEU1MDA1MjgyMzYgLyog
V0tNZWRpYUZvcm1hdFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5MTdEQTcyNTJENjQ5
RTAwNTAzMTNGIC8qIFdLTWVkaWFQbGF5YmFja1N0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUI0MEVFNjFCRjY3N0UzMDBCQTgxQkUgLyogV0tNZW51SXRlbUlkZW50aWZpZXJzUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUNBQkRDODYyMkM0MEZERTAwMUVERThFIC8qIFdLTWVzc2Fn
ZUxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417195</attachid>
            <date>2021-01-07 11:45:27 -0800</date>
            <delta_ts>2021-01-07 12:17:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220424-20210107114534.patch</filename>
            <type>text/plain</type>
            <size>139730</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdmYTk2MmY5YjgxOGIy
MzVjNjJmNjYxOThlNTRiOTYzYTYzNmY5Yi4uZDk1ZGI1MjIxNTgxOWNmZmJlNzBkODcyZDY4YWYw
MjQ2NGU4NDBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIxLTAxLTA3ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBQcmVwZW5kICJNZWRp
YSIgdG8gRm9ybWF0UmVhZGVyLCBTYW1wbGVDdXJzb3IsIGFuZCBUcmFja1JlYWRlciBjbGFzcyBu
YW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIw
NDI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oOgorCiAyMDIxLTAx
LTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgTnVsbCBjaGVjayBnbG9iYWwgb2JqZWN0IGluIEJsb2I6OnN0cmVhbQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAz
NDViZGQxNDVlYmRmNjg3NDMzY2RmZmI5N2Y4YWEzMzBlY2I2NjIyLi5kMWIyYTIzZTgxMDUwOWE0
MDExNTgxNzk1NmQxNGEyYTkwZDU4NDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIx
LTAxLTA3ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBQ
cmVwZW5kICJNZWRpYSIgdG8gRm9ybWF0UmVhZGVyLCBTYW1wbGVDdXJzb3IsIGFuZCBUcmFja1Jl
YWRlciBjbGFzcyBuYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIwNDI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgorCisg
ICAgICAgIEFsc28gbW92ZWQgTWVkaWFTYW1wbGVCeXRlUmFuZ2UgaW50byBpdHMgb3duIGZpbGUg
ZnJvbSBNZWRpYVRyYWNrUmVhZGVyLmNwcC4KKworICAgICAgICAqIE1lZGlhRm9ybWF0UmVhZGVy
UGx1Z0luL01lZGlhRm9ybWF0UmVhZGVyUGx1Z0luLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvQVBJ
L2MvbWFjL1dLTWVkaWFGb3JtYXRSZWFkZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9TaGFyZWQvQVBJL2MvbWFjL1dLRm9ybWF0UmVhZGVyLmNwcC4KKyAgICAgICAgKiBTaGFyZWQv
QVBJL2MvbWFjL1dLTWVkaWFGb3JtYXRSZWFkZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL0FQSS9jL21hYy9XS0Zvcm1hdFJlYWRlci5oLgorICAgICAgICAqIFNoYXJlZC9t
YWMvTWVkaWFGb3JtYXRSZWFkZXIvQ29yZU1lZGlhV3JhcHBlZC5oOiBVcGRhdGVkIERFQ0xBUkVf
Q09SRV9NRURJQV9UUkFJVFMgdG8gYWNjb3VudCBmb3IgcmVuYW1pbmcuCisgICAgICAgICogU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvRm9ybWF0UmVh
ZGVyLmNwcC4KKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9y
bWF0UmVhZGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvRm9ybWF0UmVhZGVyLmguCisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHA6IEFkZGVkLgorICAgICAgICAqIFNo
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaDogQWRkZWQu
CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNv
ci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRS
ZWFkZXIvU2FtcGxlQ3Vyc29yLmNwcC4KKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0
UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvU2FtcGxlQ3Vyc29yLmguCisgICAgICAgICogU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9UcmFja1JlYWRl
ci5jcHAuCisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNr
UmVhZGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3Jt
YXRSZWFkZXIvVHJhY2tSZWFkZXIuaC4KKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAg
ICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDIxLTAxLTA3ICBL
aW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0IElQ
QyBtZXNzYWdlIG5hbWVzIHNob3VsZCBpbmRpY2F0ZSBpZiB0aGUgbWVzc2FnZSBpcyBzeW5jaHJv
bm91cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGIzZTEwZGEwM2YwOTkzODcw
MTRlZGYwMTY2NTVjNDA2NjQzMjYyMTEuLmIwOGNiODNmYWI1MmFmZjk5YmZhYmQ1YmRiN2M3MjA2
NDg4N2FiNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTIxOCw3ICsyMTgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFZlY3RvcjxBdWRpb1N0cmVhbVBhY2tldERlc2NyaXB0aW9u
PiBtX3BhY2tldERlc2NyaXB0aW9uczsKIAogICAgICAgICAvLyBGSVhNRTogMC41IC0gMS4wIHNl
Y29uZHMgaXMgYSBiZXR0ZXIgZHVyYXRpb24gcGVyIHNhbXBsZSBidWZmZXIsIGJ1dCB1c2UgMiBz
ZWNvbmRzIHNvIGF0IGxlYXN0IHRoZSBmaXJzdAotICAgICAgICAvLyBzYW1wbGUgYnVmZmVyIHdp
bGwgcGxheSB1bnRpbCB3ZSBmaXggU2FtcGxlQ3Vyc29yOjpjcmVhdGVTYW1wbGVCdWZmZXIgdG8g
ZGVhbCB3aXRoIGBlbmRDdXJzb3JgLgorICAgICAgICAvLyBzYW1wbGUgYnVmZmVyIHdpbGwgcGxh
eSB1bnRpbCB3ZSBmaXggTWVkaWFTYW1wbGVDdXJzb3I6OmNyZWF0ZVNhbXBsZUJ1ZmZlciB0byBk
ZWFsIHdpdGggYGVuZEN1cnNvcmAuCiAgICAgICAgIGZsb2F0IG1fbWluaW11bVNhbXBsZUR1cmF0
aW9uIHsgMiB9OwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTWVkaWFGb3Jt
YXRSZWFkZXJQbHVnSW4vTWVkaWFGb3JtYXRSZWFkZXJQbHVnSW4uY3BwIGIvU291cmNlL1dlYktp
dC9NZWRpYUZvcm1hdFJlYWRlclBsdWdJbi9NZWRpYUZvcm1hdFJlYWRlclBsdWdJbi5jcHAKaW5k
ZXggNjgyNGZiYTEyMTE5NDQ4NGE2ZGQ3NjYwMTkwYzk4OTc0NWFiNDk3MC4uNDk2ZTQyYTk1MjBh
NWVmODUzN2RjNjMyYzk3ZDRjZjAzZTk5N2UyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9N
ZWRpYUZvcm1hdFJlYWRlclBsdWdJbi9NZWRpYUZvcm1hdFJlYWRlclBsdWdJbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9NZWRpYUZvcm1hdFJlYWRlclBsdWdJbi9NZWRpYUZvcm1hdFJlYWRlclBs
dWdJbi5jcHAKQEAgLTIzLDE0ICsyMywxNCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxXZWJLaXQvV0tGb3JtYXRSZWFkZXIuaD4KKyNpbmNs
dWRlIDxXZWJLaXQvV0tNZWRpYUZvcm1hdFJlYWRlci5oPgogCiBleHRlcm4gIkMiIFdLX0VYUE9S
VCBPU1N0YXR1cyBDcmVhdGVNZWRpYUZvcm1hdFJlYWRlckluc3RhbmNlKE1UUGx1Z2luQnl0ZVNv
dXJjZVJlZiwgQ0ZBbGxvY2F0b3JSZWYsIENGRGljdGlvbmFyeVJlZiwgTVRQbHVnaW5Gb3JtYXRS
ZWFkZXJSZWYqKTsKIAogT1NTdGF0dXMgQ3JlYXRlTWVkaWFGb3JtYXRSZWFkZXJJbnN0YW5jZShN
VFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9y
LCBDRkRpY3Rpb25hcnlSZWYsIE1UUGx1Z2luRm9ybWF0UmVhZGVyUmVmKiBmb3JtYXRSZWFkZXIp
CiB7Ci0gICAgT1NTdGF0dXMgc3RhdHVzID0gV0tGb3JtYXRSZWFkZXJDcmVhdGUoYWxsb2NhdG9y
LCBmb3JtYXRSZWFkZXIpOworICAgIE9TU3RhdHVzIHN0YXR1cyA9IFdLTWVkaWFGb3JtYXRSZWFk
ZXJDcmVhdGUoYWxsb2NhdG9yLCBmb3JtYXRSZWFkZXIpOwogICAgIGlmIChzdGF0dXMgIT0gbm9F
cnIpCiAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgcmV0dXJuIFdLRm9ybWF0UmVhZGVyU3Rh
cnRPbk1haW5UaHJlYWQoKmZvcm1hdFJlYWRlciwgYnl0ZVNvdXJjZSk7CisgICAgcmV0dXJuIFdL
TWVkaWFGb3JtYXRSZWFkZXJTdGFydE9uTWFpblRocmVhZCgqZm9ybWF0UmVhZGVyLCBieXRlU291
cmNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS0Zv
cm1hdFJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tGb3JtYXRS
ZWFkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjdhMDAwNDdhOGQxNGQ4
YjdmMjJmYmViYTQ2ZjllNDJjYzU3ZDFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS0Zvcm1hdFJl
YWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldLRm9ybWF0UmVhZGVyLmgiCi0KLSNpbmNsdWRl
ICJGb3JtYXRSZWFkZXIuaCIKLQotI2luY2x1ZGUgPHBhbC9jb2NvYS9NZWRpYVRvb2xib3hTb2Z0
TGluay5oPgotCi1PU1N0YXR1cyBXS0Zvcm1hdFJlYWRlckNyZWF0ZShDRkFsbG9jYXRvclJlZiBh
bGxvY2F0b3IsIE1UUGx1Z2luRm9ybWF0UmVhZGVyUmVmKiBmb3JtYXRSZWFkZXJSZWYpCi17Ci0j
aWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKLSAgICBhdXRvIGZvcm1hdFJlYWRlciA9IFdl
YktpdDo6Rm9ybWF0UmVhZGVyOjpjcmVhdGUoYWxsb2NhdG9yKTsKLSAgICBpZiAoIWZvcm1hdFJl
YWRlcikKLSAgICAgICAgcmV0dXJuIGtNVFBsdWdpbkZvcm1hdFJlYWRlckVycm9yX0FsbG9jYXRp
b25GYWlsdXJlOwotICAgICpmb3JtYXRSZWFkZXJSZWYgPSBmb3JtYXRSZWFkZXIubGVha1JlZigp
LT53cmFwcGVyKCk7Ci0gICAgcmV0dXJuIG5vRXJyOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
YWxsb2NhdG9yKTsKLSAgICAqZm9ybWF0UmVhZGVyUmVmID0gbnVsbHB0cjsKLSAgICByZXR1cm4g
LTE7Ci0jZW5kaWYKLX0KLQotT1NTdGF0dXMgV0tGb3JtYXRSZWFkZXJTdGFydE9uTWFpblRocmVh
ZChNVFBsdWdpbkZvcm1hdFJlYWRlclJlZiBmb3JtYXRSZWFkZXJSZWYsIE1UUGx1Z2luQnl0ZVNv
dXJjZVJlZiBieXRlU291cmNlKQotewotI2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCi0g
ICAgYXV0byBmb3JtYXRSZWFkZXIgPSBXZWJLaXQ6OkZvcm1hdFJlYWRlcjo6dW53cmFwKGZvcm1h
dFJlYWRlclJlZik7Ci0gICAgaWYgKCFmb3JtYXRSZWFkZXIpCi0gICAgICAgIHJldHVybiBwYXJh
bUVycjsKLSAgICBmb3JtYXRSZWFkZXItPnN0YXJ0T25NYWluVGhyZWFkKGJ5dGVTb3VyY2UpOwot
ICAgIHJldHVybiBub0VycjsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGZvcm1hdFJlYWRlclJl
Zik7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVTb3VyY2UpOwotICAgIHJldHVybiAtMTsKLSNlbmRp
ZgotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLRm9ybWF0
UmVhZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tGb3JtYXRSZWFkZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkwNTViMmMyYjVhNjAzMzc4YWUxNGNl
ZDk2MTE2NmQzYjgwN2I3NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tGb3JtYXRSZWFkZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRl
cm4gIkMiIHsKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCBPcGFxdWVNVFBsdWdpbkJ5dGVTb3Vy
Y2UqIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZjsKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZU1UUGx1Z2lu
Rm9ybWF0UmVhZGVyKiBNVFBsdWdpbkZvcm1hdFJlYWRlclJlZjsKLQotV0tfRVhQT1JUIE9TU3Rh
dHVzIFdLRm9ybWF0UmVhZGVyQ3JlYXRlKENGQWxsb2NhdG9yUmVmLCBNVFBsdWdpbkZvcm1hdFJl
YWRlclJlZiopOwotV0tfRVhQT1JUIE9TU3RhdHVzIFdLRm9ybWF0UmVhZGVyU3RhcnRPbk1haW5U
aHJlYWQoTVRQbHVnaW5Gb3JtYXRSZWFkZXJSZWYsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZik7Ci0K
LSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9BUEkvYy9tYWMvV0tNZWRpYUZvcm1hdFJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9BUEkvYy9tYWMvV0tNZWRpYUZvcm1hdFJlYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQz
MTI2MzlhNTcxM2Q2YTA1NjYwZGJlNzk4NWYwNDVmNDYwYjEzMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS01lZGlhRm9ybWF0UmVhZGVyLmNwcApA
QCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldLTWVkaWFGb3JtYXRSZWFkZXIuaCIKKworI2luY2x1ZGUgIk1lZGlhRm9ybWF0UmVhZGVy
LmgiCisKKyNpbmNsdWRlIDxwYWwvY29jb2EvTWVkaWFUb29sYm94U29mdExpbmsuaD4KKworT1NT
dGF0dXMgV0tNZWRpYUZvcm1hdFJlYWRlckNyZWF0ZShDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Is
IE1UUGx1Z2luRm9ybWF0UmVhZGVyUmVmKiBmb3JtYXRSZWFkZXJSZWYpCit7CisjaWYgRU5BQkxF
KFdFQk1fRk9STUFUX1JFQURFUikKKyAgICBhdXRvIGZvcm1hdFJlYWRlciA9IFdlYktpdDo6TWVk
aWFGb3JtYXRSZWFkZXI6OmNyZWF0ZShhbGxvY2F0b3IpOworICAgIGlmICghZm9ybWF0UmVhZGVy
KQorICAgICAgICByZXR1cm4ga01UUGx1Z2luRm9ybWF0UmVhZGVyRXJyb3JfQWxsb2NhdGlvbkZh
aWx1cmU7CisgICAgKmZvcm1hdFJlYWRlclJlZiA9IGZvcm1hdFJlYWRlci5sZWFrUmVmKCktPndy
YXBwZXIoKTsKKyAgICByZXR1cm4gbm9FcnI7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhbGxv
Y2F0b3IpOworICAgICpmb3JtYXRSZWFkZXJSZWYgPSBudWxscHRyOworICAgIHJldHVybiAtMTsK
KyNlbmRpZgorfQorCitPU1N0YXR1cyBXS01lZGlhRm9ybWF0UmVhZGVyU3RhcnRPbk1haW5UaHJl
YWQoTVRQbHVnaW5Gb3JtYXRSZWFkZXJSZWYgZm9ybWF0UmVhZGVyUmVmLCBNVFBsdWdpbkJ5dGVT
b3VyY2VSZWYgYnl0ZVNvdXJjZSkKK3sKKyNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQor
ICAgIGF1dG8gZm9ybWF0UmVhZGVyID0gV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRlcjo6dW53cmFw
KGZvcm1hdFJlYWRlclJlZik7CisgICAgaWYgKCFmb3JtYXRSZWFkZXIpCisgICAgICAgIHJldHVy
biBwYXJhbUVycjsKKyAgICBmb3JtYXRSZWFkZXItPnN0YXJ0T25NYWluVGhyZWFkKGJ5dGVTb3Vy
Y2UpOworICAgIHJldHVybiBub0VycjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGZvcm1hdFJl
YWRlclJlZik7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVTb3VyY2UpOworICAgIHJldHVybiAtMTsK
KyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dL
TWVkaWFGb3JtYXRSZWFkZXIuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS01l
ZGlhRm9ybWF0UmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWU3MzkzY2IwZjY2NzkyMzFlZTg4YWNjZDYw
ODUxNjA1ZTA4MGZhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQ
SS9jL21hYy9XS01lZGlhRm9ybWF0UmVhZGVyLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgorCisjaWZkZWYg
X19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IE9wYXF1
ZU1UUGx1Z2luQnl0ZVNvdXJjZSogTVRQbHVnaW5CeXRlU291cmNlUmVmOwordHlwZWRlZiBzdHJ1
Y3QgT3BhcXVlTVRQbHVnaW5Gb3JtYXRSZWFkZXIqIE1UUGx1Z2luRm9ybWF0UmVhZGVyUmVmOwor
CitXS19FWFBPUlQgT1NTdGF0dXMgV0tNZWRpYUZvcm1hdFJlYWRlckNyZWF0ZShDRkFsbG9jYXRv
clJlZiwgTVRQbHVnaW5Gb3JtYXRSZWFkZXJSZWYqKTsKK1dLX0VYUE9SVCBPU1N0YXR1cyBXS01l
ZGlhRm9ybWF0UmVhZGVyU3RhcnRPbk1haW5UaHJlYWQoTVRQbHVnaW5Gb3JtYXRSZWFkZXJSZWYs
IE1UUGx1Z2luQnl0ZVNvdXJjZVJlZik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
Q29yZU1lZGlhV3JhcHBlZC5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0
UmVhZGVyL0NvcmVNZWRpYVdyYXBwZWQuaAppbmRleCAyODRlNmEyOTZkNWYwMjI3MTlkZTgxMDQ5
MzY5MThmN2U1N2Q4NzA2Li4xYzA2NWJkNjRjZThmNTZjYjIzNGQxMjRiMTk5MTg2OWFlNWIyOWY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
Q29yZU1lZGlhV3JhcHBlZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9Db3JlTWVkaWFXcmFwcGVkLmgKQEAgLTM3LDggKzM3LDggQEAgdGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBDb3JlTWVkaWFUcmFpdHM7CiAKICNkZWZpbmUgREVDTEFSRV9DT1JF
X01FRElBX1RSQUlUUyhDbGFzc05hbWUpIFwKIG5hbWVzcGFjZSBXZWJLaXQgeyBcCi1jbGFzcyBD
bGFzc05hbWU7IFwKLXRlbXBsYXRlPD4gc3RydWN0IENvcmVNZWRpYVRyYWl0czxDbGFzc05hbWU+
IHsgXAorY2xhc3MgTWVkaWEjI0NsYXNzTmFtZTsgXAordGVtcGxhdGU8PiBzdHJ1Y3QgQ29yZU1l
ZGlhVHJhaXRzPE1lZGlhIyNDbGFzc05hbWU+IHsgXAogICAgIHVzaW5nIENsYXNzID0gTVRQbHVn
aW4jI0NsYXNzTmFtZSMjQ2xhc3M7IFwKICAgICB1c2luZyBSZWYgPSBNVFBsdWdpbiMjQ2xhc3NO
YW1lIyNSZWY7IFwKICAgICB1c2luZyBWVGFibGUgPSBNVFBsdWdpbiMjQ2xhc3NOYW1lIyNWVGFi
bGU7IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9Gb3JtYXRSZWFkZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL0Zvcm1hdFJlYWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg5YmViNDAwNWU4NGFhNjFiNmQzNTZkOGRkYzIzNzUxNGY5OGM1OWMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L01lZGlhRm9ybWF0UmVhZGVyL0Zvcm1hdFJlYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
MzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJG
b3JtYXRSZWFkZXIuaCIKLQotI2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCi0KLSNpbmNs
dWRlICJUcmFja1JlYWRlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQXVkaW9UcmFja1ByaXZhdGUu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRUeXBlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9J
bmJhbmRUZXh0VHJhY2tQcml2YXRlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNhbXBsZS5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvVmlkZW9UcmFja1ByaXZhdGUuaD4KLSNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9u
L01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KLQot
I2luY2x1ZGUgPHBhbC9jb2NvYS9NZWRpYVRvb2xib3hTb2Z0TGluay5oPgotCi1XVEZfREVDTEFS
RV9DRl9UWVBFX1RSQUlUKE1UUGx1Z2luRm9ybWF0UmVhZGVyKTsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBQQUw7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
Q01CYXNlQ2xhc3NJRCBGb3JtYXRSZWFkZXI6OndyYXBwZXJDbGFzc0lEKCkKLXsKLSAgICByZXR1
cm4gTVRQbHVnaW5Gb3JtYXRSZWFkZXJHZXRDbGFzc0lEKCk7Ci19Ci0KLUNvcmVNZWRpYVdyYXBw
ZWQ8Rm9ybWF0UmVhZGVyPiogRm9ybWF0UmVhZGVyOjp1bndyYXAoQ01CYXNlT2JqZWN0UmVmIG9i
amVjdCkKLXsKLSAgICByZXR1cm4gdW53cmFwKGNoZWNrZWRfY2ZfY2FzdDxXcmFwcGVyUmVmPihv
YmplY3QpKTsKLX0KLQotUmVmUHRyPEZvcm1hdFJlYWRlcj4gRm9ybWF0UmVhZGVyOjpjcmVhdGUo
QWxsb2NhdG9yJiYgYWxsb2NhdG9yKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgKGFsbG9j
YXRvcikgRm9ybWF0UmVhZGVyKFdURk1vdmUoYWxsb2NhdG9yKSkpOwotfQotCi1Gb3JtYXRSZWFk
ZXI6OkZvcm1hdFJlYWRlcihBbGxvY2F0b3ImJiBhbGxvY2F0b3IpCi0gICAgOiBDb3JlTWVkaWFX
cmFwcGVkKFdURk1vdmUoYWxsb2NhdG9yKSkKLSAgICAsIG1fZHVyYXRpb24oTWVkaWFUaW1lOjpp
bnZhbGlkVGltZSgpKQotewotfQotCi12b2lkIEZvcm1hdFJlYWRlcjo6c3RhcnRPbk1haW5UaHJl
YWQoTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCi17Ci0gICAgaWYgKGlzTWFpblRo
cmVhZCgpKSB7Ci0gICAgICAgIHBhcnNlQnl0ZVNvdXJjZShXVEZNb3ZlKGJ5dGVTb3VyY2UpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYnl0ZVNvdXJjZSA9IHJldGFpblB0cihieXRl
U291cmNlKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgcGFyc2VCeXRlU291cmNlKFdURk1vdmUoYnl0
ZVNvdXJjZSkpOwotICAgIH0pOwotfQotCi1zdGF0aWMgV29ya1F1ZXVlJiByZWFkZXJRdWV1ZSgp
Ci17Ci0gICAgc3RhdGljIGF1dG8mIHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoIldlYktpdDo6
Rm9ybWF0UmVhZGVyIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpDb25jdXJyZW50KS5sZWFrUmVm
KCk7Ci0gICAgcmV0dXJuIHF1ZXVlOwotfQotCi12b2lkIEZvcm1hdFJlYWRlcjo6cGFyc2VCeXRl
U291cmNlKFJldGFpblB0cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWY+JiYgYnl0ZVNvdXJjZSkKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PENvbnRlbnRUeXBlPiBjb250ZW50VHlwZSgidmlkZW8vd2VibSJfcyk7Ci0gICAgYXV0byBwYXJz
ZXIgPSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpjcmVhdGUoY29udGVudFR5cGUpOwotICAgIGlm
ICghcGFyc2VyKSB7Ci0gICAgICAgIG1fcGFyc2VUcmFja3NTdGF0dXMgPSBrTVRQbHVnaW5Gb3Jt
YXRSZWFkZXJFcnJvcl9BbGxvY2F0aW9uRmFpbHVyZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFNldCBhIG1pbmltdW0gYXVkaW8gc2FtcGxlIGR1cmF0aW9uIG9mIDAgc28gdGhl
IHBhcnNlciBjcmVhdGVzIGluZGl2aXNpYmxlIHNhbXBsZXMgd2l0aCBieXRlIHNvdXJjZSByYW5n
ZXMuCi0gICAgcGFyc2VyLT5zZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbigwKTsKLQotICAg
IHBhcnNlci0+c2V0Q2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW10oRnVuY3Rpb248dm9pZCgp
PiYmIGZ1bmN0aW9uKSB7Ci0gICAgICAgIFRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKS5kaXNw
YXRjaChXVEZNb3ZlKGZ1bmN0aW9uKSk7Ci0gICAgfSk7Ci0KLSAgICBwYXJzZXItPnNldERpZFBh
cnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKV0oU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQmJiBp
bml0aWFsaXphdGlvblNlZ21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikgewotICAgICAgICBkaWRQYXJzZVRyYWNrcyhXVEZNb3ZlKGluaXRpYWxpemF0
aW9uU2VnbWVudCksIG5vRXJyKTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9
KTsKLQotICAgIHBhcnNlci0+c2V0RGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJh
Y2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0odWludDY0X3QgZXJyb3JD
b2RlKSB7Ci0gICAgICAgIGRpZFBhcnNlVHJhY2tzKHsgfSwgZXJyb3JDb2RlKTsKLSAgICB9KTsK
LQotICAgIHBhcnNlci0+c2V0RGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlZjxNZWRpYVNhbXBsZT4mJiBtZWRpYVNhbXBs
ZSwgdWludDY0X3QgdHJhY2tJRCwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUpIHsKLSAgICAgICAg
ZGlkUHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgbWVkaWFU
eXBlKTsKLSAgICB9KTsKLQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJzZVRyYWNr
c0xvY2spOwotICAgIG1fYnl0ZVNvdXJjZSA9IFdURk1vdmUoYnl0ZVNvdXJjZSk7Ci0gICAgbV9w
YXJzZVRyYWNrc1N0YXR1cyA9IFdURjo6bnVsbG9wdDsKLSAgICBtX2R1cmF0aW9uID0gTWVkaWFU
aW1lOjppbnZhbGlkVGltZSgpOwotICAgIG1fdHJhY2tSZWFkZXJzLmNsZWFyKCk7Ci0KLSAgICBy
ZWFkZXJRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGJ5dGVTb3VyY2UgPSBtX2J5dGVTb3VyY2UsIHBhcnNlciA9IHBhcnNlci5yZWxlYXNlTm9u
TnVsbCgpXSgpIG11dGFibGUgewotICAgICAgICBwYXJzZXItPmFwcGVuZERhdGEoV1RGTW92ZShi
eXRlU291cmNlKSk7Ci0gICAgICAgIFRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKS5kaXNwYXRj
aChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwYXJzZXIgPSBXVEZNb3Zl
KHBhcnNlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaW5pc2hQYXJzaW5nKFdURk1vdmUo
cGFyc2VyKSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIEZvcm1hdFJlYWRlcjo6
ZGlkUGFyc2VUcmFja3MoU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25T
ZWdtZW50JiYgc2VnbWVudCwgdWludDY0X3QgZXJyb3JDb2RlKQotewotICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcnNlVHJhY2tz
TG9jayk7Ci0gICAgQVNTRVJUKCFtX3BhcnNlVHJhY2tzU3RhdHVzKTsKLSAgICBBU1NFUlQobV9k
dXJhdGlvbi5pc0ludmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fdHJhY2tSZWFkZXJzLmlzRW1wdHko
KSk7Ci0KLSAgICBtX3BhcnNlVHJhY2tzU3RhdHVzID0gZXJyb3JDb2RlID8ga01UUGx1Z2luRm9y
bWF0UmVhZGVyRXJyb3JfUGFyc2luZ0ZhaWx1cmUgOiBub0VycjsKLSAgICBtX2R1cmF0aW9uID0g
V1RGTW92ZShzZWdtZW50LmR1cmF0aW9uKTsKLQotICAgIGZvciAoYXV0byYgdmlkZW9UcmFjayA6
IHNlZ21lbnQudmlkZW9UcmFja3MpIHsKLSAgICAgICAgYXV0byB0cmFjayA9IHZpZGVvVHJhY2su
dHJhY2suZ2V0KCk7Ci0gICAgICAgIGF1dG8gdHJhY2tSZWFkZXIgPSBUcmFja1JlYWRlcjo6Y3Jl
YXRlKGFsbG9jYXRvcigpLCAqdGhpcywga0NNTWVkaWFUeXBlX1ZpZGVvLCAqdHJhY2stPnRyYWNr
VUlEKCksIHRyYWNrLT5kZWZhdWx0RW5hYmxlZCgpKTsKLSAgICAgICAgaWYgKCF0cmFja1JlYWRl
cikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG1fdHJhY2tSZWFkZXJzLmFwcGVu
ZCh0cmFja1JlYWRlci5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8m
IGF1ZGlvVHJhY2sgOiBzZWdtZW50LmF1ZGlvVHJhY2tzKSB7Ci0gICAgICAgIGF1dG8gdHJhY2sg
PSBhdWRpb1RyYWNrLnRyYWNrLmdldCgpOwotICAgICAgICBhdXRvIHRyYWNrUmVhZGVyID0gVHJh
Y2tSZWFkZXI6OmNyZWF0ZShhbGxvY2F0b3IoKSwgKnRoaXMsIGtDTU1lZGlhVHlwZV9BdWRpbywg
KnRyYWNrLT50cmFja1VJRCgpLCB0cmFjay0+ZGVmYXVsdEVuYWJsZWQoKSk7Ci0gICAgICAgIGlm
ICghdHJhY2tSZWFkZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBtX3RyYWNr
UmVhZGVycy5hcHBlbmQodHJhY2tSZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0g
ICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sgOiBzZWdtZW50LnRleHRUcmFja3MpIHsKLSAgICAgICAg
YXV0byB0cmFjayA9IHRleHRUcmFjay50cmFjay5nZXQoKTsKLSAgICAgICAgaWYgKGF1dG8gdHJh
Y2tSZWFkZXIgPSBUcmFja1JlYWRlcjo6Y3JlYXRlKGFsbG9jYXRvcigpLCAqdGhpcywga0NNTWVk
aWFUeXBlX1RleHQsICp0cmFjay0+dHJhY2tVSUQoKSwgdHJhY2stPmRlZmF1bHRFbmFibGVkKCkp
KQotICAgICAgICAgICAgbV90cmFja1JlYWRlcnMuYXBwZW5kKHRyYWNrUmVhZGVyLnJlbGVhc2VO
b25OdWxsKCkpOwotICAgIH0KLQotICAgIG1fcGFyc2VUcmFja3NDb25kaXRpb24ubm90aWZ5QWxs
KCk7Ci19Ci0KLXZvaWQgRm9ybWF0UmVhZGVyOjpkaWRQcm92aWRlTWVkaWFEYXRhKFJlZjxNZWRp
YVNhbXBsZT4mJiBtZWRpYVNhbXBsZSwgdWludDY0X3QgdHJhY2tJRCwgY29uc3QgU3RyaW5nJikK
LXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9wYXJzZVRyYWNrc0xvY2spOwotICAgIGF1dG8gdHJhY2tJbmRleCA9IG1fdHJhY2tS
ZWFkZXJzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgdHJhY2spIHsKLSAgICAgICAgcmV0dXJuIHRy
YWNrLT50cmFja0lEKCkgPT0gdHJhY2tJRDsKLSAgICB9KTsKLQotICAgIGlmICh0cmFja0luZGV4
ICE9IG5vdEZvdW5kKQotICAgICAgICBtX3RyYWNrUmVhZGVyc1t0cmFja0luZGV4XS0+YWRkU2Ft
cGxlKFdURk1vdmUobWVkaWFTYW1wbGUpLCBtX2J5dGVTb3VyY2UuZ2V0KCkpOwotfQotCi12b2lk
IEZvcm1hdFJlYWRlcjo6ZmluaXNoUGFyc2luZyhSZWY8U291cmNlQnVmZmVyUGFyc2VyPiYmIHBh
cnNlcikKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9wYXJzZVRyYWNrc0xvY2spOwotICAgIEFTU0VSVChtX3BhcnNlVHJhY2tz
U3RhdHVzLmhhc1ZhbHVlKCkpOwotCi0gICAgZm9yIChhdXRvJiB0cmFja1JlYWRlciA6IG1fdHJh
Y2tSZWFkZXJzKQotICAgICAgICB0cmFja1JlYWRlci0+ZmluaXNoUGFyc2luZygpOwotCi0gICAg
cGFyc2VyLT5zZXREaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKG51bGxwdHIpOwot
ICAgIHBhcnNlci0+c2V0RGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2sobnVs
bHB0cik7Ci0gICAgcGFyc2VyLT5zZXREaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2sobnVsbHB0
cik7Ci0gICAgcGFyc2VyLT5yZXNldFBhcnNlclN0YXRlKCk7Ci19Ci0KLU9TU3RhdHVzIEZvcm1h
dFJlYWRlcjo6Y29weVByb3BlcnR5KENGU3RyaW5nUmVmIGtleSwgQ0ZBbGxvY2F0b3JSZWYgYWxs
b2NhdG9yLCB2b2lkKiB2YWx1ZUNvcHkpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X3BhcnNlVHJhY2tzTG9jayk7Ci0gICAgbV9wYXJzZVRyYWNrc0NvbmRpdGlvbi53YWl0KG1fcGFy
c2VUcmFja3NMb2NrLCBbJl0gewotICAgICAgICByZXR1cm4gbV9wYXJzZVRyYWNrc1N0YXR1cy5o
YXNWYWx1ZSgpOwotICAgIH0pOwotCi0gICAgaWYgKENGRXF1YWwoa2V5LCBQQUw6OmdldF9NZWRp
YVRvb2xib3hfa01UUGx1Z2luRm9ybWF0UmVhZGVyUHJvcGVydHlfRHVyYXRpb24oKSkpIHsKLSAg
ICAgICAgaWYgKGF1dG8gbGVha2VkRHVyYXRpb24gPSBhZG9wdENGKENNVGltZUNvcHlBc0RpY3Rp
b25hcnkoUEFMOjp0b0NNVGltZShtX2R1cmF0aW9uKSwgYWxsb2NhdG9yKSkubGVha1JlZigpKSB7
Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25hcnlSZWYqPih2YWx1ZUNv
cHkpID0gbGVha2VkRHVyYXRpb247Ci0gICAgICAgICAgICByZXR1cm4gbm9FcnI7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4ga0NNQmFzZU9iamVjdEVycm9yX1ZhbHVlTm90QXZhaWxh
YmxlOwotfQotCi1PU1N0YXR1cyBGb3JtYXRSZWFkZXI6OmNvcHlUcmFja0FycmF5KENGQXJyYXlS
ZWYqIHRyYWNrQXJyYXlDb3B5KQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJz
ZVRyYWNrc0xvY2spOwotICAgIG1fcGFyc2VUcmFja3NDb25kaXRpb24ud2FpdChtX3BhcnNlVHJh
Y2tzTG9jaywgWyZdIHsKLSAgICAgICAgcmV0dXJuIG1fcGFyc2VUcmFja3NTdGF0dXMuaGFzVmFs
dWUoKTsKLSAgICB9KTsKLQotICAgIGlmICgqbV9wYXJzZVRyYWNrc1N0YXR1cyAhPSBub0VycikK
LSAgICAgICAgcmV0dXJuICptX3BhcnNlVHJhY2tzU3RhdHVzOwotCi0gICAgYXV0byBtdXRhYmxl
QXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGFsbG9jYXRvcigpLCBDaGVja2Vk
PENGSW5kZXg+KG1fdHJhY2tSZWFkZXJzLnNpemUoKSkudW5zYWZlR2V0KCksICZrQ0ZUeXBlQXJy
YXlDYWxsQmFja3MpKTsKLSAgICBmb3IgKGF1dG8mIHRyYWNrUmVhZGVyIDogbV90cmFja1JlYWRl
cnMpCi0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShtdXRhYmxlQXJyYXkuZ2V0KCksIHRyYWNr
UmVhZGVyLT53cmFwcGVyKCkpOwotCi0gICAgKnRyYWNrQXJyYXlDb3B5ID0gYWRvcHRDRihDRkFy
cmF5Q3JlYXRlQ29weShhbGxvY2F0b3IoKSwgbXV0YWJsZUFycmF5LmdldCgpKSkubGVha1JlZigp
OwotICAgIHJldHVybiBub0VycjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL0Zvcm1hdFJlYWRlci5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL0Zvcm1hdFJlYWRlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzliNDAzYjJiZDc0YWQ1NThjY2MzNDgzZmVmNTllYmM2
ZGQ1YTk2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9Gb3JtYXRSZWFkZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCi0KLSNpbmNsdWRlICJDb3JlTWVkaWFX
cmFwcGVkLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Tb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Lmg+
Ci0jaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0KLURF
Q0xBUkVfQ09SRV9NRURJQV9UUkFJVFMoRm9ybWF0UmVhZGVyKTsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgVHJhY2tSZWFkZXI7Ci0KLWNsYXNzIEZvcm1hdFJlYWRlciBmaW5hbCA6IHB1Ymxp
YyBDb3JlTWVkaWFXcmFwcGVkPEZvcm1hdFJlYWRlcj4gewotcHVibGljOgotICAgIHVzaW5nIENv
cmVNZWRpYVdyYXBwZWQ8Rm9ybWF0UmVhZGVyPjo6dW53cmFwOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBXcmFwcGVyQ2xhc3Mgd3JhcHBlckNsYXNzKCk7Ci0gICAgc3RhdGljIENNQmFzZUNsYXNz
SUQgd3JhcHBlckNsYXNzSUQoKTsKLSAgICBzdGF0aWMgQ29yZU1lZGlhV3JhcHBlZDxGb3JtYXRS
ZWFkZXI+KiB1bndyYXAoQ01CYXNlT2JqZWN0UmVmKTsKLQotICAgIHN0YXRpYyBSZWZQdHI8Rm9y
bWF0UmVhZGVyPiBjcmVhdGUoQWxsb2NhdG9yJiYpOwotCi0gICAgdm9pZCBzdGFydE9uTWFpblRo
cmVhZChNVFBsdWdpbkJ5dGVTb3VyY2VSZWYpOwotICAgIGNvbnN0IE1lZGlhVGltZSYgZHVyYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgRm9ybWF0UmVhZGVyKEFsbG9jYXRvciYmKTsKLQotICAgIHZvaWQgcGFyc2VCeXRlU291cmNl
KFJldGFpblB0cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWY+JiYpOwotICAgIHZvaWQgZGlkUGFyc2VU
cmFja3MoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25T
ZWdtZW50JiYsIHVpbnQ2NF90IGVycm9yQ29kZSk7Ci0gICAgdm9pZCBkaWRTZWxlY3RWaWRlb1Ry
YWNrKFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlJiwgYm9vbCkgeyB9Ci0gICAgdm9pZCBkaWRF
bmFibGVBdWRpb1RyYWNrKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlJiwgYm9vbCkgeyB9Ci0g
ICAgdm9pZCBkaWRQcm92aWRlTWVkaWFEYXRhKFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4mJiwg
dWludDY0X3QsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgZmluaXNoUGFyc2luZyhSZWY8V2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyPiYmKTsKLQotICAgIC8vIENNQmFzZUNsYXNzCi0gICAg
U3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAiV2ViS2l0OjpG
b3JtYXRSZWFkZXIiX3M7IH0KLSAgICBPU1N0YXR1cyBjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYs
IENGQWxsb2NhdG9yUmVmLCB2b2lkKiBjb3BpZWRWYWx1ZSkgZmluYWw7Ci0KLSAgICAvLyBXcmFw
cGVyQ2xhc3MKLSAgICBPU1N0YXR1cyBjb3B5VHJhY2tBcnJheShDRkFycmF5UmVmKik7Ci0KLSAg
ICBSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiBtX2J5dGVTb3VyY2U7Ci0gICAgQ29u
ZGl0aW9uIG1fcGFyc2VUcmFja3NDb25kaXRpb247Ci0gICAgTG9jayBtX3BhcnNlVHJhY2tzTG9j
azsKLSAgICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKLSAgICBPcHRpb25hbDxPU1N0YXR1cz4gbV9w
YXJzZVRyYWNrc1N0YXR1czsKLSAgICBWZWN0b3I8UmVmPFRyYWNrUmVhZGVyPj4gbV90cmFja1Jl
YWRlcnM7Ci19OwotCi1jb25zdGV4cHIgRm9ybWF0UmVhZGVyOjpXcmFwcGVyQ2xhc3MgRm9ybWF0
UmVhZGVyOjp3cmFwcGVyQ2xhc3MoKQotewotICAgIHJldHVybiB7Ci0gICAgICAgIC52ZXJzaW9u
ID0ga01UUGx1Z2luRm9ybWF0UmVhZGVyX0NsYXNzVmVyc2lvbl8xLAotICAgICAgICAuY29weVRy
YWNrQXJyYXkgPSBbXShXcmFwcGVyUmVmIHJlYWRlciwgQ0ZBcnJheVJlZiogdHJhY2tBcnJheUNv
cHkpIHsKLSAgICAgICAgICAgIHJldHVybiB1bndyYXAocmVhZGVyKS0+Y29weVRyYWNrQXJyYXko
dHJhY2tBcnJheUNvcHkpOwotICAgICAgICB9LAotICAgIH07Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1h
dFJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFGb3JtYXRSZWFkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxMTc4YzI1YjRmMjJmYWM4NWM2ZWMw
OTZlYzAxNzIzZmFiNjY3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCkBAIC0wLDAgKzEs
MjM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlh
Rm9ybWF0UmVhZGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQorCisjaW5j
bHVkZSAiTWVkaWFUcmFja1JlYWRlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQXVkaW9UcmFja1By
aXZhdGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRUeXBlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9JbmJhbmRUZXh0VHJhY2tQcml2YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNh
bXBsZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvVmlkZW9UcmFja1ByaXZhdGUuaD4KKyNpbmNsdWRlIDxwYWwvYXZmb3Vu
ZGF0aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUu
aD4KKworI2luY2x1ZGUgPHBhbC9jb2NvYS9NZWRpYVRvb2xib3hTb2Z0TGluay5oPgorCitXVEZf
REVDTEFSRV9DRl9UWVBFX1RSQUlUKE1UUGx1Z2luRm9ybWF0UmVhZGVyKTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBQQUw7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworQ01CYXNlQ2xhc3NJRCBNZWRpYUZvcm1hdFJlYWRlcjo6d3JhcHBlckNsYXNzSUQoKQor
eworICAgIHJldHVybiBNVFBsdWdpbkZvcm1hdFJlYWRlckdldENsYXNzSUQoKTsKK30KKworQ29y
ZU1lZGlhV3JhcHBlZDxNZWRpYUZvcm1hdFJlYWRlcj4qIE1lZGlhRm9ybWF0UmVhZGVyOjp1bndy
YXAoQ01CYXNlT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICByZXR1cm4gdW53cmFwKGNoZWNrZWRf
Y2ZfY2FzdDxXcmFwcGVyUmVmPihvYmplY3QpKTsKK30KKworUmVmUHRyPE1lZGlhRm9ybWF0UmVh
ZGVyPiBNZWRpYUZvcm1hdFJlYWRlcjo6Y3JlYXRlKEFsbG9jYXRvciYmIGFsbG9jYXRvcikKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IChhbGxvY2F0b3IpIE1lZGlhRm9ybWF0UmVhZGVyKFdU
Rk1vdmUoYWxsb2NhdG9yKSkpOworfQorCitNZWRpYUZvcm1hdFJlYWRlcjo6TWVkaWFGb3JtYXRS
ZWFkZXIoQWxsb2NhdG9yJiYgYWxsb2NhdG9yKQorICAgIDogQ29yZU1lZGlhV3JhcHBlZChXVEZN
b3ZlKGFsbG9jYXRvcikpCisgICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KSkKK3sKK30KKwordm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6c3RhcnRPbk1haW5UaHJlYWQoTVRQ
bHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgp
KSB7CisgICAgICAgIHBhcnNlQnl0ZVNvdXJjZShXVEZNb3ZlKGJ5dGVTb3VyY2UpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYnl0ZVNvdXJjZSA9IHJldGFpblB0cihieXRlU291cmNl
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgcGFyc2VCeXRlU291cmNlKFdURk1vdmUoYnl0ZVNvdXJj
ZSkpOworICAgIH0pOworfQorCitzdGF0aWMgV29ya1F1ZXVlJiByZWFkZXJRdWV1ZSgpCit7Cisg
ICAgc3RhdGljIGF1dG8mIHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoIldlYktpdDo6TWVkaWFG
b3JtYXRSZWFkZXIgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OkNvbmN1cnJlbnQpLmxlYWtSZWYo
KTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisKK3ZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNl
Qnl0ZVNvdXJjZShSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiYmIGJ5dGVTb3VyY2Up
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb250ZW50VHlwZT4gY29udGVudFR5cGUoInZpZGVvL3dlYm0iX3MpOworICAgIGF1dG8g
cGFyc2VyID0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKGNvbnRlbnRUeXBlKTsKKyAg
ICBpZiAoIXBhcnNlcikgeworICAgICAgICBtX3BhcnNlVHJhY2tzU3RhdHVzID0ga01UUGx1Z2lu
Rm9ybWF0UmVhZGVyRXJyb3JfQWxsb2NhdGlvbkZhaWx1cmU7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBTZXQgYSBtaW5pbXVtIGF1ZGlvIHNhbXBsZSBkdXJhdGlvbiBvZiAwIHNv
IHRoZSBwYXJzZXIgY3JlYXRlcyBpbmRpdmlzaWJsZSBzYW1wbGVzIHdpdGggYnl0ZSBzb3VyY2Ug
cmFuZ2VzLgorICAgIHBhcnNlci0+c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oMCk7CisK
KyAgICBwYXJzZXItPnNldENhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFtdKEZ1bmN0aW9uPHZv
aWQoKT4mJiBmdW5jdGlvbikgeworICAgICAgICBNZWRpYVRyYWNrUmVhZGVyOjpzdG9yYWdlUXVl
dWUoKS5kaXNwYXRjaChXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgfSk7CisKKyAgICBwYXJzZXIt
PnNldERpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKV0oU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNl
Z21lbnQmJiBpbml0aWFsaXphdGlvblNlZ21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICBkaWRQYXJzZVRyYWNrcyhXVEZNb3ZlKGlu
aXRpYWxpemF0aW9uU2VnbWVudCksIG5vRXJyKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKKyAgICB9KTsKKworICAgIHBhcnNlci0+c2V0RGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJz
aW5nQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0odWludDY0
X3QgZXJyb3JDb2RlKSB7CisgICAgICAgIGRpZFBhcnNlVHJhY2tzKHsgfSwgZXJyb3JDb2RlKTsK
KyAgICB9KTsKKworICAgIHBhcnNlci0+c2V0RGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlZjxNZWRpYVNhbXBsZT4mJiBt
ZWRpYVNhbXBsZSwgdWludDY0X3QgdHJhY2tJRCwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUpIHsK
KyAgICAgICAgZGlkUHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJ
RCwgbWVkaWFUeXBlKTsKKyAgICB9KTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9w
YXJzZVRyYWNrc0xvY2spOworICAgIG1fYnl0ZVNvdXJjZSA9IFdURk1vdmUoYnl0ZVNvdXJjZSk7
CisgICAgbV9wYXJzZVRyYWNrc1N0YXR1cyA9IFdURjo6bnVsbG9wdDsKKyAgICBtX2R1cmF0aW9u
ID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgIG1fdHJhY2tSZWFkZXJzLmNsZWFyKCk7
CisKKyAgICByZWFkZXJRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGJ5dGVTb3VyY2UgPSBtX2J5dGVTb3VyY2UsIHBhcnNlciA9IHBhcnNlci5y
ZWxlYXNlTm9uTnVsbCgpXSgpIG11dGFibGUgeworICAgICAgICBwYXJzZXItPmFwcGVuZERhdGEo
V1RGTW92ZShieXRlU291cmNlKSk7CisgICAgICAgIE1lZGlhVHJhY2tSZWFkZXI6OnN0b3JhZ2VR
dWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBh
cnNlciA9IFdURk1vdmUocGFyc2VyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGZpbmlzaFBh
cnNpbmcoV1RGTW92ZShwYXJzZXIpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
TWVkaWFGb3JtYXRSZWFkZXI6OmRpZFBhcnNlVHJhY2tzKFNvdXJjZUJ1ZmZlclByaXZhdGVDbGll
bnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmIHNlZ21lbnQsIHVpbnQ2NF90IGVycm9yQ29kZSkK
K3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9wYXJzZVRyYWNrc0xvY2spOworICAgIEFTU0VSVCghbV9wYXJzZVRyYWNrc1N0YXR1
cyk7CisgICAgQVNTRVJUKG1fZHVyYXRpb24uaXNJbnZhbGlkKCkpOworICAgIEFTU0VSVChtX3Ry
YWNrUmVhZGVycy5pc0VtcHR5KCkpOworCisgICAgbV9wYXJzZVRyYWNrc1N0YXR1cyA9IGVycm9y
Q29kZSA/IGtNVFBsdWdpbkZvcm1hdFJlYWRlckVycm9yX1BhcnNpbmdGYWlsdXJlIDogbm9FcnI7
CisgICAgbV9kdXJhdGlvbiA9IFdURk1vdmUoc2VnbWVudC5kdXJhdGlvbik7CisKKyAgICBmb3Ig
KGF1dG8mIHZpZGVvVHJhY2sgOiBzZWdtZW50LnZpZGVvVHJhY2tzKSB7CisgICAgICAgIGF1dG8g
dHJhY2sgPSB2aWRlb1RyYWNrLnRyYWNrLmdldCgpOworICAgICAgICBhdXRvIHRyYWNrUmVhZGVy
ID0gTWVkaWFUcmFja1JlYWRlcjo6Y3JlYXRlKGFsbG9jYXRvcigpLCAqdGhpcywga0NNTWVkaWFU
eXBlX1ZpZGVvLCAqdHJhY2stPnRyYWNrVUlEKCksIHRyYWNrLT5kZWZhdWx0RW5hYmxlZCgpKTsK
KyAgICAgICAgaWYgKCF0cmFja1JlYWRlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIG1fdHJhY2tSZWFkZXJzLmFwcGVuZCh0cmFja1JlYWRlci5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBzZWdtZW50LmF1ZGlvVHJhY2tz
KSB7CisgICAgICAgIGF1dG8gdHJhY2sgPSBhdWRpb1RyYWNrLnRyYWNrLmdldCgpOworICAgICAg
ICBhdXRvIHRyYWNrUmVhZGVyID0gTWVkaWFUcmFja1JlYWRlcjo6Y3JlYXRlKGFsbG9jYXRvcigp
LCAqdGhpcywga0NNTWVkaWFUeXBlX0F1ZGlvLCAqdHJhY2stPnRyYWNrVUlEKCksIHRyYWNrLT5k
ZWZhdWx0RW5hYmxlZCgpKTsKKyAgICAgICAgaWYgKCF0cmFja1JlYWRlcikKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIG1fdHJhY2tSZWFkZXJzLmFwcGVuZCh0cmFja1JlYWRlci5y
ZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHNl
Z21lbnQudGV4dFRyYWNrcykgeworICAgICAgICBhdXRvIHRyYWNrID0gdGV4dFRyYWNrLnRyYWNr
LmdldCgpOworICAgICAgICBpZiAoYXV0byB0cmFja1JlYWRlciA9IE1lZGlhVHJhY2tSZWFkZXI6
OmNyZWF0ZShhbGxvY2F0b3IoKSwgKnRoaXMsIGtDTU1lZGlhVHlwZV9UZXh0LCAqdHJhY2stPnRy
YWNrVUlEKCksIHRyYWNrLT5kZWZhdWx0RW5hYmxlZCgpKSkKKyAgICAgICAgICAgIG1fdHJhY2tS
ZWFkZXJzLmFwcGVuZCh0cmFja1JlYWRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAg
ICBtX3BhcnNlVHJhY2tzQ29uZGl0aW9uLm5vdGlmeUFsbCgpOworfQorCit2b2lkIE1lZGlhRm9y
bWF0UmVhZGVyOjpkaWRQcm92aWRlTWVkaWFEYXRhKFJlZjxNZWRpYVNhbXBsZT4mJiBtZWRpYVNh
bXBsZSwgdWludDY0X3QgdHJhY2tJRCwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJzZVRyYWNr
c0xvY2spOworICAgIGF1dG8gdHJhY2tJbmRleCA9IG1fdHJhY2tSZWFkZXJzLmZpbmRNYXRjaGlu
ZyhbJl0oYXV0byYgdHJhY2spIHsKKyAgICAgICAgcmV0dXJuIHRyYWNrLT50cmFja0lEKCkgPT0g
dHJhY2tJRDsKKyAgICB9KTsKKworICAgIGlmICh0cmFja0luZGV4ICE9IG5vdEZvdW5kKQorICAg
ICAgICBtX3RyYWNrUmVhZGVyc1t0cmFja0luZGV4XS0+YWRkU2FtcGxlKFdURk1vdmUobWVkaWFT
YW1wbGUpLCBtX2J5dGVTb3VyY2UuZ2V0KCkpOworfQorCit2b2lkIE1lZGlhRm9ybWF0UmVhZGVy
OjpmaW5pc2hQYXJzaW5nKFJlZjxTb3VyY2VCdWZmZXJQYXJzZXI+JiYgcGFyc2VyKQoreworICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X3BhcnNlVHJhY2tzTG9jayk7CisgICAgQVNTRVJUKG1fcGFyc2VUcmFja3NTdGF0dXMuaGFzVmFs
dWUoKSk7CisKKyAgICBmb3IgKGF1dG8mIHRyYWNrUmVhZGVyIDogbV90cmFja1JlYWRlcnMpCisg
ICAgICAgIHRyYWNrUmVhZGVyLT5maW5pc2hQYXJzaW5nKCk7CisKKyAgICBwYXJzZXItPnNldERp
ZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2sobnVsbHB0cik7CisgICAgcGFyc2VyLT5z
ZXREaWRFbmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdDYWxsYmFjayhudWxscHRyKTsKKyAgICBw
YXJzZXItPnNldERpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjayhudWxscHRyKTsKKyAgICBwYXJz
ZXItPnJlc2V0UGFyc2VyU3RhdGUoKTsKK30KKworT1NTdGF0dXMgTWVkaWFGb3JtYXRSZWFkZXI6
OmNvcHlQcm9wZXJ0eShDRlN0cmluZ1JlZiBrZXksIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwg
dm9pZCogdmFsdWVDb3B5KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJzZVRy
YWNrc0xvY2spOworICAgIG1fcGFyc2VUcmFja3NDb25kaXRpb24ud2FpdChtX3BhcnNlVHJhY2tz
TG9jaywgWyZdIHsKKyAgICAgICAgcmV0dXJuIG1fcGFyc2VUcmFja3NTdGF0dXMuaGFzVmFsdWUo
KTsKKyAgICB9KTsKKworICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpnZXRfTWVkaWFUb29sYm94
X2tNVFBsdWdpbkZvcm1hdFJlYWRlclByb3BlcnR5X0R1cmF0aW9uKCkpKSB7CisgICAgICAgIGlm
IChhdXRvIGxlYWtlZER1cmF0aW9uID0gYWRvcHRDRihDTVRpbWVDb3B5QXNEaWN0aW9uYXJ5KFBB
TDo6dG9DTVRpbWUobV9kdXJhdGlvbiksIGFsbG9jYXRvcikpLmxlYWtSZWYoKSkgeworICAgICAg
ICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmKj4odmFsdWVDb3B5KSA9IGxl
YWtlZER1cmF0aW9uOworICAgICAgICAgICAgcmV0dXJuIG5vRXJyOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIGtDTUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5vdEF2YWlsYWJsZTsKK30K
KworT1NTdGF0dXMgTWVkaWFGb3JtYXRSZWFkZXI6OmNvcHlUcmFja0FycmF5KENGQXJyYXlSZWYq
IHRyYWNrQXJyYXlDb3B5KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJzZVRy
YWNrc0xvY2spOworICAgIG1fcGFyc2VUcmFja3NDb25kaXRpb24ud2FpdChtX3BhcnNlVHJhY2tz
TG9jaywgWyZdIHsKKyAgICAgICAgcmV0dXJuIG1fcGFyc2VUcmFja3NTdGF0dXMuaGFzVmFsdWUo
KTsKKyAgICB9KTsKKworICAgIGlmICgqbV9wYXJzZVRyYWNrc1N0YXR1cyAhPSBub0VycikKKyAg
ICAgICAgcmV0dXJuICptX3BhcnNlVHJhY2tzU3RhdHVzOworCisgICAgYXV0byBtdXRhYmxlQXJy
YXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGFsbG9jYXRvcigpLCBDaGVja2VkPENG
SW5kZXg+KG1fdHJhY2tSZWFkZXJzLnNpemUoKSkudW5zYWZlR2V0KCksICZrQ0ZUeXBlQXJyYXlD
YWxsQmFja3MpKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrUmVhZGVyIDogbV90cmFja1JlYWRlcnMp
CisgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShtdXRhYmxlQXJyYXkuZ2V0KCksIHRyYWNrUmVh
ZGVyLT53cmFwcGVyKCkpOworCisgICAgKnRyYWNrQXJyYXlDb3B5ID0gYWRvcHRDRihDRkFycmF5
Q3JlYXRlQ29weShhbGxvY2F0b3IoKSwgbXV0YWJsZUFycmF5LmdldCgpKSkubGVha1JlZigpOwor
ICAgIHJldHVybiBub0VycjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wN2E2Yjk3OTFmNmFjZTJmNGUwYTg3MWVhNmZkM2FmYWEwNWZmMmYwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVy
L01lZGlhRm9ybWF0UmVhZGVyLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKKworI2luY2x1ZGUgIkNv
cmVNZWRpYVdyYXBwZWQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NvdXJjZUJ1ZmZlclByaXZhdGVD
bGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KKworREVDTEFSRV9DT1JFX01FRElBX1RSQUlUUyhGb3JtYXRSZWFkZXIpOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBTb3VyY2VCdWZmZXJQYXJzZXI7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBNZWRpYVRyYWNrUmVhZGVyOworCitjbGFzcyBNZWRpYUZvcm1hdFJl
YWRlciBmaW5hbCA6IHB1YmxpYyBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhRm9ybWF0UmVhZGVyPiB7
CitwdWJsaWM6CisgICAgdXNpbmcgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYUZvcm1hdFJlYWRlcj46
OnVud3JhcDsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgV3JhcHBlckNsYXNzIHdyYXBwZXJDbGFz
cygpOworICAgIHN0YXRpYyBDTUJhc2VDbGFzc0lEIHdyYXBwZXJDbGFzc0lEKCk7CisgICAgc3Rh
dGljIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFGb3JtYXRSZWFkZXI+KiB1bndyYXAoQ01CYXNlT2Jq
ZWN0UmVmKTsKKworICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFGb3JtYXRSZWFkZXI+IGNyZWF0ZShB
bGxvY2F0b3ImJik7CisKKyAgICB2b2lkIHN0YXJ0T25NYWluVGhyZWFkKE1UUGx1Z2luQnl0ZVNv
dXJjZVJlZik7CisgICAgY29uc3QgTWVkaWFUaW1lJiBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBNZWRpYUZvcm1hdFJlYWRl
cihBbGxvY2F0b3ImJik7CisKKyAgICB2b2lkIHBhcnNlQnl0ZVNvdXJjZShSZXRhaW5QdHI8TVRQ
bHVnaW5CeXRlU291cmNlUmVmPiYmKTsKKyAgICB2b2lkIGRpZFBhcnNlVHJhY2tzKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmLCB1aW50
NjRfdCBlcnJvckNvZGUpOworICAgIHZvaWQgZGlkU2VsZWN0VmlkZW9UcmFjayhXZWJDb3JlOjpW
aWRlb1RyYWNrUHJpdmF0ZSYsIGJvb2wpIHsgfQorICAgIHZvaWQgZGlkRW5hYmxlQXVkaW9UcmFj
ayhXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZSYsIGJvb2wpIHsgfQorICAgIHZvaWQgZGlkUHJv
dmlkZU1lZGlhRGF0YShSZWY8V2ViQ29yZTo6TWVkaWFTYW1wbGU+JiYsIHVpbnQ2NF90LCBjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIGZpbmlzaFBhcnNpbmcoUmVmPFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcj4mJik7CisKKyAgICAvLyBDTUJhc2VDbGFzcworICAgIFN0cmluZyBkZWJ1Z0Rl
c2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIldlYktpdDo6TWVkaWFGb3JtYXRSZWFk
ZXIiX3M7IH0KKyAgICBPU1N0YXR1cyBjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYsIENGQWxsb2Nh
dG9yUmVmLCB2b2lkKiBjb3BpZWRWYWx1ZSkgZmluYWw7CisKKyAgICAvLyBXcmFwcGVyQ2xhc3MK
KyAgICBPU1N0YXR1cyBjb3B5VHJhY2tBcnJheShDRkFycmF5UmVmKik7CisKKyAgICBSZXRhaW5Q
dHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiBtX2J5dGVTb3VyY2U7CisgICAgQ29uZGl0aW9uIG1f
cGFyc2VUcmFja3NDb25kaXRpb247CisgICAgTG9jayBtX3BhcnNlVHJhY2tzTG9jazsKKyAgICBN
ZWRpYVRpbWUgbV9kdXJhdGlvbjsKKyAgICBPcHRpb25hbDxPU1N0YXR1cz4gbV9wYXJzZVRyYWNr
c1N0YXR1czsKKyAgICBWZWN0b3I8UmVmPE1lZGlhVHJhY2tSZWFkZXI+PiBtX3RyYWNrUmVhZGVy
czsKK307CisKK2NvbnN0ZXhwciBNZWRpYUZvcm1hdFJlYWRlcjo6V3JhcHBlckNsYXNzIE1lZGlh
Rm9ybWF0UmVhZGVyOjp3cmFwcGVyQ2xhc3MoKQoreworICAgIHJldHVybiB7CisgICAgICAgIC52
ZXJzaW9uID0ga01UUGx1Z2luRm9ybWF0UmVhZGVyX0NsYXNzVmVyc2lvbl8xLAorICAgICAgICAu
Y29weVRyYWNrQXJyYXkgPSBbXShXcmFwcGVyUmVmIHJlYWRlciwgQ0ZBcnJheVJlZiogdHJhY2tB
cnJheUNvcHkpIHsKKyAgICAgICAgICAgIHJldHVybiB1bndyYXAocmVhZGVyKS0+Y29weVRyYWNr
QXJyYXkodHJhY2tBcnJheUNvcHkpOworICAgICAgICB9LAorICAgIH07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRp
YVNhbXBsZUJ5dGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3Jt
YXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1MmY2MDQ5Yzlk
MDYxZTg3MTgxYTRlMWY3ZTRjYjk4OTdkNjY2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2Uu
Y3BwCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCIKKworI2lmIEVOQUJMRShXRUJNX0ZPUk1B
VF9SRUFERVIpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgUEFMOwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK01lZGlhU2FtcGxlQnl0ZVJhbmdlOjpNZWRpYVNh
bXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYg
Ynl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKKyAgICA6IE1lZGlhU2FtcGxlQVZGT2JqQyhu
dWxscHRyKQorICAgICwgbV9wcmVzZW50YXRpb25UaW1lKHNhbXBsZS5wcmVzZW50YXRpb25UaW1l
KCkpCisgICAgLCBtX2RlY29kZVRpbWUoc2FtcGxlLmRlY29kZVRpbWUoKSkKKyAgICAsIG1fZHVy
YXRpb24oc2FtcGxlLmR1cmF0aW9uKCkpCisgICAgLCBtX3NpemVJbkJ5dGVzKHNhbXBsZS5zaXpl
SW5CeXRlcygpKQorICAgICwgbV9wcmVzZW50YXRpb25TaXplKHNhbXBsZS5wcmVzZW50YXRpb25T
aXplKCkpCisgICAgLCBtX2ZsYWdzKHNhbXBsZS5mbGFncygpKQorICAgICwgbV90cmFja0lEKHRy
YWNrSUQpCisgICAgLCBtX2J5dGVSYW5nZShzYW1wbGUuYnl0ZVJhbmdlKCkpCisgICAgLCBtX2J5
dGVTb3VyY2UoYnl0ZVNvdXJjZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAg
ICBhdXRvIHBsYXRmb3JtU2FtcGxlID0gc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCk7CisgICAgc3dp
dGNoIChwbGF0Zm9ybVNhbXBsZS50eXBlKSB7CisgICAgY2FzZSBQbGF0Zm9ybVNhbXBsZTo6Q01T
YW1wbGVCdWZmZXJUeXBlOgorICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9uID0gQ01TYW1wbGVC
dWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbihwbGF0Zm9ybVNhbXBsZS5zYW1wbGUuY21TYW1wbGVC
dWZmZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFu
Z2VTYW1wbGVUeXBlOgorICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9uID0gcGxhdGZvcm1TYW1w
bGUuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQ7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK0F0b21TdHJpbmcgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnRyYWNrSUQoKSBjb25z
dAoreworICAgIHJldHVybiBBdG9tU3RyaW5nOjpudW1iZXIobV90cmFja0lEKTsKK30KKworUGxh
dGZvcm1TYW1wbGUgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnBsYXRmb3JtU2FtcGxlKCkKK3sKKyAg
ICByZXR1cm4geworICAgICAgICBQbGF0Zm9ybVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZSwK
KyAgICAgICAgeyAuYnl0ZVJhbmdlU2FtcGxlID0gc3RkOjptYWtlX3BhaXIobV9ieXRlU291cmNl
LmdldCgpLCBtX2Zvcm1hdERlc2NyaXB0aW9uLmdldCgpKSB9LAorICAgIH07Cit9CisKK3ZvaWQg
TWVkaWFTYW1wbGVCeXRlUmFuZ2U6Om9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUm
IG9mZnNldCkKK3sKKyAgICBzZXRUaW1lc3RhbXBzKHByZXNlbnRhdGlvblRpbWUoKSArIG9mZnNl
dCwgZGVjb2RlVGltZSgpICsgb2Zmc2V0KTsKK30KKwordm9pZCBNZWRpYVNhbXBsZUJ5dGVSYW5n
ZTo6c2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGNvbnN0
IE1lZGlhVGltZSYgZGVjb2RlVGltZSkKK3sKKyAgICBtX3ByZXNlbnRhdGlvblRpbWUgPSBwcmVz
ZW50YXRpb25UaW1lOworICAgIG1fZGVjb2RlVGltZSA9IGRlY29kZVRpbWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVNhbXBsZUJ5dGVSYW5nZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzY2NDZlZTgyNWJh
YjMyOWE3ZTFkZmJkMDc4MTU3M2IxMjA3NWI0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5o
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJNX0ZPUk1BVF9SRUFERVIpCisKKyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2FtcGxlQVZG
T2JqQy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvTWVkaWFUb29sYm94U1BJLmg+CisjaW5j
bHVkZSA8d3RmL01lZGlhVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE1lZGlhU2FtcGxlQnl0ZVJhbmdlIGZpbmFsIDogcHVi
bGljIFdlYkNvcmU6Ok1lZGlhU2FtcGxlQVZGT2JqQyB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxNZWRpYVNhbXBsZUJ5dGVSYW5nZT4gY3JlYXRlKFdlYkNvcmU6Ok1lZGlhU2FtcGxlJiBzYW1w
bGUsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlLCB1aW50NjRfdCB0cmFja0lEKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVCeXRlUmFuZ2Uo
c2FtcGxlLCBieXRlU291cmNlLCB0cmFja0lEKSk7CisgICAgfQorCisgICAgTWVkaWFUaW1lIHBy
ZXNlbnRhdGlvblRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ByZXNlbnRhdGlvblRpbWU7
IH0KKyAgICBNZWRpYVRpbWUgZGVjb2RlVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGVj
b2RlVGltZTsgfQorICAgIE1lZGlhVGltZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3NpemVJbkJ5dGVzOyB9CisgICAgRmxvYXRTaXplIHByZXNlbnRhdGlvblNpemUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3ByZXNlbnRhdGlvblNpemU7IH0KKyAgICBTYW1wbGVGbGFn
cyBmbGFncygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmxhZ3M7IH0KKyAgICBPcHRpb25hbDxC
eXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYnl0ZVJhbmdlOyB9
CisKKyAgICBBdG9tU3RyaW5nIHRyYWNrSUQoKSBjb25zdCBmaW5hbDsKKyAgICBQbGF0Zm9ybVNh
bXBsZSBwbGF0Zm9ybVNhbXBsZSgpIGZpbmFsOworICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5
KGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOworICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBN
ZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBNZWRp
YVNhbXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZSYsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiwgdWlu
dDY0X3QgdHJhY2tJRCk7CisKKyAgICBNZWRpYVRpbWUgbV9wcmVzZW50YXRpb25UaW1lOworICAg
IE1lZGlhVGltZSBtX2RlY29kZVRpbWU7CisgICAgTWVkaWFUaW1lIG1fZHVyYXRpb247CisgICAg
c2l6ZV90IG1fc2l6ZUluQnl0ZXM7CisgICAgRmxvYXRTaXplIG1fcHJlc2VudGF0aW9uU2l6ZTsK
KyAgICBTYW1wbGVGbGFncyBtX2ZsYWdzOworICAgIHVpbnQ2NF90IG1fdHJhY2tJRDsKKyAgICBP
cHRpb25hbDxCeXRlUmFuZ2U+IG1fYnl0ZVJhbmdlOworICAgIFJldGFpblB0cjxNVFBsdWdpbkJ5
dGVTb3VyY2VSZWY+IG1fYnl0ZVNvdXJjZTsKKyAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlw
dGlvblJlZj4gbV9mb3JtYXREZXNjcmlwdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNv
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFT
YW1wbGVDdXJzb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkYjkyMGJmNjE1MTMyMGZjYjIxNTNlM2FjZDU4
NzYxZWU4Y2VmODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
TWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwCkBAIC0wLDAgKzEsMzY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxl
Q3Vyc29yLmgiCisKKyNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQorCisjaW5jbHVkZSAi
TWVkaWFUcmFja1JlYWRlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTYW1wbGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NhbXBsZU1hcC5oPgorI2luY2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24v
TWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVy
Lmg+CisjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+
CisKKyNpbmNsdWRlIDxwYWwvY29jb2EvTWVkaWFUb29sYm94U29mdExpbmsuaD4KKworV1RGX0RF
Q0xBUkVfQ0ZfVFlQRV9UUkFJVChNVFBsdWdpblNhbXBsZUN1cnNvcik7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgUEFMOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK3N0YXRpYyBPcHRpb25hbDxNZWRpYVNhbXBsZUN1cnNvcjo6RGVjb2RlT3JkZXJJdGVyYXRv
cj4gbWFrZUl0ZXJhdG9yKGNvbnN0IE1lZGlhU2FtcGxlQ3Vyc29yOjpEZWNvZGVkU2FtcGxlJiBk
ZWNvZGVkU2FtcGxlLCBTYW1wbGVNYXAmIHNhbXBsZXMsIGJvb2wgaGFzQWxsU2FtcGxlcykKK3sK
KyAgICBhdXRvJiBkZWNvZGVPcmRlciA9IHNhbXBsZXMuZGVjb2RlT3JkZXIoKTsKKyAgICBzd2l0
Y2ggKGRlY29kZWRTYW1wbGUpIHsKKyAgICBjYXNlIE1lZGlhU2FtcGxlQ3Vyc29yOjpEZWNvZGVk
U2FtcGxlOjpGaXJzdDoKKyAgICAgICAgaWYgKHNhbXBsZXMuc2l6ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGRlY29kZU9yZGVyLmJlZ2luKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVk
aWFTYW1wbGVDdXJzb3I6OkRlY29kZWRTYW1wbGU6Okxhc3Q6CisgICAgICAgIGlmIChzYW1wbGVz
LnNpemUoKSAmJiBoYXNBbGxTYW1wbGVzKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6cHJldihk
ZWNvZGVPcmRlci5lbmQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworfQorCitzdGF0aWMgT3B0aW9uYWw8TWVkaWFTYW1wbGVDdXJzb3I6OkRlY29k
ZU9yZGVySXRlcmF0b3I+IG1ha2VJdGVyYXRvcihjb25zdCBNZWRpYVNhbXBsZUN1cnNvcjo6UHJl
c2VudGF0aW9uT3JkZXJJdGVyYXRvciYgaXRlcmF0b3IsIFNhbXBsZU1hcCYgc2FtcGxlcywgYm9v
bCkKK3sKKyAgICBNZWRpYVNhbXBsZSYgc2FtcGxlID0gKml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7
CisgICAgcmV0dXJuIHNhbXBsZXMuZGVjb2RlT3JkZXIoKS5maW5kU2FtcGxlV2l0aERlY29kZUtl
eShzdGQ6Om1ha2VfcGFpcihzYW1wbGUuZGVjb2RlVGltZSgpLCBzYW1wbGUucHJlc2VudGF0aW9u
VGltZSgpKSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxNZWRpYVNhbXBsZUN1cnNvcjo6UHJlc2Vu
dGF0aW9uT3JkZXJJdGVyYXRvcj4gbWFrZUl0ZXJhdG9yKGNvbnN0IE1lZGlhVGltZSYgcHJlc2Vu
dGF0aW9uVGltZSwgU2FtcGxlTWFwJiBzYW1wbGVzLCBib29sIGhhc0FsbFNhbXBsZXMpCit7Cisg
ICAgYXV0byYgcHJlc2VudGF0aW9uT3JkZXIgPSBzYW1wbGVzLnByZXNlbnRhdGlvbk9yZGVyKCk7
CisgICAgYXV0byBpdGVyYXRvciA9IHByZXNlbnRhdGlvbk9yZGVyLmZpbmRTYW1wbGVDb250YWlu
aW5nT3JBZnRlclByZXNlbnRhdGlvblRpbWUocHJlc2VudGF0aW9uVGltZSk7CisgICAgaWYgKGl0
ZXJhdG9yICE9IHByZXNlbnRhdGlvbk9yZGVyLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlcmF0
b3I7CisgICAgaWYgKHNhbXBsZXMuc2l6ZSgpICYmIGhhc0FsbFNhbXBsZXMpCisgICAgICAgIHJl
dHVybiBzdGQ6OnByZXYoaXRlcmF0b3IpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisK
K3N0YXRpYyBPcHRpb25hbDxNZWRpYVNhbXBsZUN1cnNvcjo6UHJlc2VudGF0aW9uT3JkZXJJdGVy
YXRvcj4gbWFrZUl0ZXJhdG9yKGNvbnN0IE1lZGlhU2FtcGxlQ3Vyc29yOjpEZWNvZGVPcmRlckl0
ZXJhdG9yJiBpdGVyYXRvciwgU2FtcGxlTWFwJiBzYW1wbGVzLCBib29sKQoreworICAgIE1lZGlh
U2FtcGxlJiBzYW1wbGUgPSAqaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gc2Ft
cGxlcy5wcmVzZW50YXRpb25PcmRlcigpLmZpbmRTYW1wbGVXaXRoUHJlc2VudGF0aW9uVGltZShz
YW1wbGUucHJlc2VudGF0aW9uVGltZSgpKTsKK30KKworc3RhdGljIE1lZGlhVGltZSBtYWtlVGlt
ZShjb25zdCBEZWNvZGVPcmRlclNhbXBsZU1hcDo6aXRlcmF0b3ImIGl0KQoreworICAgIHJldHVy
biBpdC0+c2Vjb25kLT5kZWNvZGVUaW1lKCk7Cit9CisKK3N0YXRpYyBNZWRpYVRpbWUgbWFrZVRp
bWUoY29uc3QgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yJiBpdCkKK3sKKyAg
ICByZXR1cm4gaXQtPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPcmRlcmVkTWFwPiBzdGF0aWMgT3JkZXJlZE1hcCYgb3JkZXJlZFNhbXBsZXMoU2Ft
cGxlTWFwJik7CisKK3RlbXBsYXRlPD4KK0RlY29kZU9yZGVyU2FtcGxlTWFwJiBvcmRlcmVkU2Ft
cGxlcyhTYW1wbGVNYXAmIHNhbXBsZXMpCit7CisgICAgcmV0dXJuIHNhbXBsZXMuZGVjb2RlT3Jk
ZXIoKTsKK30KKwordGVtcGxhdGU8PgorUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXAmIG9yZGVy
ZWRTYW1wbGVzKFNhbXBsZU1hcCYgc2FtcGxlcykKK3sKKyAgICByZXR1cm4gc2FtcGxlcy5wcmVz
ZW50YXRpb25PcmRlcigpOworfQorCitzdGF0aWMgRGVjb2RlT3JkZXJTYW1wbGVNYXA6Oml0ZXJh
dG9yIHVwcGVyQm91bmQoRGVjb2RlT3JkZXJTYW1wbGVNYXAmIG1hcCwgY29uc3QgTWVkaWFUaW1l
JiB0aW1lKQoreworICAgIHJldHVybiBtYXAuZmluZFNhbXBsZUFmdGVyRGVjb2RlS2V5KHN0ZDo6
bWFrZV9wYWlyKHRpbWUsIE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUoKSkpOworfQor
CitzdGF0aWMgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yIHVwcGVyQm91bmQo
UHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXAmIG1hcCwgY29uc3QgTWVkaWFUaW1lJiB0aW1lKQor
eworICAgIHJldHVybiBtYXAuZmluZFNhbXBsZVN0YXJ0aW5nQWZ0ZXJQcmVzZW50YXRpb25UaW1l
KHRpbWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcmRlcmVkTWFwLCB0eXBlbmFtZSBTdGVw
PiBzdGF0aWMgU3RlcCBzdGVwSXRlcmF0b3IoU3RlcCwgdHlwZW5hbWUgT3JkZXJlZE1hcDo6aXRl
cmF0b3ImLCBPcmRlcmVkTWFwJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9yZGVyZWRNYXA+Citp
bnQ2NF90IHN0ZXBJdGVyYXRvcihpbnQ2NF90IHN0ZXBzUmVtYWluaW5nLCB0eXBlbmFtZSBPcmRl
cmVkTWFwOjppdGVyYXRvciYgaXRlcmF0b3IsIE9yZGVyZWRNYXAmIHNhbXBsZXMpCit7CisgICAg
QVNTRVJUKGl0ZXJhdG9yICE9IHNhbXBsZXMuZW5kKCkpOworICAgIGlmIChzdGVwc1JlbWFpbmlu
ZyA8IDApCisgICAgICAgIGZvciAoOyBzdGVwc1JlbWFpbmluZyAmJiBpdGVyYXRvciAhPSBzYW1w
bGVzLmJlZ2luKCk7ICsrc3RlcHNSZW1haW5pbmcsIC0taXRlcmF0b3IpIHsgfQorICAgIGVsc2UK
KyAgICAgICAgZm9yIChhdXRvIG5leHQgPSBzdGQ6Om5leHQoaXRlcmF0b3IpOyBzdGVwc1JlbWFp
bmluZyAmJiBuZXh0ICE9IHNhbXBsZXMuZW5kKCk7IC0tc3RlcHNSZW1haW5pbmcsIGl0ZXJhdG9y
ID0gbmV4dCsrKSB7IH0KKyAgICByZXR1cm4gc3RlcHNSZW1haW5pbmc7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIE9yZGVyZWRNYXA+CitNZWRpYVRpbWUgc3RlcEl0ZXJhdG9yKE1lZGlhVGltZSBk
ZWx0YVJlbWFpbmluZywgdHlwZW5hbWUgT3JkZXJlZE1hcDo6aXRlcmF0b3ImIGl0ZXJhdG9yLCBP
cmRlcmVkTWFwJiBzYW1wbGVzKQoreworICAgIEFTU0VSVChpdGVyYXRvciAhPSBzYW1wbGVzLmVu
ZCgpKTsKKyAgICBhdXRvIHJlcXVlc3RlZFRpbWUgPSBtYWtlVGltZShpdGVyYXRvcikgKyBkZWx0
YVJlbWFpbmluZzsKKyAgICBpdGVyYXRvciA9IHVwcGVyQm91bmQoc2FtcGxlcywgcmVxdWVzdGVk
VGltZSk7CisgICAgaWYgKGl0ZXJhdG9yICE9IHNhbXBsZXMuYmVnaW4oKSkKKyAgICAgICAgLS1p
dGVyYXRvcjsKKyAgICBkZWx0YVJlbWFpbmluZyA9IHJlcXVlc3RlZFRpbWUgLSBtYWtlVGltZShp
dGVyYXRvcik7CisgICAgaWYgKGRlbHRhUmVtYWluaW5nID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgp
ICYmIGRlbHRhUmVtYWluaW5nIDwgaXRlcmF0b3ItPnNlY29uZC0+ZHVyYXRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKKyAgICByZXR1cm4gZGVsdGFSZW1haW5p
bmc7Cit9CisKK0NNQmFzZUNsYXNzSUQgTWVkaWFTYW1wbGVDdXJzb3I6OndyYXBwZXJDbGFzc0lE
KCkKK3sKKyAgICByZXR1cm4gTVRQbHVnaW5TYW1wbGVDdXJzb3JHZXRDbGFzc0lEKCk7Cit9CisK
K0NvcmVNZWRpYVdyYXBwZWQ8TWVkaWFTYW1wbGVDdXJzb3I+KiBNZWRpYVNhbXBsZUN1cnNvcjo6
dW53cmFwKENNQmFzZU9iamVjdFJlZiBvYmplY3QpCit7CisgICAgcmV0dXJuIHVud3JhcChjaGVj
a2VkX2NmX2Nhc3Q8V3JhcHBlclJlZj4ob2JqZWN0KSk7Cit9CisKK1JlZlB0cjxNZWRpYVNhbXBs
ZUN1cnNvcj4gTWVkaWFTYW1wbGVDdXJzb3I6OmNyZWF0ZUF0UHJlc2VudGF0aW9uVGltZShBbGxv
Y2F0b3ImJiBhbGxvY2F0b3IsIE1lZGlhVHJhY2tSZWFkZXImIHRyYWNrUmVhZGVyLCBNZWRpYVRp
bWUgdGltZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IChhbGxvY2F0b3IpIE1lZGlhU2Ft
cGxlQ3Vyc29yKFdURk1vdmUoYWxsb2NhdG9yKSwgdHJhY2tSZWFkZXIsIFdURk1vdmUodGltZSkp
KTsKK30KKworUmVmUHRyPE1lZGlhU2FtcGxlQ3Vyc29yPiBNZWRpYVNhbXBsZUN1cnNvcjo6Y3Jl
YXRlQXREZWNvZGVkU2FtcGxlKEFsbG9jYXRvciYmIGFsbG9jYXRvciwgTWVkaWFUcmFja1JlYWRl
ciYgdHJhY2tSZWFkZXIsIERlY29kZWRTYW1wbGUgZGVjb2RlZFNhbXBsZSkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IChhbGxvY2F0b3IpIE1lZGlhU2FtcGxlQ3Vyc29yKFdURk1vdmUoYWxs
b2NhdG9yKSwgdHJhY2tSZWFkZXIsIFdURk1vdmUoZGVjb2RlZFNhbXBsZSkpKTsKK30KKworUmVm
UHRyPE1lZGlhU2FtcGxlQ3Vyc29yPiBNZWRpYVNhbXBsZUN1cnNvcjo6Y29weShBbGxvY2F0b3Im
JiBhbGxvY2F0b3IsIGNvbnN0IE1lZGlhU2FtcGxlQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhjdXJzb3IubV9sb2NhdG9yTG9jayk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyAoYWxsb2NhdG9yKSBNZWRpYVNhbXBsZUN1cnNvcihXVEZNb3ZlKGFsbG9jYXRv
ciksIGN1cnNvcikpOworfQorCitNZWRpYVNhbXBsZUN1cnNvcjo6TWVkaWFTYW1wbGVDdXJzb3Io
QWxsb2NhdG9yJiYgYWxsb2NhdG9yLCBNZWRpYVRyYWNrUmVhZGVyJiB0cmFja1JlYWRlciwgTG9j
YXRvciBsb2NhdG9yKQorICAgIDogQ29yZU1lZGlhV3JhcHBlZChXVEZNb3ZlKGFsbG9jYXRvcikp
CisgICAgLCBtX3RyYWNrUmVhZGVyKHRyYWNrUmVhZGVyKQorICAgICwgbV9sb2NhdG9yKFdURk1v
dmUobG9jYXRvcikpCit7Cit9CisKK01lZGlhU2FtcGxlQ3Vyc29yOjpNZWRpYVNhbXBsZUN1cnNv
cihBbGxvY2F0b3ImJiBhbGxvY2F0b3IsIGNvbnN0IE1lZGlhU2FtcGxlQ3Vyc29yJiBjdXJzb3Ip
CisgICAgOiBDb3JlTWVkaWFXcmFwcGVkKFdURk1vdmUoYWxsb2NhdG9yKSkKKyAgICAsIG1fdHJh
Y2tSZWFkZXIoY3Vyc29yLm1fdHJhY2tSZWFkZXIuY29weVJlZigpKQorICAgICwgbV9sb2NhdG9y
KGN1cnNvci5tX2xvY2F0b3IpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgor
T3B0aW9uYWw8SXRlcmF0b3I+IE1lZGlhU2FtcGxlQ3Vyc29yOjpsb2NhdGVJdGVyYXRvcihTYW1w
bGVNYXAmIHNhbXBsZXMsIGJvb2wgaGFzQWxsU2FtcGxlcykgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9sb2NhdG9yTG9jay5pc0xvY2tlZCgpKTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2xv
Y2F0b3IsCisgICAgICAgIFsmXShjb25zdCBhdXRvJiBsb2NhdG9yKSAtPiBPcHRpb25hbDxJdGVy
YXRvcj4geworICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1ha2VJdGVyYXRvcihsb2NhdG9y
LCBzYW1wbGVzLCBoYXNBbGxTYW1wbGVzKTsKKyAgICAgICAgICAgIGlmICghaXRlcmF0b3IpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIG1fbG9jYXRv
ciA9IFdURk1vdmUoKml0ZXJhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBsb2NhdGVJdGVyYXRv
cjxJdGVyYXRvcj4oc2FtcGxlcywgaGFzQWxsU2FtcGxlcyk7CisgICAgICAgIH0sCisgICAgICAg
IFsmXShjb25zdCBJdGVyYXRvciYgaXRlcmF0b3IpIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvcjsKKyAgICAgICAgfQorICAgICk7Cit9CisKK01lZGlhU2FtcGxlKiBNZWRpYVNhbXBsZUN1
cnNvcjo6bG9jYXRlTWVkaWFTYW1wbGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2xvY2F0b3JM
b2NrLmlzTG9ja2VkKCkpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fbG9jYXRvciwKKyAg
ICAgICAgWyZdKGNvbnN0IGF1dG8mIGxvY2F0b3IpIHsKKyAgICAgICAgICAgIG1fdHJhY2tSZWFk
ZXItPndhaXRGb3JTYW1wbGUoWyZdKFNhbXBsZU1hcCYgc2FtcGxlcywgYm9vbCBoYXNBbGxTYW1w
bGVzKSB7CisgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1ha2VJdGVyYXRvcihsb2Nh
dG9yLCBzYW1wbGVzLCBoYXNBbGxTYW1wbGVzKTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZXJh
dG9yKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzQWxsU2FtcGxlczsKKyAgICAgICAg
ICAgICAgICBtX2xvY2F0b3IgPSBXVEZNb3ZlKCppdGVyYXRvcik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBsb2NhdGVN
ZWRpYVNhbXBsZSgpOworICAgICAgICB9LAorICAgICAgICBbJl0oY29uc3QgTWVkaWFTYW1wbGVD
dXJzb3I6OkRlY29kZU9yZGVySXRlcmF0b3ImIGl0ZXJhdG9yKSB7CisgICAgICAgICAgICByZXR1
cm4gaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0
IE1lZGlhU2FtcGxlQ3Vyc29yOjpQcmVzZW50YXRpb25PcmRlckl0ZXJhdG9yJiBpdGVyYXRvcikg
eworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIH0K
KyAgICApOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcmRlcmVkTWFwLCB0eXBlbmFtZSBTdGVw
PgorU3RlcCBNZWRpYVNhbXBsZUN1cnNvcjo6c3RlcEluT3JkZXJlZE1hcChTdGVwIHN0ZXBzUmVt
YWluaW5nKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NhdG9yTG9jayk7Cisg
ICAgbV90cmFja1JlYWRlci0+d2FpdEZvclNhbXBsZShbJl0oU2FtcGxlTWFwJiBzYW1wbGVzLCBi
b29sIGhhc0FsbFNhbXBsZXMpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBsb2NhdGVJ
dGVyYXRvcjx0eXBlbmFtZSBPcmRlcmVkTWFwOjppdGVyYXRvcj4oc2FtcGxlcywgaGFzQWxsU2Ft
cGxlcykpIHsKKyAgICAgICAgICAgIHN0ZXBzUmVtYWluaW5nID0gc3RlcEl0ZXJhdG9yKHN0ZXBz
UmVtYWluaW5nLCAqaXRlcmF0b3IsIG9yZGVyZWRTYW1wbGVzPE9yZGVyZWRNYXA+KHNhbXBsZXMp
KTsKKyAgICAgICAgICAgIG1fbG9jYXRvciA9IFdURk1vdmUoKml0ZXJhdG9yKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaGFzQWxsU2FtcGxlcyB8fCAhc3RlcHNSZW1haW5pbmc7CisgICAg
fSk7CisgICAgcmV0dXJuIHN0ZXBzUmVtYWluaW5nOworfQorCitPU1N0YXR1cyBNZWRpYVNhbXBs
ZUN1cnNvcjo6Z2V0TWVkaWFTYW1wbGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChNZWRpYVNhbXBs
ZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NhdG9yTG9jayk7CisgICAgYXV0byBzYW1wbGUgPSBsb2NhdGVNZWRpYVNhbXBs
ZSgpOworICAgIGlmICghc2FtcGxlKQorICAgICAgICByZXR1cm4ga01UUGx1Z2luU2FtcGxlQ3Vy
c29yRXJyb3JfTm9TYW1wbGVzOworICAgIGNvbXBsZXRpb25IYW5kbGVyKCpzYW1wbGUpOworICAg
IHJldHVybiBub0VycjsKK30KKworT1NTdGF0dXMgTWVkaWFTYW1wbGVDdXJzb3I6OmNvcHlQcm9w
ZXJ0eShDRlN0cmluZ1JlZiwgQ0ZBbGxvY2F0b3JSZWYsIHZvaWQqKQoreworICAgIHJldHVybiBr
Q01CYXNlT2JqZWN0RXJyb3JfVmFsdWVOb3RBdmFpbGFibGU7Cit9CisKK09TU3RhdHVzIE1lZGlh
U2FtcGxlQ3Vyc29yOjpjb3B5KE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKiBzYW1wbGVDdXJzb3Ip
IGNvbnN0Cit7CisgICAgKnNhbXBsZUN1cnNvciA9IE1lZGlhU2FtcGxlQ3Vyc29yOjpjb3B5KGFs
bG9jYXRvcigpLCAqdGhpcykubGVha1JlZigpLT53cmFwcGVyKCk7CisgICAgcmV0dXJuIG5vRXJy
OworfQorCitPU1N0YXR1cyBNZWRpYVNhbXBsZUN1cnNvcjo6c3RlcEluRGVjb2RlT3JkZXJBbmRS
ZXBvcnRTdGVwc1Rha2VuKGludDY0X3Qgc3RlcHNUb1Rha2UsIGludDY0X3QqIHN0ZXBzVGFrZW4p
Cit7CisgICAgYXV0byBzdGVwc1JlbWFpbmluZyA9IHN0ZXBJbk9yZGVyZWRNYXA8RGVjb2RlT3Jk
ZXJTYW1wbGVNYXA+KHN0ZXBzVG9UYWtlKTsKKyAgICAqc3RlcHNUYWtlbiA9IHN0ZXBzVG9UYWtl
IC0gc3RlcHNSZW1haW5pbmc7CisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1cyBNZWRp
YVNhbXBsZUN1cnNvcjo6c3RlcEluUHJlc2VudGF0aW9uT3JkZXJBbmRSZXBvcnRTdGVwc1Rha2Vu
KGludDY0X3Qgc3RlcHNUb1Rha2UsIGludDY0X3QqIHN0ZXBzVGFrZW4pCit7CisgICAgYXV0byBz
dGVwc1JlbWFpbmluZyA9IHN0ZXBJbk9yZGVyZWRNYXA8UHJlc2VudGF0aW9uT3JkZXJTYW1wbGVN
YXA+KHN0ZXBzVG9UYWtlKTsKKyAgICAqc3RlcHNUYWtlbiA9IHN0ZXBzVG9UYWtlIC0gc3RlcHNS
ZW1haW5pbmc7CisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1cyBNZWRpYVNhbXBsZUN1
cnNvcjo6c3RlcEJ5RGVjb2RlVGltZShDTVRpbWUgdGltZSwgQm9vbGVhbiogd2FzUGlubmVkKQor
eworICAgIGF1dG8gdGltZVJlbWFpbmluZyA9IHN0ZXBJbk9yZGVyZWRNYXA8RGVjb2RlT3JkZXJT
YW1wbGVNYXA+KFBBTDo6dG9NZWRpYVRpbWUodGltZSkpOworICAgICp3YXNQaW5uZWQgPSAhIXRp
bWVSZW1haW5pbmc7CisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1cyBNZWRpYVNhbXBs
ZUN1cnNvcjo6c3RlcEJ5UHJlc2VudGF0aW9uVGltZShDTVRpbWUgdGltZSwgQm9vbGVhbiogd2Fz
UGlubmVkKQoreworICAgIGF1dG8gdGltZVJlbWFpbmluZyA9IHN0ZXBJbk9yZGVyZWRNYXA8UHJl
c2VudGF0aW9uT3JkZXJTYW1wbGVNYXA+KFBBTDo6dG9NZWRpYVRpbWUodGltZSkpOworICAgICp3
YXNQaW5uZWQgPSAhIXRpbWVSZW1haW5pbmc7CisgICAgcmV0dXJuIG5vRXJyOworfQorCitDRkNv
bXBhcmlzb25SZXN1bHQgTWVkaWFTYW1wbGVDdXJzb3I6OmNvbXBhcmVJbkRlY29kZU9yZGVyKE1U
UGx1Z2luU2FtcGxlQ3Vyc29yUmVmIG90aGVyQ3Vyc29yUmVmKSBjb25zdAoreworICAgIGlmICh3
cmFwcGVyKCkgPT0gb3RoZXJDdXJzb3JSZWYpCisgICAgICAgIHJldHVybiBrQ0ZDb21wYXJlRXF1
YWxUbzsKKworICAgIGF1dG8gZGVjb2RlVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsK
KyAgICBnZXRNZWRpYVNhbXBsZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgeworICAgICAgICBk
ZWNvZGVUaW1lID0gc2FtcGxlLmRlY29kZVRpbWUoKTsKKyAgICB9KTsKKworICAgIGF1dG8gb3Ro
ZXJEZWNvZGVUaW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgIGlmIChhdXRvIG90
aGVyQ3Vyc29yID0gdW53cmFwKG90aGVyQ3Vyc29yUmVmKSkgeworICAgICAgICBvdGhlckN1cnNv
ci0+Z2V0TWVkaWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxlJiBzYW1wbGUpIHsKKyAgICAgICAgICAg
IG90aGVyRGVjb2RlVGltZSA9IHNhbXBsZS5kZWNvZGVUaW1lKCk7CisgICAgICAgIH0pOworICAg
IH0KKworICAgIHN3aXRjaCAoZGVjb2RlVGltZS5jb21wYXJlKG90aGVyRGVjb2RlVGltZSkpIHsK
KyAgICBjYXNlIE1lZGlhVGltZTo6TGVzc1RoYW46CisgICAgICAgIHJldHVybiBrQ0ZDb21wYXJl
TGVzc1RoYW47CisgICAgY2FzZSBNZWRpYVRpbWU6OkVxdWFsVG86CisgICAgICAgIHJldHVybiBr
Q0ZDb21wYXJlRXF1YWxUbzsKKyAgICBjYXNlIE1lZGlhVGltZTo6R3JlYXRlclRoYW46CisgICAg
ICAgIHJldHVybiBrQ0ZDb21wYXJlR3JlYXRlclRoYW47CisgICAgfQorfQorCitPU1N0YXR1cyBN
ZWRpYVNhbXBsZUN1cnNvcjo6Z2V0U2FtcGxlVGltaW5nKENNU2FtcGxlVGltaW5nSW5mbyogc2Ft
cGxlVGltaW5nKSBjb25zdAoreworICAgIHJldHVybiBnZXRNZWRpYVNhbXBsZShbJl0oTWVkaWFT
YW1wbGUmIHNhbXBsZSkgeworICAgICAgICAqc2FtcGxlVGltaW5nID0geworICAgICAgICAgICAg
Ly8gRklYTUU6IER1cmF0aW9uIHNob3VsZCBiZSB0aGUgZGlmZmVyZW5jZSBpbiBwcmVzZW50YXRp
b24gdGltZSBiZXR3ZWVuIHRoaXMgc2FtcGxlIGFuZCB0aGUgbmV4dCBpbiBwcmVzZW50YXRpb24g
b3JkZXIgKG9yIHRyYWNrIGR1cmF0aW9uIGlmIHRoaXMgaXMgdGhlIGxhc3Qgc2FtcGxlKS4KKyAg
ICAgICAgICAgIC5kdXJhdGlvbiA9IFBBTDo6dG9DTVRpbWUoc2FtcGxlLmR1cmF0aW9uKCkpLAor
ICAgICAgICAgICAgLnByZXNlbnRhdGlvblRpbWVTdGFtcCA9IFBBTDo6dG9DTVRpbWUoc2FtcGxl
LnByZXNlbnRhdGlvblRpbWUoKSksCisgICAgICAgICAgICAuZGVjb2RlVGltZVN0YW1wID0gUEFM
Ojp0b0NNVGltZShzYW1wbGUuZGVjb2RlVGltZSgpKSwKKyAgICAgICAgfTsKKyAgICB9KTsKK30K
KworT1NTdGF0dXMgTWVkaWFTYW1wbGVDdXJzb3I6OmdldFN5bmNJbmZvKE1UUGx1Z2luU2FtcGxl
Q3Vyc29yU3luY0luZm8qIHN5bmNJbmZvKSBjb25zdAoreworICAgIHJldHVybiBnZXRNZWRpYVNh
bXBsZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgeworICAgICAgICAqc3luY0luZm8gPSB7Cisg
ICAgICAgICAgICAuZnVsbFN5bmMgPSBzYW1wbGUuaXNTeW5jKCkKKyAgICAgICAgfTsKKyAgICB9
KTsKK30KKworT1NTdGF0dXMgTWVkaWFTYW1wbGVDdXJzb3I6OmNvcHlGb3JtYXREZXNjcmlwdGlv
bihDTUZvcm1hdERlc2NyaXB0aW9uUmVmKiBmb3JtYXREZXNjcmlwdGlvbk91dCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZ2V0TWVkaWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxlJiBzYW1wbGUpIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzYW1wbGUucGxh
dGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBl
KTsKKyAgICAgICAgKmZvcm1hdERlc2NyaXB0aW9uT3V0ID0gcmV0YWluUHRyKHNhbXBsZS5wbGF0
Zm9ybVNhbXBsZSgpLnNhbXBsZS5ieXRlUmFuZ2VTYW1wbGUuc2Vjb25kKS5sZWFrUmVmKCk7Cisg
ICAgfSk7Cit9CisKK09TU3RhdHVzIE1lZGlhU2FtcGxlQ3Vyc29yOjpjb3B5U2FtcGxlTG9jYXRp
b24oTVRQbHVnaW5TYW1wbGVDdXJzb3JTdG9yYWdlUmFuZ2UqIHN0b3JhZ2VSYW5nZSwgTVRQbHVn
aW5CeXRlU291cmNlUmVmKiBieXRlU291cmNlKSBjb25zdAoreworICAgIHJldHVybiBnZXRNZWRp
YVNhbXBsZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUg
PT0gUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGUpOworICAgICAgICBhdXRvIGJ5
dGVSYW5nZSA9ICpzYW1wbGUuYnl0ZVJhbmdlKCk7CisgICAgICAgICpzdG9yYWdlUmFuZ2UgPSB7
CisgICAgICAgICAgICAub2Zmc2V0ID0gQ2hlY2tlZEludDY0KGJ5dGVSYW5nZS5ieXRlT2Zmc2V0
KS51bnNhZmVHZXQoKSwKKyAgICAgICAgICAgIC5sZW5ndGggPSBDaGVja2VkSW50NjQoYnl0ZVJh
bmdlLmJ5dGVMZW5ndGgpLnVuc2FmZUdldCgpLAorICAgICAgICB9OworICAgICAgICAqYnl0ZVNv
dXJjZSA9IHJldGFpblB0cihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuYnl0ZVJhbmdl
U2FtcGxlLmZpcnN0KS5sZWFrUmVmKCk7CisgICAgfSk7Cit9CisKK09TU3RhdHVzIE1lZGlhU2Ft
cGxlQ3Vyc29yOjpnZXRQbGF5YWJsZUhvcml6b24oQ01UaW1lKikgY29uc3QKK3sKKyAgICByZXR1
cm4ga0NNQmFzZU9iamVjdEVycm9yX1ZhbHVlTm90QXZhaWxhYmxlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFT
YW1wbGVDdXJzb3IuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRl
ci9NZWRpYVNhbXBsZUN1cnNvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjMWEwYTgwNjExZDg4NTM3YmQyZDc1
ZTJjY2MxYjk0YzIxM2E4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuaApAQCAtMCwwICsxLDE1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQk1fRk9STUFU
X1JFQURFUikKKworI2luY2x1ZGUgIkNvcmVNZWRpYVdyYXBwZWQuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL1NhbXBsZU1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvVmFyaWFudC5oPgorCitERUNMQVJFX0NPUkVfTUVESUFfVFJBSVRTKFNhbXBsZUN1cnNvcik7
CisKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGtNVFBsdWdpblNhbXBsZUN1cnNvcl9DbGFz
c1ZlcnNpb25fNCBpcyBhdmFpbGFibGUgaW4gU0RLcy4KKyNpZiBkZWZpbmVkKEhBVkVfTVRfUExV
R0lOX1NBTVBMRV9DVVJTT1JfUExBWUFCTEVfSE9SSVpPTikKKyN1bmRlZiBIQVZFX01UX1BMVUdJ
Tl9TQU1QTEVfQ1VSU09SX1BMQVlBQkxFX0hPUklaT04KKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBNZWRpYVNhbXBsZTsKK307CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBNZWRpYVRyYWNrUmVhZGVyOworCitjbGFzcyBNZWRpYVNhbXBsZUN1cnNvciA6IHB1Ymxp
YyBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhU2FtcGxlQ3Vyc29yPiB7CitwdWJsaWM6CisgICAgdXNp
bmcgRGVjb2RlT3JkZXJJdGVyYXRvciA9IERlY29kZU9yZGVyU2FtcGxlTWFwOjppdGVyYXRvcjsK
KyAgICB1c2luZyBQcmVzZW50YXRpb25PcmRlckl0ZXJhdG9yID0gUHJlc2VudGF0aW9uT3JkZXJT
YW1wbGVNYXA6Oml0ZXJhdG9yOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBXcmFwcGVyQ2xhc3Mg
d3JhcHBlckNsYXNzKCk7CisgICAgc3RhdGljIENNQmFzZUNsYXNzSUQgd3JhcHBlckNsYXNzSUQo
KTsKKyAgICBzdGF0aWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYVNhbXBsZUN1cnNvcj4qIHVud3Jh
cChDTUJhc2VPYmplY3RSZWYpOworCisgICAgZW51bSBjbGFzcyBEZWNvZGVkU2FtcGxlIHsKKyAg
ICAgICAgRmlyc3QsCisgICAgICAgIExhc3QsCisgICAgfTsKKworICAgIHN0YXRpYyBSZWZQdHI8
TWVkaWFTYW1wbGVDdXJzb3I+IGNvcHkoQWxsb2NhdG9yJiYsIGNvbnN0IE1lZGlhU2FtcGxlQ3Vy
c29yJik7CisgICAgc3RhdGljIFJlZlB0cjxNZWRpYVNhbXBsZUN1cnNvcj4gY3JlYXRlQXREZWNv
ZGVkU2FtcGxlKEFsbG9jYXRvciYmLCBNZWRpYVRyYWNrUmVhZGVyJiwgRGVjb2RlZFNhbXBsZSk7
CisgICAgc3RhdGljIFJlZlB0cjxNZWRpYVNhbXBsZUN1cnNvcj4gY3JlYXRlQXRQcmVzZW50YXRp
b25UaW1lKEFsbG9jYXRvciYmLCBNZWRpYVRyYWNrUmVhZGVyJiwgTWVkaWFUaW1lKTsKKworcHJp
dmF0ZToKKyAgICB1c2luZyBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhU2FtcGxlQ3Vyc29yPjo6dW53
cmFwOworICAgIHVzaW5nIExvY2F0b3IgPSBWYXJpYW50PE1lZGlhVGltZSwgRGVjb2RlZFNhbXBs
ZSwgRGVjb2RlT3JkZXJJdGVyYXRvciwgUHJlc2VudGF0aW9uT3JkZXJJdGVyYXRvcj47CisKKyAg
ICBNZWRpYVNhbXBsZUN1cnNvcihBbGxvY2F0b3ImJiwgTWVkaWFUcmFja1JlYWRlciYsIExvY2F0
b3IpOworICAgIE1lZGlhU2FtcGxlQ3Vyc29yKEFsbG9jYXRvciYmLCBjb25zdCBNZWRpYVNhbXBs
ZUN1cnNvciYpOworCisgICAgV2ViQ29yZTo6TWVkaWFTYW1wbGUqIGxvY2F0ZU1lZGlhU2FtcGxl
KCkgY29uc3Q7CisgICAgT1NTdGF0dXMgZ2V0TWVkaWFTYW1wbGUoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChXZWJDb3JlOjpNZWRpYVNhbXBsZSYpPiYmKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvcj4gT3B0aW9uYWw8SXRlcmF0b3I+IGxvY2F0ZUl0ZXJhdG9yKFNhbXBsZU1h
cCYsIGJvb2wgaGFzQWxsU2FtcGxlcykgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cmRlcmVkTWFwLCB0eXBlbmFtZSBTdGVwPiBTdGVwIHN0ZXBJbk9yZGVyZWRNYXAoU3RlcCk7CisK
KyAgICAvLyBDb3JlTWVkaWFXcmFwcGVkCisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiV2ViS2l0OjpNZWRpYVNhbXBsZUN1cnNvciJfczsgfQorICAg
IE9TU3RhdHVzIGNvcHlQcm9wZXJ0eShDRlN0cmluZ1JlZiwgQ0ZBbGxvY2F0b3JSZWYsIHZvaWQq
IGNvcGllZFZhbHVlKSBmaW5hbDsKKworICAgIC8vIFdyYXBwZXJDbGFzcworICAgIE9TU3RhdHVz
IGNvcHkoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqKSBjb25zdDsKKyAgICBPU1N0YXR1cyBzdGVw
SW5EZWNvZGVPcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4oaW50NjRfdCwgaW50NjRfdCopOworICAg
IE9TU3RhdHVzIHN0ZXBJblByZXNlbnRhdGlvbk9yZGVyQW5kUmVwb3J0U3RlcHNUYWtlbihpbnQ2
NF90LCBpbnQ2NF90Kik7CisgICAgT1NTdGF0dXMgc3RlcEJ5RGVjb2RlVGltZShDTVRpbWUsIEJv
b2xlYW4qKTsKKyAgICBPU1N0YXR1cyBzdGVwQnlQcmVzZW50YXRpb25UaW1lKENNVGltZSwgQm9v
bGVhbiopOworICAgIENGQ29tcGFyaXNvblJlc3VsdCBjb21wYXJlSW5EZWNvZGVPcmRlcihNVFBs
dWdpblNhbXBsZUN1cnNvclJlZikgY29uc3Q7CisgICAgT1NTdGF0dXMgZ2V0U2FtcGxlVGltaW5n
KENNU2FtcGxlVGltaW5nSW5mbyopIGNvbnN0OworICAgIE9TU3RhdHVzIGdldFN5bmNJbmZvKE1U
UGx1Z2luU2FtcGxlQ3Vyc29yU3luY0luZm8qKSBjb25zdDsKKyAgICBPU1N0YXR1cyBjb3B5Rm9y
bWF0RGVzY3JpcHRpb24oQ01Gb3JtYXREZXNjcmlwdGlvblJlZiopIGNvbnN0OworICAgIE9TU3Rh
dHVzIGNvcHlTYW1wbGVMb2NhdGlvbihNVFBsdWdpblNhbXBsZUN1cnNvclN0b3JhZ2VSYW5nZSos
IE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiopIGNvbnN0OworICAgIE9TU3RhdHVzIGdldFBsYXlhYmxl
SG9yaXpvbihDTVRpbWUqKSBjb25zdDsKKworICAgIFJlZjxNZWRpYVRyYWNrUmVhZGVyPiBtX3Ry
YWNrUmVhZGVyOworICAgIG11dGFibGUgTG9jYXRvciBtX2xvY2F0b3I7CisgICAgbXV0YWJsZSBM
b2NrIG1fbG9jYXRvckxvY2s7Cit9OworCitjb25zdGV4cHIgTWVkaWFTYW1wbGVDdXJzb3I6Oldy
YXBwZXJDbGFzcyBNZWRpYVNhbXBsZUN1cnNvcjo6d3JhcHBlckNsYXNzKCkKK3sKKyAgICByZXR1
cm4geworI2lmIEhBVkUoTVRfUExVR0lOX1NBTVBMRV9DVVJTT1JfUExBWUFCTEVfSE9SSVpPTikK
KyAgICAgICAgLnZlcnNpb24gPSBrTVRQbHVnaW5TYW1wbGVDdXJzb3JfQ2xhc3NWZXJzaW9uXzQs
CisjZWxzZQorICAgICAgICAudmVyc2lvbiA9IGtNVFBsdWdpblNhbXBsZUN1cnNvcl9DbGFzc1Zl
cnNpb25fMywKKyNlbmRpZgorICAgICAgICAuY29weSA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29y
UmVmIHNhbXBsZUN1cnNvciwgTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqIHNhbXBsZUN1cnNvckNv
cHkpIHsKKyAgICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+Y29weShzYW1w
bGVDdXJzb3JDb3B5KTsKKyAgICAgICAgfSwKKyAgICAgICAgLnN0ZXBJbkRlY29kZU9yZGVyQW5k
UmVwb3J0U3RlcHNUYWtlbiA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNv
ciwgaW50NjRfdCBzdGVwQ291bnQsIGludDY0X3QqIHN0ZXBzVGFrZW4pIHsKKyAgICAgICAgICAg
IHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+c3RlcEluRGVjb2RlT3JkZXJBbmRSZXBvcnRT
dGVwc1Rha2VuKHN0ZXBDb3VudCwgc3RlcHNUYWtlbik7CisgICAgICAgIH0sCisgICAgICAgIC5z
dGVwSW5QcmVzZW50YXRpb25PcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4gPSBbXShNVFBsdWdpblNh
bXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIGludDY0X3Qgc3RlcENvdW50LCBpbnQ2NF90KiBz
dGVwc1Rha2VuKSB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPnN0
ZXBJblByZXNlbnRhdGlvbk9yZGVyQW5kUmVwb3J0U3RlcHNUYWtlbihzdGVwQ291bnQsIHN0ZXBz
VGFrZW4pOworICAgICAgICB9LAorICAgICAgICAuc3RlcEJ5RGVjb2RlVGltZSA9IFtdKE1UUGx1
Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgQ01UaW1lIGRlbHRhRGVjb2RlVGltZSwg
Qm9vbGVhbiogcG9zaXRpb25XYXNQaW5uZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB1bndyYXAo
c2FtcGxlQ3Vyc29yKS0+c3RlcEJ5RGVjb2RlVGltZShkZWx0YURlY29kZVRpbWUsIHBvc2l0aW9u
V2FzUGlubmVkKTsKKyAgICAgICAgfSwKKyAgICAgICAgLnN0ZXBCeVByZXNlbnRhdGlvblRpbWUg
PSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIENNVGltZSBkZWx0YVBy
ZXNlbnRhdGlvblRpbWUsIEJvb2xlYW4qIHBvc2l0aW9uV2FzUGlubmVkKSB7CisgICAgICAgICAg
ICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPnN0ZXBCeVByZXNlbnRhdGlvblRpbWUoZGVs
dGFQcmVzZW50YXRpb25UaW1lLCBwb3NpdGlvbldhc1Bpbm5lZCk7CisgICAgICAgIH0sCisgICAg
ICAgIC5jb21wYXJlSW5EZWNvZGVPcmRlciA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNh
bXBsZUN1cnNvciwgTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYgb3RoZXJTYW1wbGVDdXJzb3IpIHsK
KyAgICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+Y29tcGFyZUluRGVjb2Rl
T3JkZXIob3RoZXJTYW1wbGVDdXJzb3IpOworICAgICAgICB9LAorICAgICAgICAuZ2V0U2FtcGxl
VGltaW5nID0gW10oTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYgc2FtcGxlQ3Vyc29yLCBDTVNhbXBs
ZVRpbWluZ0luZm8qIHNhbXBsZVRpbWluZ0luZm8pIHsKKyAgICAgICAgICAgIHJldHVybiB1bndy
YXAoc2FtcGxlQ3Vyc29yKS0+Z2V0U2FtcGxlVGltaW5nKHNhbXBsZVRpbWluZ0luZm8pOworICAg
ICAgICB9LAorICAgICAgICAuZ2V0U3luY0luZm8gPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJl
ZiBzYW1wbGVDdXJzb3IsIE1UUGx1Z2luU2FtcGxlQ3Vyc29yU3luY0luZm8qIHN5bmNJbmZvKSAt
PiBPU1N0YXR1cyB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPmdl
dFN5bmNJbmZvKHN5bmNJbmZvKTsKKyAgICAgICAgfSwKKyAgICAgICAgLmNvcHlGb3JtYXREZXNj
cmlwdGlvbiA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgQ01Gb3Jt
YXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIHJldHVy
biB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+Y29weUZvcm1hdERlc2NyaXB0aW9uKGZvcm1hdERlc2Ny
aXB0aW9uKTsKKyAgICAgICAgfSwKKyAgICAgICAgLmNvcHlTYW1wbGVMb2NhdGlvbiA9IFtdKE1U
UGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgTVRQbHVnaW5TYW1wbGVDdXJzb3JT
dG9yYWdlUmFuZ2UqIHN0b3JhZ2VSYW5nZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmKiBieXRlU291
cmNlKSB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPmNvcHlTYW1w
bGVMb2NhdGlvbihzdG9yYWdlUmFuZ2UsIGJ5dGVTb3VyY2UpOworICAgICAgICB9LAorI2lmIEhB
VkUoTVRfUExVR0lOX1NBTVBMRV9DVVJTT1JfUExBWUFCTEVfSE9SSVpPTikKKyAgICAgICAgLmdl
dFBsYXlhYmxlSG9yaXpvbiA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNv
ciwgQ01UaW1lKiBwbGF5YWJsZUhvcml6b24pIHsKKyAgICAgICAgICAgIHJldHVybiB1bndyYXAo
c2FtcGxlQ3Vyc29yKS0+Z2V0UGxheWFibGVIb3Jpem9uKHBsYXlhYmxlSG9yaXpvbik7CisgICAg
ICAgIH0sCisjZW5kaWYKKyAgICB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmIxY2QxZGUwZWY5MDBjZmVjMDhkMjgwZjQzYjRkZWEyODkzYTQ1
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1h
dFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYVRyYWNrUmVhZGVyLmgiCisK
KyNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQorCisjaW5jbHVkZSAiTWVkaWFGb3JtYXRS
ZWFkZXIuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oIgorI2luY2x1ZGUgIk1l
ZGlhU2FtcGxlQ3Vyc29yLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BdWRpb1RyYWNrUHJpdmF0ZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvTWVkaWFEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2FtcGxlTWFw
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb1RyYWNrUHJpdmF0ZS5oPgorI2luY2x1ZGUgPHBh
bC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+CisKKyNpbmNsdWRlIDxwYWwv
Y29jb2EvTWVkaWFUb29sYm94U29mdExpbmsuaD4KKworV1RGX0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJ
VChNVFBsdWdpblRyYWNrUmVhZGVyKTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5h
bWVzcGFjZSBQQUw7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQ01CYXNlQ2xhc3NJRCBN
ZWRpYVRyYWNrUmVhZGVyOjp3cmFwcGVyQ2xhc3NJRCgpCit7CisgICAgcmV0dXJuIE1UUGx1Z2lu
VHJhY2tSZWFkZXJHZXRDbGFzc0lEKCk7Cit9CisKK0NvcmVNZWRpYVdyYXBwZWQ8TWVkaWFUcmFj
a1JlYWRlcj4qIE1lZGlhVHJhY2tSZWFkZXI6OnVud3JhcChDTUJhc2VPYmplY3RSZWYgb2JqZWN0
KQoreworICAgIHJldHVybiB1bndyYXAoY2hlY2tlZF9jZl9jYXN0PFdyYXBwZXJSZWY+KG9iamVj
dCkpOworfQorCitSZWZQdHI8TWVkaWFUcmFja1JlYWRlcj4gTWVkaWFUcmFja1JlYWRlcjo6Y3Jl
YXRlKEFsbG9jYXRvciYmIGFsbG9jYXRvciwgY29uc3QgTWVkaWFGb3JtYXRSZWFkZXImIGZvcm1h
dFJlYWRlciwgQ01NZWRpYVR5cGUgbWVkaWFUeXBlLCB1aW50NjRfdCB0cmFja0lELCBPcHRpb25h
bDxib29sPiBlbmFibGVkKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgKGFsbG9jYXRvcikg
TWVkaWFUcmFja1JlYWRlcihXVEZNb3ZlKGFsbG9jYXRvciksIGZvcm1hdFJlYWRlciwgbWVkaWFU
eXBlLCB0cmFja0lELCBlbmFibGVkKSk7Cit9CisKK1dvcmtRdWV1ZSYgTWVkaWFUcmFja1JlYWRl
cjo6c3RvcmFnZVF1ZXVlKCkKK3sKKyAgICBzdGF0aWMgYXV0byYgcXVldWUgPSBXb3JrUXVldWU6
OmNyZWF0ZSgiV2ViS2l0OjpNZWRpYVRyYWNrUmVhZGVyIFN0b3JhZ2UgUXVldWUiLCBXb3JrUXVl
dWU6OlR5cGU6OlNlcmlhbCkubGVha1JlZigpOworICAgIHJldHVybiBxdWV1ZTsKK30KKworTWVk
aWFUcmFja1JlYWRlcjo6TWVkaWFUcmFja1JlYWRlcihBbGxvY2F0b3ImJiBhbGxvY2F0b3IsIGNv
bnN0IE1lZGlhRm9ybWF0UmVhZGVyJiBmb3JtYXRSZWFkZXIsIENNTWVkaWFUeXBlIG1lZGlhVHlw
ZSwgdWludDY0X3QgdHJhY2tJRCwgT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKKyAgICA6IENvcmVN
ZWRpYVdyYXBwZWQoV1RGTW92ZShhbGxvY2F0b3IpKQorICAgICwgbV90cmFja0lEKHRyYWNrSUQp
CisgICAgLCBtX21lZGlhVHlwZShtZWRpYVR5cGUpCisgICAgLCBtX2R1cmF0aW9uKGZvcm1hdFJl
YWRlci5kdXJhdGlvbigpKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAg
aWYgKGVuYWJsZWQpCisgICAgICAgIG1faXNFbmFibGVkID0gZW5hYmxlZC52YWx1ZSgpID8gRW5h
YmxlZDo6VHJ1ZSA6IEVuYWJsZWQ6OkZhbHNlOworfQorCit2b2lkIE1lZGlhVHJhY2tSZWFkZXI6
OmFkZFNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VS
ZWYgYnl0ZVNvdXJjZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2spOworICAgIGlmICghbV9zYW1w
bGVTdG9yYWdlKQorICAgICAgICBtX3NhbXBsZVN0b3JhZ2UgPSBtYWtlVW5pcXVlPFNhbXBsZVN0
b3JhZ2U+KCk7CisKKyAgICBBU1NFUlQoIXNhbXBsZS0+aXNEaXZpc2FibGUoKSAmJiBzYW1wbGUt
PmJ5dGVSYW5nZSgpKTsKKyAgICBhdXRvIHNhbXBsZVRvQWRkID0gTWVkaWFTYW1wbGVCeXRlUmFu
Z2U6OmNyZWF0ZShzYW1wbGUuZ2V0KCksIGJ5dGVTb3VyY2UsIG1fdHJhY2tJRCk7CisKKyAgICAv
LyBGSVhNRTogRXZlbiB0aG91Z2ggV2ViTSBtdXhlciBndWlkZWxpbmVzIHNheSB0aGlzIG11c3Qg
bm90IGhhcHBlbiwgc29tZSB2aWRlbyB0cmFja3MgaGF2ZSB0d28KKyAgICAvLyBjb25zZWN1dGl2
ZSBmcmFtZXMgd2l0aCB0aGUgc2FtZSBwcmVzZW50YXRpb24gdGltZS4gU2FtcGxlTWFwIHdpbGwg
bm90IHN0b3JlIHRoZSBzZWNvbmQgZnJhbWUKKyAgICAvLyBpbiB0aGVzZSBjYXNlcywgY29ycnVw
dGluZyBhbGwgc3Vic2VxdWVudCBub24ta2V5IGZyYW1lcy4gRmluZCBhIHdheSB0byBzdG9yZSBm
cmFtZXMgd2l0aAorICAgIC8vIGR1cGxpY2F0ZSBwcmVzZW50YXRpb24gdGltZXMuCisKKyAgICBt
X3NhbXBsZVN0b3JhZ2UtPnNhbXBsZU1hcC5hZGRTYW1wbGUoc2FtcGxlVG9BZGQuZ2V0KCkpOwor
ICAgIG1fc2FtcGxlU3RvcmFnZUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKK30KKwordm9pZCBNZWRp
YVRyYWNrUmVhZGVyOjp3YWl0Rm9yU2FtcGxlKEZ1bmN0aW9uPGJvb2woU2FtcGxlTWFwJiwgYm9v
bCk+JiYgcHJlZGljYXRlKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9z
YW1wbGVTdG9yYWdlTG9jayk7CisgICAgaWYgKCFtX3NhbXBsZVN0b3JhZ2UpCisgICAgICAgIG1f
c2FtcGxlU3RvcmFnZSA9IG1ha2VVbmlxdWU8U2FtcGxlU3RvcmFnZT4oKTsKKyAgICBtX3NhbXBs
ZVN0b3JhZ2VDb25kaXRpb24ud2FpdChtX3NhbXBsZVN0b3JhZ2VMb2NrLCBbcHJlZGljYXRlID0g
V1RGTW92ZShwcmVkaWNhdGUpLCB0aGlzXSB7CisgICAgICAgIHJldHVybiBwcmVkaWNhdGUobV9z
YW1wbGVTdG9yYWdlLT5zYW1wbGVNYXAsIG1fc2FtcGxlU3RvcmFnZS0+aGFzQWxsU2FtcGxlcyk7
CisgICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFUcmFja1JlYWRlcjo6ZmluaXNoUGFyc2luZygpCit7
CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX3NhbXBsZVN0b3JhZ2VMb2NrKTsKKyAgICBpZiAoIW1fc2FtcGxlU3RvcmFnZSkKKyAgICAg
ICAgbV9zYW1wbGVTdG9yYWdlID0gbWFrZVVuaXF1ZTxTYW1wbGVTdG9yYWdlPigpOworICAgIG1f
c2FtcGxlU3RvcmFnZS0+aGFzQWxsU2FtcGxlcyA9IHRydWU7CisgICAgaWYgKG1faXNFbmFibGVk
ID09IEVuYWJsZWQ6OlVua25vd24pCisgICAgICAgIG1faXNFbmFibGVkID0gbV9zYW1wbGVTdG9y
YWdlLT5zYW1wbGVNYXAuZW1wdHkoKSA/IEVuYWJsZWQ6OkZhbHNlIDogRW5hYmxlZDo6VHJ1ZTsK
KyAgICBtX3NhbXBsZVN0b3JhZ2VDb25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK09TU3RhdHVz
IE1lZGlhVHJhY2tSZWFkZXI6OmNvcHlQcm9wZXJ0eShDRlN0cmluZ1JlZiBrZXksIENGQWxsb2Nh
dG9yUmVmIGFsbG9jYXRvciwgdm9pZCogY29waWVkVmFsdWUpCit7CisgICAgLy8gRG9uJ3QgYmxv
Y2sgd2FpdGluZyBmb3IgbWVkaWEgaWYgdGhlIHdlIGtub3cgdGhlIGVuYWJsZWQgc3RhdGUuCisg
ICAgaWYgKENGRXF1YWwoa2V5LCBQQUw6OmdldF9NZWRpYVRvb2xib3hfa01UUGx1Z2luVHJhY2tS
ZWFkZXJQcm9wZXJ0eV9FbmFibGVkKCkpICYmIG1faXNFbmFibGVkICE9IEVuYWJsZWQ6OlVua25v
d24pIHsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZCb29sZWFuUmVmKj4oY29waWVkVmFs
dWUpID0gcmV0YWluUHRyKG1faXNFbmFibGVkID09IEVuYWJsZWQ6OlRydWUgPyBrQ0ZCb29sZWFu
VHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZSkubGVha1JlZigpOworICAgICAgICByZXR1cm4gbm9FcnI7
CisgICAgfQorCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZVN0b3JhZ2VMb2Nr
KTsKKyAgICBtX3NhbXBsZVN0b3JhZ2VDb25kaXRpb24ud2FpdChtX3NhbXBsZVN0b3JhZ2VMb2Nr
LCBbJl0geworICAgICAgICByZXR1cm4gISFtX3NhbXBsZVN0b3JhZ2U7CisgICAgfSk7CisKKyAg
ICBhdXRvJiBzYW1wbGVNYXAgPSBtX3NhbXBsZVN0b3JhZ2UtPnNhbXBsZU1hcDsKKworICAgIGlm
IChDRkVxdWFsKGtleSwgUEFMOjpnZXRfTWVkaWFUb29sYm94X2tNVFBsdWdpblRyYWNrUmVhZGVy
UHJvcGVydHlfRW5hYmxlZCgpKSkgeworICAgICAgICBpZiAobV9pc0VuYWJsZWQgPT0gRW5hYmxl
ZDo6VW5rbm93bikKKyAgICAgICAgICAgIG1faXNFbmFibGVkID0gc2FtcGxlTWFwLmVtcHR5KCkg
PyBFbmFibGVkOjpGYWxzZSA6IEVuYWJsZWQ6OlRydWU7CisKKyAgICAgICAgKnJlaW50ZXJwcmV0
X2Nhc3Q8Q0ZCb29sZWFuUmVmKj4oY29waWVkVmFsdWUpID0gcmV0YWluUHRyKG1faXNFbmFibGVk
ID09IEVuYWJsZWQ6OlRydWUgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZSkubGVh
a1JlZigpOworICAgICAgICByZXR1cm4gbm9FcnI7CisgICAgfQorCisgICAgaWYgKHNhbXBsZU1h
cC5lbXB0eSgpKQorICAgICAgICByZXR1cm4ga0NNQmFzZU9iamVjdEVycm9yX1ZhbHVlTm90QXZh
aWxhYmxlOworCisgICAgYXV0byYgbGFzdFNhbXBsZSA9ICpzYW1wbGVNYXAuZGVjb2RlT3JkZXIo
KS5yYmVnaW4oKS0+c2Vjb25kOworCisgICAgaWYgKENGRXF1YWwoa2V5LCBQQUw6OmdldF9NZWRp
YVRvb2xib3hfa01UUGx1Z2luVHJhY2tSZWFkZXJQcm9wZXJ0eV9Gb3JtYXREZXNjcmlwdGlvbkFy
cmF5KCkpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04obGFzdFNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkJ5
dGVSYW5nZVNhbXBsZVR5cGUpOworICAgICAgICBjb25zdCB2b2lkKiBkZXNjcmlwdGlvbnNbMV0g
PSB7IGxhc3RTYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNl
Y29uZCB9OworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxDRkFycmF5UmVmKj4oY29waWVkVmFs
dWUpID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlKGFsbG9jYXRvciwgZGVzY3JpcHRpb25zLCAxLCAm
a0NGVHlwZUFycmF5Q2FsbEJhY2tzKSkubGVha1JlZigpOworICAgICAgICByZXR1cm4gbm9FcnI7
CisgICAgfQorCisgICAgaWYgKENGRXF1YWwoa2V5LCBQQUw6OmdldF9NZWRpYVRvb2xib3hfa01U
UGx1Z2luVHJhY2tSZWFkZXJQcm9wZXJ0eV9Ob21pbmFsRnJhbWVSYXRlKCkpKSB7CisgICAgICAg
IGZsb2F0IGZyYW1lUmF0ZSA9IDEgLyBsYXN0U2FtcGxlLmR1cmF0aW9uKCkudG9GbG9hdCgpOwor
ICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxDRk51bWJlclJlZio+KGNvcGllZFZhbHVlKSA9IGFk
b3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoYWxsb2NhdG9yLCBrQ0ZOdW1iZXJGbG9hdDMyVHlwZSwgJmZy
YW1lUmF0ZSkpLmxlYWtSZWYoKTsKKyAgICAgICAgcmV0dXJuIG5vRXJyOworICAgIH0KKworICAg
IHJldHVybiBrQ01CYXNlT2JqZWN0RXJyb3JfVmFsdWVOb3RBdmFpbGFibGU7Cit9CisKK3ZvaWQg
TWVkaWFUcmFja1JlYWRlcjo6ZmluYWxpemUoKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9zYW1wbGVTdG9yYWdlTG9jayk7CisgICAgc3RvcmFnZVF1ZXVlKCkuZGlzcGF0Y2goW3Nh
bXBsZVN0b3JhZ2UgPSBzdGQ6OmV4Y2hhbmdlKG1fc2FtcGxlU3RvcmFnZSwgbnVsbHB0cildKCkg
bXV0YWJsZSB7CisgICAgICAgIHNhbXBsZVN0b3JhZ2UgPSBudWxscHRyOworICAgIH0pOworICAg
IENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFUcmFja1JlYWRlcj46OmZpbmFsaXplKCk7Cit9CisKK09T
U3RhdHVzIE1lZGlhVHJhY2tSZWFkZXI6OmdldFRyYWNrSW5mbyhNVFBlcnNpc3RlbnRUcmFja0lE
KiB0cmFja0lELCBDTU1lZGlhVHlwZSogbWVkaWFUeXBlKQoreworICAgICp0cmFja0lEID0gbV90
cmFja0lEOworICAgICptZWRpYVR5cGUgPSBtX21lZGlhVHlwZTsKKyAgICByZXR1cm4gbm9FcnI7
Cit9CisKK09TU3RhdHVzIE1lZGlhVHJhY2tSZWFkZXI6OmNyZWF0ZUN1cnNvckF0UHJlc2VudGF0
aW9uVGltZVN0YW1wKENNVGltZSB0aW1lLCBNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogc2FtcGxl
Q3Vyc29yKQoreworICAgICpzYW1wbGVDdXJzb3IgPSBNZWRpYVNhbXBsZUN1cnNvcjo6Y3JlYXRl
QXRQcmVzZW50YXRpb25UaW1lKGFsbG9jYXRvcigpLCAqdGhpcywgUEFMOjp0b01lZGlhVGltZSh0
aW1lKSkubGVha1JlZigpLT53cmFwcGVyKCk7CisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0
YXR1cyBNZWRpYVRyYWNrUmVhZGVyOjpjcmVhdGVDdXJzb3JBdEZpcnN0U2FtcGxlSW5EZWNvZGVP
cmRlcihNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogc2FtcGxlQ3Vyc29yKQoreworICAgICpzYW1w
bGVDdXJzb3IgPSBNZWRpYVNhbXBsZUN1cnNvcjo6Y3JlYXRlQXREZWNvZGVkU2FtcGxlKGFsbG9j
YXRvcigpLCAqdGhpcywgTWVkaWFTYW1wbGVDdXJzb3I6OkRlY29kZWRTYW1wbGU6OkZpcnN0KS5s
ZWFrUmVmKCktPndyYXBwZXIoKTsKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK09TU3RhdHVzIE1l
ZGlhVHJhY2tSZWFkZXI6OmNyZWF0ZUN1cnNvckF0TGFzdFNhbXBsZUluRGVjb2RlT3JkZXIoTVRQ
bHVnaW5TYW1wbGVDdXJzb3JSZWYqIHNhbXBsZUN1cnNvcikKK3sKKyAgICAqc2FtcGxlQ3Vyc29y
ID0gTWVkaWFTYW1wbGVDdXJzb3I6OmNyZWF0ZUF0RGVjb2RlZFNhbXBsZShhbGxvY2F0b3IoKSwg
KnRoaXMsIE1lZGlhU2FtcGxlQ3Vyc29yOjpEZWNvZGVkU2FtcGxlOjpMYXN0KS5sZWFrUmVmKCkt
PndyYXBwZXIoKTsKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVy
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFj
a1JlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxNjViNDhmZGY3M2E0MDQ3NDkwYmZhZWNmNmFlNWI4MjYz
YjA1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQorCisj
aW5jbHVkZSAiQ29yZU1lZGlhV3JhcHBlZC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2FtcGxlTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorCitERUNMQVJFX0NPUkVfTUVESUFfVFJB
SVRTKFRyYWNrUmVhZGVyKTsKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBXb3JrUXVldWU7Cit9
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEF1ZGlvVHJhY2tQcml2YXRlOworY2xhc3Mg
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTsKK2NsYXNzIE1lZGlhU2FtcGxlOworY2xhc3MgVHJhY2tQ
cml2YXRlQmFzZTsKK2NsYXNzIFZpZGVvVHJhY2tQcml2YXRlOworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgTWVkaWFGb3JtYXRSZWFkZXI7CisKK2NsYXNzIE1lZGlhVHJhY2tSZWFk
ZXIgZmluYWwgOiBwdWJsaWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYVRyYWNrUmVhZGVyPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBXcmFwcGVyQ2xhc3Mgd3JhcHBlckNsYXNzKCk7
CisgICAgc3RhdGljIENNQmFzZUNsYXNzSUQgd3JhcHBlckNsYXNzSUQoKTsKKyAgICBzdGF0aWMg
Q29yZU1lZGlhV3JhcHBlZDxNZWRpYVRyYWNrUmVhZGVyPiogdW53cmFwKENNQmFzZU9iamVjdFJl
Zik7CisgICAgc3RhdGljIFdURjo6V29ya1F1ZXVlJiBzdG9yYWdlUXVldWUoKTsKKworICAgIHN0
YXRpYyBSZWZQdHI8TWVkaWFUcmFja1JlYWRlcj4gY3JlYXRlKEFsbG9jYXRvciYmLCBjb25zdCBN
ZWRpYUZvcm1hdFJlYWRlciYsIENNTWVkaWFUeXBlLCB1aW50NjRfdCwgT3B0aW9uYWw8Ym9vbD4p
OworCisgICAgdWludDY0X3QgdHJhY2tJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tJRDsgfQor
ICAgIHZvaWQgYWRkU2FtcGxlKFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4mJiwgTVRQbHVnaW5C
eXRlU291cmNlUmVmKTsKKyAgICB2b2lkIHdhaXRGb3JTYW1wbGUoRnVuY3Rpb248Ym9vbChXZWJD
b3JlOjpTYW1wbGVNYXAmLCBib29sKT4mJikgY29uc3Q7CisKKyAgICB2b2lkIHNldEVuYWJsZWQo
Ym9vbCBlbmFibGVkKSB7IG1faXNFbmFibGVkID0gZW5hYmxlZCA/IEVuYWJsZWQ6OlRydWUgOiBF
bmFibGVkOjpGYWxzZTsgfQorICAgIENNTWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVkaWFUeXBlOyB9CisKKyAgICB2b2lkIGZpbmlzaFBhcnNpbmcoKTsKKworcHJpdmF0
ZToKKyAgICB1c2luZyBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhVHJhY2tSZWFkZXI+Ojp1bndyYXA7
CisKKyAgICBNZWRpYVRyYWNrUmVhZGVyKEFsbG9jYXRvciYmLCBjb25zdCBNZWRpYUZvcm1hdFJl
YWRlciYsIENNTWVkaWFUeXBlLCB1aW50NjRfdCwgT3B0aW9uYWw8Ym9vbD4pOworCisgICAgLy8g
Q01CYXNlQ2xhc3MKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJXZWJLaXQ6Ok1lZGlhVHJhY2tSZWFkZXIiX3M7IH0KKyAgICBPU1N0YXR1cyBjb3B5
UHJvcGVydHkoQ0ZTdHJpbmdSZWYsIENGQWxsb2NhdG9yUmVmLCB2b2lkKiBjb3BpZWRWYWx1ZSkg
ZmluYWw7CisgICAgdm9pZCBmaW5hbGl6ZSgpIGZpbmFsOworCisgICAgLy8gV3JhcHBlckNsYXNz
CisgICAgT1NTdGF0dXMgZ2V0VHJhY2tJbmZvKE1UUGVyc2lzdGVudFRyYWNrSUQqLCBDTU1lZGlh
VHlwZSopOworICAgIE9TU3RhdHVzIGNyZWF0ZUN1cnNvckF0UHJlc2VudGF0aW9uVGltZVN0YW1w
KENNVGltZSwgTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqKTsKKyAgICBPU1N0YXR1cyBjcmVhdGVD
dXJzb3JBdEZpcnN0U2FtcGxlSW5EZWNvZGVPcmRlcihNVFBsdWdpblNhbXBsZUN1cnNvclJlZiop
OworICAgIE9TU3RhdHVzIGNyZWF0ZUN1cnNvckF0TGFzdFNhbXBsZUluRGVjb2RlT3JkZXIoTVRQ
bHVnaW5TYW1wbGVDdXJzb3JSZWYqKTsKKworICAgIHN0cnVjdCBTYW1wbGVTdG9yYWdlIHsKKyAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICB+U2FtcGxlU3Rv
cmFnZSgpIHsgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7IH0KKyAgICAgICAgV2ViQ29yZTo6U2Ft
cGxlTWFwIHNhbXBsZU1hcDsKKyAgICAgICAgYm9vbCBoYXNBbGxTYW1wbGVzIHsgZmFsc2UgfTsK
KyAgICB9OworCisgICAgZW51bSBFbmFibGVkIDogdWludDhfdCB7IFVua25vd24sIEZhbHNlLCBU
cnVlIH07CisKKyAgICBjb25zdCB1aW50NjRfdCBtX3RyYWNrSUQ7CisgICAgY29uc3QgQ01NZWRp
YVR5cGUgbV9tZWRpYVR5cGU7CisgICAgY29uc3QgTWVkaWFUaW1lIG1fZHVyYXRpb247CisgICAg
c3RkOjphdG9taWM8RW5hYmxlZD4gbV9pc0VuYWJsZWQgeyBFbmFibGVkOjpVbmtub3duIH07Cisg
ICAgbXV0YWJsZSBDb25kaXRpb24gbV9zYW1wbGVTdG9yYWdlQ29uZGl0aW9uOworICAgIG11dGFi
bGUgTG9jayBtX3NhbXBsZVN0b3JhZ2VMb2NrOworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRy
PFNhbXBsZVN0b3JhZ2U+IG1fc2FtcGxlU3RvcmFnZTsKK307CisKK2NvbnN0ZXhwciBNZWRpYVRy
YWNrUmVhZGVyOjpXcmFwcGVyQ2xhc3MgTWVkaWFUcmFja1JlYWRlcjo6d3JhcHBlckNsYXNzKCkK
K3sKKyAgICByZXR1cm4geworICAgICAgICAudmVyc2lvbiA9IGtNVFBsdWdpblRyYWNrUmVhZGVy
X0NsYXNzVmVyc2lvbl8xLAorICAgICAgICAuZ2V0VHJhY2tJbmZvID0gW10oTVRQbHVnaW5UcmFj
a1JlYWRlclJlZiB0cmFja1JlYWRlciwgTVRQZXJzaXN0ZW50VHJhY2tJRCogdHJhY2tJRCwgQ01N
ZWRpYVR5cGUqIG1lZGlhVHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIHVud3JhcCh0cmFja1Jl
YWRlciktPmdldFRyYWNrSW5mbyh0cmFja0lELCBtZWRpYVR5cGUpOworICAgICAgICB9LAorICAg
ICAgICAuY3JlYXRlQ3Vyc29yQXRQcmVzZW50YXRpb25UaW1lU3RhbXAgPSBbXShNVFBsdWdpblRy
YWNrUmVhZGVyUmVmIHRyYWNrUmVhZGVyLCBDTVRpbWUgdGltZXN0YW1wLCBNVFBsdWdpblNhbXBs
ZUN1cnNvclJlZiogY3Vyc29yKSB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFwKHRyYWNrUmVh
ZGVyKS0+Y3JlYXRlQ3Vyc29yQXRQcmVzZW50YXRpb25UaW1lU3RhbXAodGltZXN0YW1wLCBjdXJz
b3IpOworICAgICAgICB9LAorICAgICAgICAuY3JlYXRlQ3Vyc29yQXRGaXJzdFNhbXBsZUluRGVj
b2RlT3JkZXIgPSBbXShNVFBsdWdpblRyYWNrUmVhZGVyUmVmIHRyYWNrUmVhZGVyLCBNVFBsdWdp
blNhbXBsZUN1cnNvclJlZiogY3Vyc29yKSB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFwKHRy
YWNrUmVhZGVyKS0+Y3JlYXRlQ3Vyc29yQXRGaXJzdFNhbXBsZUluRGVjb2RlT3JkZXIoY3Vyc29y
KTsKKyAgICAgICAgfSwKKyAgICAgICAgLmNyZWF0ZUN1cnNvckF0TGFzdFNhbXBsZUluRGVjb2Rl
T3JkZXIgPSBbXShNVFBsdWdpblRyYWNrUmVhZGVyUmVmIHRyYWNrUmVhZGVyLCBNVFBsdWdpblNh
bXBsZUN1cnNvclJlZiogY3Vyc29yKSB7CisgICAgICAgICAgICByZXR1cm4gdW53cmFwKHRyYWNr
UmVhZGVyKS0+Y3JlYXRlQ3Vyc29yQXRMYXN0U2FtcGxlSW5EZWNvZGVPcmRlcihjdXJzb3IpOwor
ICAgICAgICB9LAorICAgIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9TYW1wbGVDdXJzb3IuY3BwIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1NhbXBsZUN1cnNvci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZTQxYjc5ODhmM2RmZDgyMGVmNWQ3YmUyYzMzOGMx
NjdjODU4ZTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1NhbXBsZUN1cnNvci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTYW1wbGVDdXJzb3IuaCIKLQotI2lmIEVOQUJMRShXRUJN
X0ZPUk1BVF9SRUFERVIpCi0KLSNpbmNsdWRlICJUcmFja1JlYWRlci5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvTWVkaWFTYW1wbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NhbXBsZU1hcC5oPgotI2lu
Y2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+Ci0jaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgot
I2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+Ci0KLSNpbmNsdWRlIDxwYWwvY29jb2EvTWVkaWFUb29s
Ym94U29mdExpbmsuaD4KLQotV1RGX0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChNVFBsdWdpblNhbXBs
ZUN1cnNvcik7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgUEFMOwot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBPcHRpb25hbDxTYW1wbGVDdXJzb3I6
OkRlY29kZU9yZGVySXRlcmF0b3I+IG1ha2VJdGVyYXRvcihjb25zdCBTYW1wbGVDdXJzb3I6OkRl
Y29kZWRTYW1wbGUmIGRlY29kZWRTYW1wbGUsIFNhbXBsZU1hcCYgc2FtcGxlcywgYm9vbCBoYXNB
bGxTYW1wbGVzKQotewotICAgIGF1dG8mIGRlY29kZU9yZGVyID0gc2FtcGxlcy5kZWNvZGVPcmRl
cigpOwotICAgIHN3aXRjaCAoZGVjb2RlZFNhbXBsZSkgewotICAgIGNhc2UgU2FtcGxlQ3Vyc29y
OjpEZWNvZGVkU2FtcGxlOjpGaXJzdDoKLSAgICAgICAgaWYgKHNhbXBsZXMuc2l6ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGRlY29kZU9yZGVyLmJlZ2luKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU2FtcGxlQ3Vyc29yOjpEZWNvZGVkU2FtcGxlOjpMYXN0OgotICAgICAgICBpZiAoc2Ft
cGxlcy5zaXplKCkgJiYgaGFzQWxsU2FtcGxlcykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OnBy
ZXYoZGVjb2RlT3JkZXIuZW5kKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KLQotc3RhdGljIE9wdGlvbmFsPFNhbXBsZUN1cnNvcjo6RGVjb2Rl
T3JkZXJJdGVyYXRvcj4gbWFrZUl0ZXJhdG9yKGNvbnN0IFNhbXBsZUN1cnNvcjo6UHJlc2VudGF0
aW9uT3JkZXJJdGVyYXRvciYgaXRlcmF0b3IsIFNhbXBsZU1hcCYgc2FtcGxlcywgYm9vbCkKLXsK
LSAgICBNZWRpYVNhbXBsZSYgc2FtcGxlID0gKml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7Ci0gICAg
cmV0dXJuIHNhbXBsZXMuZGVjb2RlT3JkZXIoKS5maW5kU2FtcGxlV2l0aERlY29kZUtleShzdGQ6
Om1ha2VfcGFpcihzYW1wbGUuZGVjb2RlVGltZSgpLCBzYW1wbGUucHJlc2VudGF0aW9uVGltZSgp
KSk7Ci19Ci0KLXN0YXRpYyBPcHRpb25hbDxTYW1wbGVDdXJzb3I6OlByZXNlbnRhdGlvbk9yZGVy
SXRlcmF0b3I+IG1ha2VJdGVyYXRvcihjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUs
IFNhbXBsZU1hcCYgc2FtcGxlcywgYm9vbCBoYXNBbGxTYW1wbGVzKQotewotICAgIGF1dG8mIHBy
ZXNlbnRhdGlvbk9yZGVyID0gc2FtcGxlcy5wcmVzZW50YXRpb25PcmRlcigpOwotICAgIGF1dG8g
aXRlcmF0b3IgPSBwcmVzZW50YXRpb25PcmRlci5maW5kU2FtcGxlQ29udGFpbmluZ09yQWZ0ZXJQ
cmVzZW50YXRpb25UaW1lKHByZXNlbnRhdGlvblRpbWUpOwotICAgIGlmIChpdGVyYXRvciAhPSBw
cmVzZW50YXRpb25PcmRlci5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yOwotICAgIGlm
IChzYW1wbGVzLnNpemUoKSAmJiBoYXNBbGxTYW1wbGVzKQotICAgICAgICByZXR1cm4gc3RkOjpw
cmV2KGl0ZXJhdG9yKTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1zdGF0aWMgT3B0
aW9uYWw8U2FtcGxlQ3Vyc29yOjpQcmVzZW50YXRpb25PcmRlckl0ZXJhdG9yPiBtYWtlSXRlcmF0
b3IoY29uc3QgU2FtcGxlQ3Vyc29yOjpEZWNvZGVPcmRlckl0ZXJhdG9yJiBpdGVyYXRvciwgU2Ft
cGxlTWFwJiBzYW1wbGVzLCBib29sKQotewotICAgIE1lZGlhU2FtcGxlJiBzYW1wbGUgPSAqaXRl
cmF0b3ItPnNlY29uZC5nZXQoKTsKLSAgICByZXR1cm4gc2FtcGxlcy5wcmVzZW50YXRpb25PcmRl
cigpLmZpbmRTYW1wbGVXaXRoUHJlc2VudGF0aW9uVGltZShzYW1wbGUucHJlc2VudGF0aW9uVGlt
ZSgpKTsKLX0KLQotc3RhdGljIE1lZGlhVGltZSBtYWtlVGltZShjb25zdCBEZWNvZGVPcmRlclNh
bXBsZU1hcDo6aXRlcmF0b3ImIGl0KQotewotICAgIHJldHVybiBpdC0+c2Vjb25kLT5kZWNvZGVU
aW1lKCk7Ci19Ci0KLXN0YXRpYyBNZWRpYVRpbWUgbWFrZVRpbWUoY29uc3QgUHJlc2VudGF0aW9u
T3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yJiBpdCkKLXsKLSAgICByZXR1cm4gaXQtPnNlY29uZC0+
cHJlc2VudGF0aW9uVGltZSgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcmRlcmVkTWFwPiBz
dGF0aWMgT3JkZXJlZE1hcCYgb3JkZXJlZFNhbXBsZXMoU2FtcGxlTWFwJik7Ci0KLXRlbXBsYXRl
PD4KLURlY29kZU9yZGVyU2FtcGxlTWFwJiBvcmRlcmVkU2FtcGxlcyhTYW1wbGVNYXAmIHNhbXBs
ZXMpCi17Ci0gICAgcmV0dXJuIHNhbXBsZXMuZGVjb2RlT3JkZXIoKTsKLX0KLQotdGVtcGxhdGU8
PgotUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXAmIG9yZGVyZWRTYW1wbGVzKFNhbXBsZU1hcCYg
c2FtcGxlcykKLXsKLSAgICByZXR1cm4gc2FtcGxlcy5wcmVzZW50YXRpb25PcmRlcigpOwotfQot
Ci1zdGF0aWMgRGVjb2RlT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yIHVwcGVyQm91bmQoRGVjb2Rl
T3JkZXJTYW1wbGVNYXAmIG1hcCwgY29uc3QgTWVkaWFUaW1lJiB0aW1lKQotewotICAgIHJldHVy
biBtYXAuZmluZFNhbXBsZUFmdGVyRGVjb2RlS2V5KHN0ZDo6bWFrZV9wYWlyKHRpbWUsIE1lZGlh
VGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUoKSkpOwotfQotCi1zdGF0aWMgUHJlc2VudGF0aW9u
T3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yIHVwcGVyQm91bmQoUHJlc2VudGF0aW9uT3JkZXJTYW1w
bGVNYXAmIG1hcCwgY29uc3QgTWVkaWFUaW1lJiB0aW1lKQotewotICAgIHJldHVybiBtYXAuZmlu
ZFNhbXBsZVN0YXJ0aW5nQWZ0ZXJQcmVzZW50YXRpb25UaW1lKHRpbWUpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPcmRlcmVkTWFwLCB0eXBlbmFtZSBTdGVwPiBzdGF0aWMgU3RlcCBzdGVwSXRl
cmF0b3IoU3RlcCwgdHlwZW5hbWUgT3JkZXJlZE1hcDo6aXRlcmF0b3ImLCBPcmRlcmVkTWFwJik7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9yZGVyZWRNYXA+Ci1pbnQ2NF90IHN0ZXBJdGVyYXRvcihp
bnQ2NF90IHN0ZXBzUmVtYWluaW5nLCB0eXBlbmFtZSBPcmRlcmVkTWFwOjppdGVyYXRvciYgaXRl
cmF0b3IsIE9yZGVyZWRNYXAmIHNhbXBsZXMpCi17Ci0gICAgQVNTRVJUKGl0ZXJhdG9yICE9IHNh
bXBsZXMuZW5kKCkpOwotICAgIGlmIChzdGVwc1JlbWFpbmluZyA8IDApCi0gICAgICAgIGZvciAo
OyBzdGVwc1JlbWFpbmluZyAmJiBpdGVyYXRvciAhPSBzYW1wbGVzLmJlZ2luKCk7ICsrc3RlcHNS
ZW1haW5pbmcsIC0taXRlcmF0b3IpIHsgfQotICAgIGVsc2UKLSAgICAgICAgZm9yIChhdXRvIG5l
eHQgPSBzdGQ6Om5leHQoaXRlcmF0b3IpOyBzdGVwc1JlbWFpbmluZyAmJiBuZXh0ICE9IHNhbXBs
ZXMuZW5kKCk7IC0tc3RlcHNSZW1haW5pbmcsIGl0ZXJhdG9yID0gbmV4dCsrKSB7IH0KLSAgICBy
ZXR1cm4gc3RlcHNSZW1haW5pbmc7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9yZGVyZWRNYXA+
Ci1NZWRpYVRpbWUgc3RlcEl0ZXJhdG9yKE1lZGlhVGltZSBkZWx0YVJlbWFpbmluZywgdHlwZW5h
bWUgT3JkZXJlZE1hcDo6aXRlcmF0b3ImIGl0ZXJhdG9yLCBPcmRlcmVkTWFwJiBzYW1wbGVzKQot
ewotICAgIEFTU0VSVChpdGVyYXRvciAhPSBzYW1wbGVzLmVuZCgpKTsKLSAgICBhdXRvIHJlcXVl
c3RlZFRpbWUgPSBtYWtlVGltZShpdGVyYXRvcikgKyBkZWx0YVJlbWFpbmluZzsKLSAgICBpdGVy
YXRvciA9IHVwcGVyQm91bmQoc2FtcGxlcywgcmVxdWVzdGVkVGltZSk7Ci0gICAgaWYgKGl0ZXJh
dG9yICE9IHNhbXBsZXMuYmVnaW4oKSkKLSAgICAgICAgLS1pdGVyYXRvcjsKLSAgICBkZWx0YVJl
bWFpbmluZyA9IHJlcXVlc3RlZFRpbWUgLSBtYWtlVGltZShpdGVyYXRvcik7Ci0gICAgaWYgKGRl
bHRhUmVtYWluaW5nID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYmIGRlbHRhUmVtYWluaW5nIDwg
aXRlcmF0b3ItPnNlY29uZC0+ZHVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6
emVyb1RpbWUoKTsKLSAgICByZXR1cm4gZGVsdGFSZW1haW5pbmc7Ci19Ci0KLUNNQmFzZUNsYXNz
SUQgU2FtcGxlQ3Vyc29yOjp3cmFwcGVyQ2xhc3NJRCgpCi17Ci0gICAgcmV0dXJuIE1UUGx1Z2lu
U2FtcGxlQ3Vyc29yR2V0Q2xhc3NJRCgpOwotfQotCi1Db3JlTWVkaWFXcmFwcGVkPFNhbXBsZUN1
cnNvcj4qIFNhbXBsZUN1cnNvcjo6dW53cmFwKENNQmFzZU9iamVjdFJlZiBvYmplY3QpCi17Ci0g
ICAgcmV0dXJuIHVud3JhcChjaGVja2VkX2NmX2Nhc3Q8V3JhcHBlclJlZj4ob2JqZWN0KSk7Ci19
Ci0KLVJlZlB0cjxTYW1wbGVDdXJzb3I+IFNhbXBsZUN1cnNvcjo6Y3JlYXRlQXRQcmVzZW50YXRp
b25UaW1lKEFsbG9jYXRvciYmIGFsbG9jYXRvciwgVHJhY2tSZWFkZXImIHRyYWNrUmVhZGVyLCBN
ZWRpYVRpbWUgdGltZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IChhbGxvY2F0b3IpIFNh
bXBsZUN1cnNvcihXVEZNb3ZlKGFsbG9jYXRvciksIHRyYWNrUmVhZGVyLCBXVEZNb3ZlKHRpbWUp
KSk7Ci19Ci0KLVJlZlB0cjxTYW1wbGVDdXJzb3I+IFNhbXBsZUN1cnNvcjo6Y3JlYXRlQXREZWNv
ZGVkU2FtcGxlKEFsbG9jYXRvciYmIGFsbG9jYXRvciwgVHJhY2tSZWFkZXImIHRyYWNrUmVhZGVy
LCBEZWNvZGVkU2FtcGxlIGRlY29kZWRTYW1wbGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyAoYWxsb2NhdG9yKSBTYW1wbGVDdXJzb3IoV1RGTW92ZShhbGxvY2F0b3IpLCB0cmFja1JlYWRl
ciwgV1RGTW92ZShkZWNvZGVkU2FtcGxlKSkpOwotfQotCi1SZWZQdHI8U2FtcGxlQ3Vyc29yPiBT
YW1wbGVDdXJzb3I6OmNvcHkoQWxsb2NhdG9yJiYgYWxsb2NhdG9yLCBjb25zdCBTYW1wbGVDdXJz
b3ImIGN1cnNvcikKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGN1cnNvci5tX2xvY2F0
b3JMb2NrKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IChhbGxvY2F0b3IpIFNhbXBsZUN1cnNv
cihXVEZNb3ZlKGFsbG9jYXRvciksIGN1cnNvcikpOwotfQotCi1TYW1wbGVDdXJzb3I6OlNhbXBs
ZUN1cnNvcihBbGxvY2F0b3ImJiBhbGxvY2F0b3IsIFRyYWNrUmVhZGVyJiB0cmFja1JlYWRlciwg
TG9jYXRvciBsb2NhdG9yKQotICAgIDogQ29yZU1lZGlhV3JhcHBlZChXVEZNb3ZlKGFsbG9jYXRv
cikpCi0gICAgLCBtX3RyYWNrUmVhZGVyKHRyYWNrUmVhZGVyKQotICAgICwgbV9sb2NhdG9yKFdU
Rk1vdmUobG9jYXRvcikpCi17Ci19Ci0KLVNhbXBsZUN1cnNvcjo6U2FtcGxlQ3Vyc29yKEFsbG9j
YXRvciYmIGFsbG9jYXRvciwgY29uc3QgU2FtcGxlQ3Vyc29yJiBjdXJzb3IpCi0gICAgOiBDb3Jl
TWVkaWFXcmFwcGVkKFdURk1vdmUoYWxsb2NhdG9yKSkKLSAgICAsIG1fdHJhY2tSZWFkZXIoY3Vy
c29yLm1fdHJhY2tSZWFkZXIuY29weVJlZigpKQotICAgICwgbV9sb2NhdG9yKGN1cnNvci5tX2xv
Y2F0b3IpCi17Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgotT3B0aW9uYWw8SXRl
cmF0b3I+IFNhbXBsZUN1cnNvcjo6bG9jYXRlSXRlcmF0b3IoU2FtcGxlTWFwJiBzYW1wbGVzLCBi
b29sIGhhc0FsbFNhbXBsZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fbG9jYXRvckxvY2suaXNM
b2NrZWQoKSk7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9sb2NhdG9yLAotICAgICAgICBb
Jl0oY29uc3QgYXV0byYgbG9jYXRvcikgLT4gT3B0aW9uYWw8SXRlcmF0b3I+IHsKLSAgICAgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtYWtlSXRlcmF0b3IobG9jYXRvciwgc2FtcGxlcywgaGFzQWxs
U2FtcGxlcyk7Ci0gICAgICAgICAgICBpZiAoIWl0ZXJhdG9yKQotICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICBtX2xvY2F0b3IgPSBXVEZNb3ZlKCppdGVy
YXRvcik7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRlSXRlcmF0b3I8SXRlcmF0b3I+KHNhbXBs
ZXMsIGhhc0FsbFNhbXBsZXMpOwotICAgICAgICB9LAotICAgICAgICBbJl0oY29uc3QgSXRlcmF0
b3ImIGl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3I7Ci0gICAgICAgIH0K
LSAgICApOwotfQotCi1NZWRpYVNhbXBsZSogU2FtcGxlQ3Vyc29yOjpsb2NhdGVNZWRpYVNhbXBs
ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fbG9jYXRvckxvY2suaXNMb2NrZWQoKSk7Ci0gICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9sb2NhdG9yLAotICAgICAgICBbJl0oY29uc3QgYXV0byYg
bG9jYXRvcikgewotICAgICAgICAgICAgbV90cmFja1JlYWRlci0+d2FpdEZvclNhbXBsZShbJl0o
U2FtcGxlTWFwJiBzYW1wbGVzLCBib29sIGhhc0FsbFNhbXBsZXMpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIGl0ZXJhdG9yID0gbWFrZUl0ZXJhdG9yKGxvY2F0b3IsIHNhbXBsZXMsIGhhc0FsbFNh
bXBsZXMpOwotICAgICAgICAgICAgICAgIGlmICghaXRlcmF0b3IpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBoYXNBbGxTYW1wbGVzOwotICAgICAgICAgICAgICAgIG1fbG9jYXRvciA9IFdU
Rk1vdmUoKml0ZXJhdG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIGxvY2F0ZU1lZGlhU2FtcGxlKCk7Ci0gICAgICAg
IH0sCi0gICAgICAgIFsmXShjb25zdCBTYW1wbGVDdXJzb3I6OkRlY29kZU9yZGVySXRlcmF0b3Im
IGl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsK
LSAgICAgICAgfSwKLSAgICAgICAgWyZdKGNvbnN0IFNhbXBsZUN1cnNvcjo6UHJlc2VudGF0aW9u
T3JkZXJJdGVyYXRvciYgaXRlcmF0b3IpIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+
c2Vjb25kLmdldCgpOwotICAgICAgICB9Ci0gICAgKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
T3JkZXJlZE1hcCwgdHlwZW5hbWUgU3RlcD4KLVN0ZXAgU2FtcGxlQ3Vyc29yOjpzdGVwSW5PcmRl
cmVkTWFwKFN0ZXAgc3RlcHNSZW1haW5pbmcpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2F0b3JMb2NrKTsKLSAgICBtX3RyYWNrUmVhZGVyLT53YWl0Rm9yU2FtcGxlKFsmXShT
YW1wbGVNYXAmIHNhbXBsZXMsIGJvb2wgaGFzQWxsU2FtcGxlcykgewotICAgICAgICBpZiAoYXV0
byBpdGVyYXRvciA9IGxvY2F0ZUl0ZXJhdG9yPHR5cGVuYW1lIE9yZGVyZWRNYXA6Oml0ZXJhdG9y
PihzYW1wbGVzLCBoYXNBbGxTYW1wbGVzKSkgewotICAgICAgICAgICAgc3RlcHNSZW1haW5pbmcg
PSBzdGVwSXRlcmF0b3Ioc3RlcHNSZW1haW5pbmcsICppdGVyYXRvciwgb3JkZXJlZFNhbXBsZXM8
T3JkZXJlZE1hcD4oc2FtcGxlcykpOwotICAgICAgICAgICAgbV9sb2NhdG9yID0gV1RGTW92ZSgq
aXRlcmF0b3IpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBoYXNBbGxTYW1wbGVzIHx8ICFz
dGVwc1JlbWFpbmluZzsKLSAgICB9KTsKLSAgICByZXR1cm4gc3RlcHNSZW1haW5pbmc7Ci19Ci0K
LU9TU3RhdHVzIFNhbXBsZUN1cnNvcjo6Z2V0TWVkaWFTYW1wbGUoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChNZWRpYVNhbXBsZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAotewotICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NhdG9yTG9jayk7Ci0gICAgYXV0byBzYW1wbGUgPSBs
b2NhdGVNZWRpYVNhbXBsZSgpOwotICAgIGlmICghc2FtcGxlKQotICAgICAgICByZXR1cm4ga01U
UGx1Z2luU2FtcGxlQ3Vyc29yRXJyb3JfTm9TYW1wbGVzOwotICAgIGNvbXBsZXRpb25IYW5kbGVy
KCpzYW1wbGUpOwotICAgIHJldHVybiBub0VycjsKLX0KLQotT1NTdGF0dXMgU2FtcGxlQ3Vyc29y
Ojpjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYsIENGQWxsb2NhdG9yUmVmLCB2b2lkKikKLXsKLSAg
ICByZXR1cm4ga0NNQmFzZU9iamVjdEVycm9yX1ZhbHVlTm90QXZhaWxhYmxlOwotfQotCi1PU1N0
YXR1cyBTYW1wbGVDdXJzb3I6OmNvcHkoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqIHNhbXBsZUN1
cnNvcikgY29uc3QKLXsKLSAgICAqc2FtcGxlQ3Vyc29yID0gU2FtcGxlQ3Vyc29yOjpjb3B5KGFs
bG9jYXRvcigpLCAqdGhpcykubGVha1JlZigpLT53cmFwcGVyKCk7Ci0gICAgcmV0dXJuIG5vRXJy
OwotfQotCi1PU1N0YXR1cyBTYW1wbGVDdXJzb3I6OnN0ZXBJbkRlY29kZU9yZGVyQW5kUmVwb3J0
U3RlcHNUYWtlbihpbnQ2NF90IHN0ZXBzVG9UYWtlLCBpbnQ2NF90KiBzdGVwc1Rha2VuKQotewot
ICAgIGF1dG8gc3RlcHNSZW1haW5pbmcgPSBzdGVwSW5PcmRlcmVkTWFwPERlY29kZU9yZGVyU2Ft
cGxlTWFwPihzdGVwc1RvVGFrZSk7Ci0gICAgKnN0ZXBzVGFrZW4gPSBzdGVwc1RvVGFrZSAtIHN0
ZXBzUmVtYWluaW5nOwotICAgIHJldHVybiBub0VycjsKLX0KLQotT1NTdGF0dXMgU2FtcGxlQ3Vy
c29yOjpzdGVwSW5QcmVzZW50YXRpb25PcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4oaW50NjRfdCBz
dGVwc1RvVGFrZSwgaW50NjRfdCogc3RlcHNUYWtlbikKLXsKLSAgICBhdXRvIHN0ZXBzUmVtYWlu
aW5nID0gc3RlcEluT3JkZXJlZE1hcDxQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcD4oc3RlcHNU
b1Rha2UpOwotICAgICpzdGVwc1Rha2VuID0gc3RlcHNUb1Rha2UgLSBzdGVwc1JlbWFpbmluZzsK
LSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLU9TU3RhdHVzIFNhbXBsZUN1cnNvcjo6c3RlcEJ5RGVj
b2RlVGltZShDTVRpbWUgdGltZSwgQm9vbGVhbiogd2FzUGlubmVkKQotewotICAgIGF1dG8gdGlt
ZVJlbWFpbmluZyA9IHN0ZXBJbk9yZGVyZWRNYXA8RGVjb2RlT3JkZXJTYW1wbGVNYXA+KFBBTDo6
dG9NZWRpYVRpbWUodGltZSkpOwotICAgICp3YXNQaW5uZWQgPSAhIXRpbWVSZW1haW5pbmc7Ci0g
ICAgcmV0dXJuIG5vRXJyOwotfQotCi1PU1N0YXR1cyBTYW1wbGVDdXJzb3I6OnN0ZXBCeVByZXNl
bnRhdGlvblRpbWUoQ01UaW1lIHRpbWUsIEJvb2xlYW4qIHdhc1Bpbm5lZCkKLXsKLSAgICBhdXRv
IHRpbWVSZW1haW5pbmcgPSBzdGVwSW5PcmRlcmVkTWFwPFByZXNlbnRhdGlvbk9yZGVyU2FtcGxl
TWFwPihQQUw6OnRvTWVkaWFUaW1lKHRpbWUpKTsKLSAgICAqd2FzUGlubmVkID0gISF0aW1lUmVt
YWluaW5nOwotICAgIHJldHVybiBub0VycjsKLX0KLQotQ0ZDb21wYXJpc29uUmVzdWx0IFNhbXBs
ZUN1cnNvcjo6Y29tcGFyZUluRGVjb2RlT3JkZXIoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYgb3Ro
ZXJDdXJzb3JSZWYpIGNvbnN0Ci17Ci0gICAgaWYgKHdyYXBwZXIoKSA9PSBvdGhlckN1cnNvclJl
ZikKLSAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVFcXVhbFRvOwotCi0gICAgYXV0byBkZWNvZGVU
aW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwotICAgIGdldE1lZGlhU2FtcGxlKFsmXShN
ZWRpYVNhbXBsZSYgc2FtcGxlKSB7Ci0gICAgICAgIGRlY29kZVRpbWUgPSBzYW1wbGUuZGVjb2Rl
VGltZSgpOwotICAgIH0pOwotCi0gICAgYXV0byBvdGhlckRlY29kZVRpbWUgPSBNZWRpYVRpbWU6
OmludmFsaWRUaW1lKCk7Ci0gICAgaWYgKGF1dG8gb3RoZXJDdXJzb3IgPSB1bndyYXAob3RoZXJD
dXJzb3JSZWYpKSB7Ci0gICAgICAgIG90aGVyQ3Vyc29yLT5nZXRNZWRpYVNhbXBsZShbJl0oTWVk
aWFTYW1wbGUmIHNhbXBsZSkgewotICAgICAgICAgICAgb3RoZXJEZWNvZGVUaW1lID0gc2FtcGxl
LmRlY29kZVRpbWUoKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgc3dpdGNoIChkZWNvZGVU
aW1lLmNvbXBhcmUob3RoZXJEZWNvZGVUaW1lKSkgewotICAgIGNhc2UgTWVkaWFUaW1lOjpMZXNz
VGhhbjoKLSAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVMZXNzVGhhbjsKLSAgICBjYXNlIE1lZGlh
VGltZTo6RXF1YWxUbzoKLSAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVFcXVhbFRvOwotICAgIGNh
c2UgTWVkaWFUaW1lOjpHcmVhdGVyVGhhbjoKLSAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVHcmVh
dGVyVGhhbjsKLSAgICB9Ci19Ci0KLU9TU3RhdHVzIFNhbXBsZUN1cnNvcjo6Z2V0U2FtcGxlVGlt
aW5nKENNU2FtcGxlVGltaW5nSW5mbyogc2FtcGxlVGltaW5nKSBjb25zdAotewotICAgIHJldHVy
biBnZXRNZWRpYVNhbXBsZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgewotICAgICAgICAqc2Ft
cGxlVGltaW5nID0gewotICAgICAgICAgICAgLy8gRklYTUU6IER1cmF0aW9uIHNob3VsZCBiZSB0
aGUgZGlmZmVyZW5jZSBpbiBwcmVzZW50YXRpb24gdGltZSBiZXR3ZWVuIHRoaXMgc2FtcGxlIGFu
ZCB0aGUgbmV4dCBpbiBwcmVzZW50YXRpb24gb3JkZXIgKG9yIHRyYWNrIGR1cmF0aW9uIGlmIHRo
aXMgaXMgdGhlIGxhc3Qgc2FtcGxlKS4KLSAgICAgICAgICAgIC5kdXJhdGlvbiA9IFBBTDo6dG9D
TVRpbWUoc2FtcGxlLmR1cmF0aW9uKCkpLAotICAgICAgICAgICAgLnByZXNlbnRhdGlvblRpbWVT
dGFtcCA9IFBBTDo6dG9DTVRpbWUoc2FtcGxlLnByZXNlbnRhdGlvblRpbWUoKSksCi0gICAgICAg
ICAgICAuZGVjb2RlVGltZVN0YW1wID0gUEFMOjp0b0NNVGltZShzYW1wbGUuZGVjb2RlVGltZSgp
KSwKLSAgICAgICAgfTsKLSAgICB9KTsKLX0KLQotT1NTdGF0dXMgU2FtcGxlQ3Vyc29yOjpnZXRT
eW5jSW5mbyhNVFBsdWdpblNhbXBsZUN1cnNvclN5bmNJbmZvKiBzeW5jSW5mbykgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0TWVkaWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxlJiBzYW1wbGUpIHsKLSAg
ICAgICAgKnN5bmNJbmZvID0gewotICAgICAgICAgICAgLmZ1bGxTeW5jID0gc2FtcGxlLmlzU3lu
YygpCi0gICAgICAgIH07Ci0gICAgfSk7Ci19Ci0KLU9TU3RhdHVzIFNhbXBsZUN1cnNvcjo6Y29w
eUZvcm1hdERlc2NyaXB0aW9uKENNRm9ybWF0RGVzY3JpcHRpb25SZWYqIGZvcm1hdERlc2NyaXB0
aW9uT3V0KSBjb25zdAotewotICAgIHJldHVybiBnZXRNZWRpYVNhbXBsZShbJl0oTWVkaWFTYW1w
bGUmIHNhbXBsZSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkJ5
dGVSYW5nZVNhbXBsZVR5cGUpOwotICAgICAgICAqZm9ybWF0RGVzY3JpcHRpb25PdXQgPSByZXRh
aW5QdHIoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNv
bmQpLmxlYWtSZWYoKTsKLSAgICB9KTsKLX0KLQotT1NTdGF0dXMgU2FtcGxlQ3Vyc29yOjpjb3B5
U2FtcGxlTG9jYXRpb24oTVRQbHVnaW5TYW1wbGVDdXJzb3JTdG9yYWdlUmFuZ2UqIHN0b3JhZ2VS
YW5nZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmKiBieXRlU291cmNlKSBjb25zdAotewotICAgIHJl
dHVybiBnZXRNZWRpYVNhbXBsZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNhbXBsZS5wbGF0Zm9ybVNh
bXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGUpOwotICAg
ICAgICBhdXRvIGJ5dGVSYW5nZSA9ICpzYW1wbGUuYnl0ZVJhbmdlKCk7Ci0gICAgICAgICpzdG9y
YWdlUmFuZ2UgPSB7Ci0gICAgICAgICAgICAub2Zmc2V0ID0gQ2hlY2tlZEludDY0KGJ5dGVSYW5n
ZS5ieXRlT2Zmc2V0KS51bnNhZmVHZXQoKSwKLSAgICAgICAgICAgIC5sZW5ndGggPSBDaGVja2Vk
SW50NjQoYnl0ZVJhbmdlLmJ5dGVMZW5ndGgpLnVuc2FmZUdldCgpLAotICAgICAgICB9OwotICAg
ICAgICAqYnl0ZVNvdXJjZSA9IHJldGFpblB0cihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1w
bGUuYnl0ZVJhbmdlU2FtcGxlLmZpcnN0KS5sZWFrUmVmKCk7Ci0gICAgfSk7Ci19Ci0KLU9TU3Rh
dHVzIFNhbXBsZUN1cnNvcjo6Z2V0UGxheWFibGVIb3Jpem9uKENNVGltZSopIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGtDTUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5vdEF2YWlsYWJsZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVy
L1NhbXBsZUN1cnNvci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL1NhbXBsZUN1cnNvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2RiN2Fl
NzNmYzU3OWQzMTRkZjc4MTFjM2Q2NTUzOWNmMzNkZTRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9TYW1wbGVDdXJzb3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVB
REVSKQotCi0jaW5jbHVkZSAiQ29yZU1lZGlhV3JhcHBlZC5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
U2FtcGxlTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9W
YXJpYW50Lmg+Ci0KLURFQ0xBUkVfQ09SRV9NRURJQV9UUkFJVFMoU2FtcGxlQ3Vyc29yKTsKLQot
Ly8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2Uga01UUGx1Z2luU2FtcGxlQ3Vyc29yX0NsYXNzVmVy
c2lvbl80IGlzIGF2YWlsYWJsZSBpbiBTREtzLgotI2lmIGRlZmluZWQoSEFWRV9NVF9QTFVHSU5f
U0FNUExFX0NVUlNPUl9QTEFZQUJMRV9IT1JJWk9OKQotI3VuZGVmIEhBVkVfTVRfUExVR0lOX1NB
TVBMRV9DVVJTT1JfUExBWUFCTEVfSE9SSVpPTgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIE1lZGlhU2FtcGxlOwotfTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNz
IFRyYWNrUmVhZGVyOwotCi1jbGFzcyBTYW1wbGVDdXJzb3IgOiBwdWJsaWMgQ29yZU1lZGlhV3Jh
cHBlZDxTYW1wbGVDdXJzb3I+IHsKLXB1YmxpYzoKLSAgICB1c2luZyBEZWNvZGVPcmRlckl0ZXJh
dG9yID0gRGVjb2RlT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yOwotICAgIHVzaW5nIFByZXNlbnRh
dGlvbk9yZGVySXRlcmF0b3IgPSBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRlcmF0b3I7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFdyYXBwZXJDbGFzcyB3cmFwcGVyQ2xhc3MoKTsKLSAg
ICBzdGF0aWMgQ01CYXNlQ2xhc3NJRCB3cmFwcGVyQ2xhc3NJRCgpOwotICAgIHN0YXRpYyBDb3Jl
TWVkaWFXcmFwcGVkPFNhbXBsZUN1cnNvcj4qIHVud3JhcChDTUJhc2VPYmplY3RSZWYpOwotCi0g
ICAgZW51bSBjbGFzcyBEZWNvZGVkU2FtcGxlIHsKLSAgICAgICAgRmlyc3QsCi0gICAgICAgIExh
c3QsCi0gICAgfTsKLQotICAgIHN0YXRpYyBSZWZQdHI8U2FtcGxlQ3Vyc29yPiBjb3B5KEFsbG9j
YXRvciYmLCBjb25zdCBTYW1wbGVDdXJzb3ImKTsKLSAgICBzdGF0aWMgUmVmUHRyPFNhbXBsZUN1
cnNvcj4gY3JlYXRlQXREZWNvZGVkU2FtcGxlKEFsbG9jYXRvciYmLCBUcmFja1JlYWRlciYsIERl
Y29kZWRTYW1wbGUpOwotICAgIHN0YXRpYyBSZWZQdHI8U2FtcGxlQ3Vyc29yPiBjcmVhdGVBdFBy
ZXNlbnRhdGlvblRpbWUoQWxsb2NhdG9yJiYsIFRyYWNrUmVhZGVyJiwgTWVkaWFUaW1lKTsKLQot
cHJpdmF0ZToKLSAgICB1c2luZyBDb3JlTWVkaWFXcmFwcGVkPFNhbXBsZUN1cnNvcj46OnVud3Jh
cDsKLSAgICB1c2luZyBMb2NhdG9yID0gVmFyaWFudDxNZWRpYVRpbWUsIERlY29kZWRTYW1wbGUs
IERlY29kZU9yZGVySXRlcmF0b3IsIFByZXNlbnRhdGlvbk9yZGVySXRlcmF0b3I+OwotCi0gICAg
U2FtcGxlQ3Vyc29yKEFsbG9jYXRvciYmLCBUcmFja1JlYWRlciYsIExvY2F0b3IpOwotICAgIFNh
bXBsZUN1cnNvcihBbGxvY2F0b3ImJiwgY29uc3QgU2FtcGxlQ3Vyc29yJik7Ci0KLSAgICBXZWJD
b3JlOjpNZWRpYVNhbXBsZSogbG9jYXRlTWVkaWFTYW1wbGUoKSBjb25zdDsKLSAgICBPU1N0YXR1
cyBnZXRNZWRpYVNhbXBsZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6Ok1lZGlhU2Ft
cGxlJik+JiYpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiBPcHRpb25h
bDxJdGVyYXRvcj4gbG9jYXRlSXRlcmF0b3IoU2FtcGxlTWFwJiwgYm9vbCBoYXNBbGxTYW1wbGVz
KSBjb25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9yZGVyZWRNYXAsIHR5cGVuYW1lIFN0
ZXA+IFN0ZXAgc3RlcEluT3JkZXJlZE1hcChTdGVwKTsKLQotICAgIC8vIENvcmVNZWRpYVdyYXBw
ZWQKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJX
ZWJLaXQ6OlNhbXBsZUN1cnNvciJfczsgfQotICAgIE9TU3RhdHVzIGNvcHlQcm9wZXJ0eShDRlN0
cmluZ1JlZiwgQ0ZBbGxvY2F0b3JSZWYsIHZvaWQqIGNvcGllZFZhbHVlKSBmaW5hbDsKLQotICAg
IC8vIFdyYXBwZXJDbGFzcwotICAgIE9TU3RhdHVzIGNvcHkoTVRQbHVnaW5TYW1wbGVDdXJzb3JS
ZWYqKSBjb25zdDsKLSAgICBPU1N0YXR1cyBzdGVwSW5EZWNvZGVPcmRlckFuZFJlcG9ydFN0ZXBz
VGFrZW4oaW50NjRfdCwgaW50NjRfdCopOwotICAgIE9TU3RhdHVzIHN0ZXBJblByZXNlbnRhdGlv
bk9yZGVyQW5kUmVwb3J0U3RlcHNUYWtlbihpbnQ2NF90LCBpbnQ2NF90Kik7Ci0gICAgT1NTdGF0
dXMgc3RlcEJ5RGVjb2RlVGltZShDTVRpbWUsIEJvb2xlYW4qKTsKLSAgICBPU1N0YXR1cyBzdGVw
QnlQcmVzZW50YXRpb25UaW1lKENNVGltZSwgQm9vbGVhbiopOwotICAgIENGQ29tcGFyaXNvblJl
c3VsdCBjb21wYXJlSW5EZWNvZGVPcmRlcihNVFBsdWdpblNhbXBsZUN1cnNvclJlZikgY29uc3Q7
Ci0gICAgT1NTdGF0dXMgZ2V0U2FtcGxlVGltaW5nKENNU2FtcGxlVGltaW5nSW5mbyopIGNvbnN0
OwotICAgIE9TU3RhdHVzIGdldFN5bmNJbmZvKE1UUGx1Z2luU2FtcGxlQ3Vyc29yU3luY0luZm8q
KSBjb25zdDsKLSAgICBPU1N0YXR1cyBjb3B5Rm9ybWF0RGVzY3JpcHRpb24oQ01Gb3JtYXREZXNj
cmlwdGlvblJlZiopIGNvbnN0OwotICAgIE9TU3RhdHVzIGNvcHlTYW1wbGVMb2NhdGlvbihNVFBs
dWdpblNhbXBsZUN1cnNvclN0b3JhZ2VSYW5nZSosIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiopIGNv
bnN0OwotICAgIE9TU3RhdHVzIGdldFBsYXlhYmxlSG9yaXpvbihDTVRpbWUqKSBjb25zdDsKLQot
ICAgIFJlZjxUcmFja1JlYWRlcj4gbV90cmFja1JlYWRlcjsKLSAgICBtdXRhYmxlIExvY2F0b3Ig
bV9sb2NhdG9yOwotICAgIG11dGFibGUgTG9jayBtX2xvY2F0b3JMb2NrOwotfTsKLQotY29uc3Rl
eHByIFNhbXBsZUN1cnNvcjo6V3JhcHBlckNsYXNzIFNhbXBsZUN1cnNvcjo6d3JhcHBlckNsYXNz
KCkKLXsKLSAgICByZXR1cm4gewotI2lmIEhBVkUoTVRfUExVR0lOX1NBTVBMRV9DVVJTT1JfUExB
WUFCTEVfSE9SSVpPTikKLSAgICAgICAgLnZlcnNpb24gPSBrTVRQbHVnaW5TYW1wbGVDdXJzb3Jf
Q2xhc3NWZXJzaW9uXzQsCi0jZWxzZQotICAgICAgICAudmVyc2lvbiA9IGtNVFBsdWdpblNhbXBs
ZUN1cnNvcl9DbGFzc1ZlcnNpb25fMywKLSNlbmRpZgotICAgICAgICAuY29weSA9IFtdKE1UUGx1
Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYq
IHNhbXBsZUN1cnNvckNvcHkpIHsKLSAgICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vy
c29yKS0+Y29weShzYW1wbGVDdXJzb3JDb3B5KTsKLSAgICAgICAgfSwKLSAgICAgICAgLnN0ZXBJ
bkRlY29kZU9yZGVyQW5kUmVwb3J0U3RlcHNUYWtlbiA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29y
UmVmIHNhbXBsZUN1cnNvciwgaW50NjRfdCBzdGVwQ291bnQsIGludDY0X3QqIHN0ZXBzVGFrZW4p
IHsKLSAgICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+c3RlcEluRGVjb2Rl
T3JkZXJBbmRSZXBvcnRTdGVwc1Rha2VuKHN0ZXBDb3VudCwgc3RlcHNUYWtlbik7Ci0gICAgICAg
IH0sCi0gICAgICAgIC5zdGVwSW5QcmVzZW50YXRpb25PcmRlckFuZFJlcG9ydFN0ZXBzVGFrZW4g
PSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIGludDY0X3Qgc3RlcENv
dW50LCBpbnQ2NF90KiBzdGVwc1Rha2VuKSB7Ci0gICAgICAgICAgICByZXR1cm4gdW53cmFwKHNh
bXBsZUN1cnNvciktPnN0ZXBJblByZXNlbnRhdGlvbk9yZGVyQW5kUmVwb3J0U3RlcHNUYWtlbihz
dGVwQ291bnQsIHN0ZXBzVGFrZW4pOwotICAgICAgICB9LAotICAgICAgICAuc3RlcEJ5RGVjb2Rl
VGltZSA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgQ01UaW1lIGRl
bHRhRGVjb2RlVGltZSwgQm9vbGVhbiogcG9zaXRpb25XYXNQaW5uZWQpIHsKLSAgICAgICAgICAg
IHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+c3RlcEJ5RGVjb2RlVGltZShkZWx0YURlY29k
ZVRpbWUsIHBvc2l0aW9uV2FzUGlubmVkKTsKLSAgICAgICAgfSwKLSAgICAgICAgLnN0ZXBCeVBy
ZXNlbnRhdGlvblRpbWUgPSBbXShNVFBsdWdpblNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3Is
IENNVGltZSBkZWx0YVByZXNlbnRhdGlvblRpbWUsIEJvb2xlYW4qIHBvc2l0aW9uV2FzUGlubmVk
KSB7Ci0gICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1cnNvciktPnN0ZXBCeVByZXNl
bnRhdGlvblRpbWUoZGVsdGFQcmVzZW50YXRpb25UaW1lLCBwb3NpdGlvbldhc1Bpbm5lZCk7Ci0g
ICAgICAgIH0sCi0gICAgICAgIC5jb21wYXJlSW5EZWNvZGVPcmRlciA9IFtdKE1UUGx1Z2luU2Ft
cGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYgb3RoZXJT
YW1wbGVDdXJzb3IpIHsKLSAgICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+
Y29tcGFyZUluRGVjb2RlT3JkZXIob3RoZXJTYW1wbGVDdXJzb3IpOwotICAgICAgICB9LAotICAg
ICAgICAuZ2V0U2FtcGxlVGltaW5nID0gW10oTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYgc2FtcGxl
Q3Vyc29yLCBDTVNhbXBsZVRpbWluZ0luZm8qIHNhbXBsZVRpbWluZ0luZm8pIHsKLSAgICAgICAg
ICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+Z2V0U2FtcGxlVGltaW5nKHNhbXBsZVRp
bWluZ0luZm8pOwotICAgICAgICB9LAotICAgICAgICAuZ2V0U3luY0luZm8gPSBbXShNVFBsdWdp
blNhbXBsZUN1cnNvclJlZiBzYW1wbGVDdXJzb3IsIE1UUGx1Z2luU2FtcGxlQ3Vyc29yU3luY0lu
Zm8qIHN5bmNJbmZvKSAtPiBPU1N0YXR1cyB7Ci0gICAgICAgICAgICByZXR1cm4gdW53cmFwKHNh
bXBsZUN1cnNvciktPmdldFN5bmNJbmZvKHN5bmNJbmZvKTsKLSAgICAgICAgfSwKLSAgICAgICAg
LmNvcHlGb3JtYXREZXNjcmlwdGlvbiA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBs
ZUN1cnNvciwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRpb24pIHsKLSAg
ICAgICAgICAgIHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+Y29weUZvcm1hdERlc2NyaXB0
aW9uKGZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICAgICAgfSwKLSAgICAgICAgLmNvcHlTYW1wbGVM
b2NhdGlvbiA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmIHNhbXBsZUN1cnNvciwgTVRQbHVn
aW5TYW1wbGVDdXJzb3JTdG9yYWdlUmFuZ2UqIHN0b3JhZ2VSYW5nZSwgTVRQbHVnaW5CeXRlU291
cmNlUmVmKiBieXRlU291cmNlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdW53cmFwKHNhbXBsZUN1
cnNvciktPmNvcHlTYW1wbGVMb2NhdGlvbihzdG9yYWdlUmFuZ2UsIGJ5dGVTb3VyY2UpOwotICAg
ICAgICB9LAotI2lmIEhBVkUoTVRfUExVR0lOX1NBTVBMRV9DVVJTT1JfUExBWUFCTEVfSE9SSVpP
TikKLSAgICAgICAgLmdldFBsYXlhYmxlSG9yaXpvbiA9IFtdKE1UUGx1Z2luU2FtcGxlQ3Vyc29y
UmVmIHNhbXBsZUN1cnNvciwgQ01UaW1lKiBwbGF5YWJsZUhvcml6b24pIHsKLSAgICAgICAgICAg
IHJldHVybiB1bndyYXAoc2FtcGxlQ3Vyc29yKS0+Z2V0UGxheWFibGVIb3Jpem9uKHBsYXlhYmxl
SG9yaXpvbik7Ci0gICAgICAgIH0sCi0jZW5kaWYKLSAgICB9OwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvVHJhY2tSZWFk
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1RyYWNr
UmVhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdkYTJmNDIwYzkyZmZk
M2EzMTYyYzI2YTEzNWFiOTViYWI3YjYzNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFk
ZXIvVHJhY2tSZWFkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVHJhY2tSZWFkZXIuaCIKLQot
I2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCi0KLSNpbmNsdWRlICJGb3JtYXRSZWFkZXIu
aCIKLSNpbmNsdWRlICJTYW1wbGVDdXJzb3IuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0F1ZGlvVHJh
Y2tQcml2YXRlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbmJhbmRUZXh0VHJhY2tQcml2YXRlLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYURlc2NyaXB0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9NZWRpYVNhbXBsZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTYW1wbGVBVkZPYmpDLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9TYW1wbGVNYXAuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVv
VHJhY2tQcml2YXRlLmg+Ci0jaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZv
dW5kYXRpb24uaD4KLQotI2luY2x1ZGUgPHBhbC9jb2NvYS9NZWRpYVRvb2xib3hTb2Z0TGluay5o
PgotCi1XVEZfREVDTEFSRV9DRl9UWVBFX1RSQUlUKE1UUGx1Z2luVHJhY2tSZWFkZXIpOwotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFBBTDsKLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1jbGFzcyBNZWRpYVNhbXBsZUJ5dGVSYW5nZSBmaW5hbCA6IHB1YmxpYyBN
ZWRpYVNhbXBsZUFWRk9iakMgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVC
eXRlUmFuZ2U+IGNyZWF0ZShNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VS
ZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE1lZGlhU2FtcGxlQnl0ZVJhbmdlKHNhbXBsZSwgYnl0ZVNvdXJjZSwgdHJh
Y2tJRCkpOwotICAgIH0KLQotICAgIE1lZGlhVGltZSBwcmVzZW50YXRpb25UaW1lKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wcmVzZW50YXRpb25UaW1lOyB9Ci0gICAgTWVkaWFUaW1lIGRlY29k
ZVRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RlY29kZVRpbWU7IH0KLSAgICBNZWRpYVRp
bWUgZHVyYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgc2l6
ZV90IHNpemVJbkJ5dGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQot
ICAgIEZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9w
cmVzZW50YXRpb25TaXplOyB9Ci0gICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2ZsYWdzOyB9Ci0gICAgT3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2J5dGVSYW5nZTsgfQotCi0gICAgQXRvbVN0cmluZyB0cmFj
a0lEKCkgY29uc3QgZmluYWw7Ci0gICAgUGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBm
aW5hbDsKLSAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSBmaW5h
bDsKLSAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFU
aW1lJikgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgTWVkaWFTYW1wbGVCeXRlUmFuZ2UoTWVkaWFT
YW1wbGUmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYsIHVpbnQ2NF90IHRyYWNrSUQpOwotCi0gICAg
TWVkaWFUaW1lIG1fcHJlc2VudGF0aW9uVGltZTsKLSAgICBNZWRpYVRpbWUgbV9kZWNvZGVUaW1l
OwotICAgIE1lZGlhVGltZSBtX2R1cmF0aW9uOwotICAgIHNpemVfdCBtX3NpemVJbkJ5dGVzOwot
ICAgIEZsb2F0U2l6ZSBtX3ByZXNlbnRhdGlvblNpemU7Ci0gICAgU2FtcGxlRmxhZ3MgbV9mbGFn
czsKLSAgICB1aW50NjRfdCBtX3RyYWNrSUQ7Ci0gICAgT3B0aW9uYWw8Qnl0ZVJhbmdlPiBtX2J5
dGVSYW5nZTsKLSAgICBSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiBtX2J5dGVTb3Vy
Y2U7Ci0gICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3Jp
cHRpb247Ci19OwotCi1NZWRpYVNhbXBsZUJ5dGVSYW5nZTo6TWVkaWFTYW1wbGVCeXRlUmFuZ2Uo
TWVkaWFTYW1wbGUmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UsIHVp
bnQ2NF90IHRyYWNrSUQpCi0gICAgOiBNZWRpYVNhbXBsZUFWRk9iakMobnVsbHB0cikKLSAgICAs
IG1fcHJlc2VudGF0aW9uVGltZShzYW1wbGUucHJlc2VudGF0aW9uVGltZSgpKQotICAgICwgbV9k
ZWNvZGVUaW1lKHNhbXBsZS5kZWNvZGVUaW1lKCkpCi0gICAgLCBtX2R1cmF0aW9uKHNhbXBsZS5k
dXJhdGlvbigpKQotICAgICwgbV9zaXplSW5CeXRlcyhzYW1wbGUuc2l6ZUluQnl0ZXMoKSkKLSAg
ICAsIG1fcHJlc2VudGF0aW9uU2l6ZShzYW1wbGUucHJlc2VudGF0aW9uU2l6ZSgpKQotICAgICwg
bV9mbGFncyhzYW1wbGUuZmxhZ3MoKSkKLSAgICAsIG1fdHJhY2tJRCh0cmFja0lEKQotICAgICwg
bV9ieXRlUmFuZ2Uoc2FtcGxlLmJ5dGVSYW5nZSgpKQotICAgICwgbV9ieXRlU291cmNlKGJ5dGVT
b3VyY2UpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgYXV0byBwbGF0Zm9y
bVNhbXBsZSA9IHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpOwotICAgIHN3aXRjaCAocGxhdGZvcm1T
YW1wbGUudHlwZSkgewotICAgIGNhc2UgUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlw
ZToKLSAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbiA9IENNU2FtcGxlQnVmZmVyR2V0Rm9ybWF0
RGVzY3JpcHRpb24ocGxhdGZvcm1TYW1wbGUuc2FtcGxlLmNtU2FtcGxlQnVmZmVyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZToK
LSAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbiA9IHBsYXRmb3JtU2FtcGxlLnNhbXBsZS5ieXRl
UmFuZ2VTYW1wbGUuc2Vjb25kOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1BdG9t
U3RyaW5nIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjp0cmFja0lEKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gQXRvbVN0cmluZzo6bnVtYmVyKG1fdHJhY2tJRCk7Ci19Ci0KLVBsYXRmb3JtU2FtcGxlIE1l
ZGlhU2FtcGxlQnl0ZVJhbmdlOjpwbGF0Zm9ybVNhbXBsZSgpCi17Ci0gICAgcmV0dXJuIHsKLSAg
ICAgICAgUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGUsCi0gICAgICAgIHsgLmJ5
dGVSYW5nZVNhbXBsZSA9IHN0ZDo6bWFrZV9wYWlyKG1fYnl0ZVNvdXJjZS5nZXQoKSwgbV9mb3Jt
YXREZXNjcmlwdGlvbi5nZXQoKSkgfSwKLSAgICB9OwotfQotCi12b2lkIE1lZGlhU2FtcGxlQnl0
ZVJhbmdlOjpvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJiBvZmZzZXQpCi17Ci0g
ICAgc2V0VGltZXN0YW1wcyhwcmVzZW50YXRpb25UaW1lKCkgKyBvZmZzZXQsIGRlY29kZVRpbWUo
KSArIG9mZnNldCk7Ci19Ci0KLXZvaWQgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnNldFRpbWVzdGFt
cHMoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBjb25zdCBNZWRpYVRpbWUmIGRl
Y29kZVRpbWUpCi17Ci0gICAgbV9wcmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsK
LSAgICBtX2RlY29kZVRpbWUgPSBkZWNvZGVUaW1lOwotfQotCi1DTUJhc2VDbGFzc0lEIFRyYWNr
UmVhZGVyOjp3cmFwcGVyQ2xhc3NJRCgpCi17Ci0gICAgcmV0dXJuIE1UUGx1Z2luVHJhY2tSZWFk
ZXJHZXRDbGFzc0lEKCk7Ci19Ci0KLUNvcmVNZWRpYVdyYXBwZWQ8VHJhY2tSZWFkZXI+KiBUcmFj
a1JlYWRlcjo6dW53cmFwKENNQmFzZU9iamVjdFJlZiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIHVu
d3JhcChjaGVja2VkX2NmX2Nhc3Q8V3JhcHBlclJlZj4ob2JqZWN0KSk7Ci19Ci0KLVJlZlB0cjxU
cmFja1JlYWRlcj4gVHJhY2tSZWFkZXI6OmNyZWF0ZShBbGxvY2F0b3ImJiBhbGxvY2F0b3IsIGNv
bnN0IEZvcm1hdFJlYWRlciYgZm9ybWF0UmVhZGVyLCBDTU1lZGlhVHlwZSBtZWRpYVR5cGUsIHVp
bnQ2NF90IHRyYWNrSUQsIE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyAoYWxsb2NhdG9yKSBUcmFja1JlYWRlcihXVEZNb3ZlKGFsbG9jYXRvciksIGZv
cm1hdFJlYWRlciwgbWVkaWFUeXBlLCB0cmFja0lELCBlbmFibGVkKSk7Ci19Ci0KLVdvcmtRdWV1
ZSYgVHJhY2tSZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpCi17Ci0gICAgc3RhdGljIGF1dG8mIHF1ZXVl
ID0gV29ya1F1ZXVlOjpjcmVhdGUoIldlYktpdDo6VHJhY2tSZWFkZXIgU3RvcmFnZSBRdWV1ZSIs
IFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIHF1ZXVlOwot
fQotCi1UcmFja1JlYWRlcjo6VHJhY2tSZWFkZXIoQWxsb2NhdG9yJiYgYWxsb2NhdG9yLCBjb25z
dCBGb3JtYXRSZWFkZXImIGZvcm1hdFJlYWRlciwgQ01NZWRpYVR5cGUgbWVkaWFUeXBlLCB1aW50
NjRfdCB0cmFja0lELCBPcHRpb25hbDxib29sPiBlbmFibGVkKQotICAgIDogQ29yZU1lZGlhV3Jh
cHBlZChXVEZNb3ZlKGFsbG9jYXRvcikpCi0gICAgLCBtX3RyYWNrSUQodHJhY2tJRCkKLSAgICAs
IG1fbWVkaWFUeXBlKG1lZGlhVHlwZSkKLSAgICAsIG1fZHVyYXRpb24oZm9ybWF0UmVhZGVyLmR1
cmF0aW9uKCkpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoZW5h
YmxlZCkKLSAgICAgICAgbV9pc0VuYWJsZWQgPSBlbmFibGVkLnZhbHVlKCkgPyBFbmFibGVkOjpU
cnVlIDogRW5hYmxlZDo6RmFsc2U7Ci19Ci0KLXZvaWQgVHJhY2tSZWFkZXI6OmFkZFNhbXBsZShS
ZWY8TWVkaWFTYW1wbGU+JiYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJj
ZSkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2spOwotICAgIGlmICghbV9zYW1wbGVTdG9yYWdlKQot
ICAgICAgICBtX3NhbXBsZVN0b3JhZ2UgPSBtYWtlVW5pcXVlPFNhbXBsZVN0b3JhZ2U+KCk7Ci0K
LSAgICBBU1NFUlQoIXNhbXBsZS0+aXNEaXZpc2FibGUoKSAmJiBzYW1wbGUtPmJ5dGVSYW5nZSgp
KTsKLSAgICBhdXRvIHNhbXBsZVRvQWRkID0gTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmNyZWF0ZShz
YW1wbGUuZ2V0KCksIGJ5dGVTb3VyY2UsIG1fdHJhY2tJRCk7Ci0KLSAgICAvLyBGSVhNRTogRXZl
biB0aG91Z2ggV2ViTSBtdXhlciBndWlkZWxpbmVzIHNheSB0aGlzIG11c3Qgbm90IGhhcHBlbiwg
c29tZSB2aWRlbyB0cmFja3MgaGF2ZSB0d28KLSAgICAvLyBjb25zZWN1dGl2ZSBmcmFtZXMgd2l0
aCB0aGUgc2FtZSBwcmVzZW50YXRpb24gdGltZS4gU2FtcGxlTWFwIHdpbGwgbm90IHN0b3JlIHRo
ZSBzZWNvbmQgZnJhbWUKLSAgICAvLyBpbiB0aGVzZSBjYXNlcywgY29ycnVwdGluZyBhbGwgc3Vi
c2VxdWVudCBub24ta2V5IGZyYW1lcy4gRmluZCBhIHdheSB0byBzdG9yZSBmcmFtZXMgd2l0aAot
ICAgIC8vIGR1cGxpY2F0ZSBwcmVzZW50YXRpb24gdGltZXMuCi0KLSAgICBtX3NhbXBsZVN0b3Jh
Z2UtPnNhbXBsZU1hcC5hZGRTYW1wbGUoc2FtcGxlVG9BZGQuZ2V0KCkpOwotICAgIG1fc2FtcGxl
U3RvcmFnZUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKLX0KLQotdm9pZCBUcmFja1JlYWRlcjo6d2Fp
dEZvclNhbXBsZShGdW5jdGlvbjxib29sKFNhbXBsZU1hcCYsIGJvb2wpPiYmIHByZWRpY2F0ZSkg
Y29uc3QKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2sp
OwotICAgIGlmICghbV9zYW1wbGVTdG9yYWdlKQotICAgICAgICBtX3NhbXBsZVN0b3JhZ2UgPSBt
YWtlVW5pcXVlPFNhbXBsZVN0b3JhZ2U+KCk7Ci0gICAgbV9zYW1wbGVTdG9yYWdlQ29uZGl0aW9u
LndhaXQobV9zYW1wbGVTdG9yYWdlTG9jaywgW3ByZWRpY2F0ZSA9IFdURk1vdmUocHJlZGljYXRl
KSwgdGhpc10gewotICAgICAgICByZXR1cm4gcHJlZGljYXRlKG1fc2FtcGxlU3RvcmFnZS0+c2Ft
cGxlTWFwLCBtX3NhbXBsZVN0b3JhZ2UtPmhhc0FsbFNhbXBsZXMpOwotICAgIH0pOwotfQotCi12
b2lkIFRyYWNrUmVhZGVyOjpmaW5pc2hQYXJzaW5nKCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2sp
OwotICAgIGlmICghbV9zYW1wbGVTdG9yYWdlKQotICAgICAgICBtX3NhbXBsZVN0b3JhZ2UgPSBt
YWtlVW5pcXVlPFNhbXBsZVN0b3JhZ2U+KCk7Ci0gICAgbV9zYW1wbGVTdG9yYWdlLT5oYXNBbGxT
YW1wbGVzID0gdHJ1ZTsKLSAgICBpZiAobV9pc0VuYWJsZWQgPT0gRW5hYmxlZDo6VW5rbm93bikK
LSAgICAgICAgbV9pc0VuYWJsZWQgPSBtX3NhbXBsZVN0b3JhZ2UtPnNhbXBsZU1hcC5lbXB0eSgp
ID8gRW5hYmxlZDo6RmFsc2UgOiBFbmFibGVkOjpUcnVlOwotICAgIG1fc2FtcGxlU3RvcmFnZUNv
bmRpdGlvbi5ub3RpZnlBbGwoKTsKLX0KLQotT1NTdGF0dXMgVHJhY2tSZWFkZXI6OmNvcHlQcm9w
ZXJ0eShDRlN0cmluZ1JlZiBrZXksIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgdm9pZCogY29w
aWVkVmFsdWUpCi17Ci0gICAgLy8gRG9uJ3QgYmxvY2sgd2FpdGluZyBmb3IgbWVkaWEgaWYgdGhl
IHdlIGtub3cgdGhlIGVuYWJsZWQgc3RhdGUuCi0gICAgaWYgKENGRXF1YWwoa2V5LCBQQUw6Omdl
dF9NZWRpYVRvb2xib3hfa01UUGx1Z2luVHJhY2tSZWFkZXJQcm9wZXJ0eV9FbmFibGVkKCkpICYm
IG1faXNFbmFibGVkICE9IEVuYWJsZWQ6OlVua25vd24pIHsKLSAgICAgICAgKnJlaW50ZXJwcmV0
X2Nhc3Q8Q0ZCb29sZWFuUmVmKj4oY29waWVkVmFsdWUpID0gcmV0YWluUHRyKG1faXNFbmFibGVk
ID09IEVuYWJsZWQ6OlRydWUgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZSkubGVh
a1JlZigpOwotICAgICAgICByZXR1cm4gbm9FcnI7Ci0gICAgfQotCi0gICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX3NhbXBsZVN0b3JhZ2VMb2NrKTsKLSAgICBtX3NhbXBsZVN0b3JhZ2VDb25k
aXRpb24ud2FpdChtX3NhbXBsZVN0b3JhZ2VMb2NrLCBbJl0gewotICAgICAgICByZXR1cm4gISFt
X3NhbXBsZVN0b3JhZ2U7Ci0gICAgfSk7Ci0KLSAgICBhdXRvJiBzYW1wbGVNYXAgPSBtX3NhbXBs
ZVN0b3JhZ2UtPnNhbXBsZU1hcDsKLQotICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpnZXRfTWVk
aWFUb29sYm94X2tNVFBsdWdpblRyYWNrUmVhZGVyUHJvcGVydHlfRW5hYmxlZCgpKSkgewotICAg
ICAgICBpZiAobV9pc0VuYWJsZWQgPT0gRW5hYmxlZDo6VW5rbm93bikKLSAgICAgICAgICAgIG1f
aXNFbmFibGVkID0gc2FtcGxlTWFwLmVtcHR5KCkgPyBFbmFibGVkOjpGYWxzZSA6IEVuYWJsZWQ6
OlRydWU7Ci0KLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZCb29sZWFuUmVmKj4oY29waWVk
VmFsdWUpID0gcmV0YWluUHRyKG1faXNFbmFibGVkID09IEVuYWJsZWQ6OlRydWUgPyBrQ0ZCb29s
ZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZSkubGVha1JlZigpOwotICAgICAgICByZXR1cm4gbm9F
cnI7Ci0gICAgfQotCi0gICAgaWYgKHNhbXBsZU1hcC5lbXB0eSgpKQotICAgICAgICByZXR1cm4g
a0NNQmFzZU9iamVjdEVycm9yX1ZhbHVlTm90QXZhaWxhYmxlOwotCi0gICAgYXV0byYgbGFzdFNh
bXBsZSA9ICpzYW1wbGVNYXAuZGVjb2RlT3JkZXIoKS5yYmVnaW4oKS0+c2Vjb25kOwotCi0gICAg
aWYgKENGRXF1YWwoa2V5LCBQQUw6OmdldF9NZWRpYVRvb2xib3hfa01UUGx1Z2luVHJhY2tSZWFk
ZXJQcm9wZXJ0eV9Gb3JtYXREZXNjcmlwdGlvbkFycmF5KCkpKSB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obGFzdFNhbXBsZS5wbGF0Zm9ybVNhbXBs
ZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGUpOwotICAgICAg
ICBjb25zdCB2b2lkKiBkZXNjcmlwdGlvbnNbMV0gPSB7IGxhc3RTYW1wbGUucGxhdGZvcm1TYW1w
bGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZCB9OwotICAgICAgICAqcmVpbnRlcnBy
ZXRfY2FzdDxDRkFycmF5UmVmKj4oY29waWVkVmFsdWUpID0gYWRvcHRDRihDRkFycmF5Q3JlYXRl
KGFsbG9jYXRvciwgZGVzY3JpcHRpb25zLCAxLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSkubGVh
a1JlZigpOwotICAgICAgICByZXR1cm4gbm9FcnI7Ci0gICAgfQotCi0gICAgaWYgKENGRXF1YWwo
a2V5LCBQQUw6OmdldF9NZWRpYVRvb2xib3hfa01UUGx1Z2luVHJhY2tSZWFkZXJQcm9wZXJ0eV9O
b21pbmFsRnJhbWVSYXRlKCkpKSB7Ci0gICAgICAgIGZsb2F0IGZyYW1lUmF0ZSA9IDEgLyBsYXN0
U2FtcGxlLmR1cmF0aW9uKCkudG9GbG9hdCgpOwotICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxD
Rk51bWJlclJlZio+KGNvcGllZFZhbHVlKSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoYWxsb2Nh
dG9yLCBrQ0ZOdW1iZXJGbG9hdDMyVHlwZSwgJmZyYW1lUmF0ZSkpLmxlYWtSZWYoKTsKLSAgICAg
ICAgcmV0dXJuIG5vRXJyOwotICAgIH0KLQotICAgIHJldHVybiBrQ01CYXNlT2JqZWN0RXJyb3Jf
VmFsdWVOb3RBdmFpbGFibGU7Ci19Ci0KLXZvaWQgVHJhY2tSZWFkZXI6OmZpbmFsaXplKCkKLXsK
LSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2spOwotICAgIHN0
b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFtzYW1wbGVTdG9yYWdlID0gc3RkOjpleGNoYW5nZShtX3Nh
bXBsZVN0b3JhZ2UsIG51bGxwdHIpXSgpIG11dGFibGUgewotICAgICAgICBzYW1wbGVTdG9yYWdl
ID0gbnVsbHB0cjsKLSAgICB9KTsKLSAgICBDb3JlTWVkaWFXcmFwcGVkPFRyYWNrUmVhZGVyPjo6
ZmluYWxpemUoKTsKLX0KLQotT1NTdGF0dXMgVHJhY2tSZWFkZXI6OmdldFRyYWNrSW5mbyhNVFBl
cnNpc3RlbnRUcmFja0lEKiB0cmFja0lELCBDTU1lZGlhVHlwZSogbWVkaWFUeXBlKQotewotICAg
ICp0cmFja0lEID0gbV90cmFja0lEOwotICAgICptZWRpYVR5cGUgPSBtX21lZGlhVHlwZTsKLSAg
ICByZXR1cm4gbm9FcnI7Ci19Ci0KLU9TU3RhdHVzIFRyYWNrUmVhZGVyOjpjcmVhdGVDdXJzb3JB
dFByZXNlbnRhdGlvblRpbWVTdGFtcChDTVRpbWUgdGltZSwgTVRQbHVnaW5TYW1wbGVDdXJzb3JS
ZWYqIHNhbXBsZUN1cnNvcikKLXsKLSAgICAqc2FtcGxlQ3Vyc29yID0gU2FtcGxlQ3Vyc29yOjpj
cmVhdGVBdFByZXNlbnRhdGlvblRpbWUoYWxsb2NhdG9yKCksICp0aGlzLCBQQUw6OnRvTWVkaWFU
aW1lKHRpbWUpKS5sZWFrUmVmKCktPndyYXBwZXIoKTsKLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0K
LU9TU3RhdHVzIFRyYWNrUmVhZGVyOjpjcmVhdGVDdXJzb3JBdEZpcnN0U2FtcGxlSW5EZWNvZGVP
cmRlcihNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogc2FtcGxlQ3Vyc29yKQotewotICAgICpzYW1w
bGVDdXJzb3IgPSBTYW1wbGVDdXJzb3I6OmNyZWF0ZUF0RGVjb2RlZFNhbXBsZShhbGxvY2F0b3Io
KSwgKnRoaXMsIFNhbXBsZUN1cnNvcjo6RGVjb2RlZFNhbXBsZTo6Rmlyc3QpLmxlYWtSZWYoKS0+
d3JhcHBlcigpOwotICAgIHJldHVybiBub0VycjsKLX0KLQotT1NTdGF0dXMgVHJhY2tSZWFkZXI6
OmNyZWF0ZUN1cnNvckF0TGFzdFNhbXBsZUluRGVjb2RlT3JkZXIoTVRQbHVnaW5TYW1wbGVDdXJz
b3JSZWYqIHNhbXBsZUN1cnNvcikKLXsKLSAgICAqc2FtcGxlQ3Vyc29yID0gU2FtcGxlQ3Vyc29y
OjpjcmVhdGVBdERlY29kZWRTYW1wbGUoYWxsb2NhdG9yKCksICp0aGlzLCBTYW1wbGVDdXJzb3I6
OkRlY29kZWRTYW1wbGU6Okxhc3QpLmxlYWtSZWYoKS0+d3JhcHBlcigpOwotICAgIHJldHVybiBu
b0VycjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VC
TV9GT1JNQVRfUkVBREVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL1RyYWNrUmVhZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
TWVkaWFGb3JtYXRSZWFkZXIvVHJhY2tSZWFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjAxZmZkZDcwYzk3OTNkOWI1NGI0MjNlYjQ0OWI0ZDk3ZmNhOTBhNS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvVHJhY2tSZWFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDEyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VC
TV9GT1JNQVRfUkVBREVSKQotCi0jaW5jbHVkZSAiQ29yZU1lZGlhV3JhcHBlZC5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvU2FtcGxlTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgotCi1E
RUNMQVJFX0NPUkVfTUVESUFfVFJBSVRTKFRyYWNrUmVhZGVyKTsKLQotbmFtZXNwYWNlIFdURiB7
Ci1jbGFzcyBXb3JrUXVldWU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEF1ZGlv
VHJhY2tQcml2YXRlOwotY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTsKLWNsYXNzIE1lZGlh
U2FtcGxlOwotY2xhc3MgVHJhY2tQcml2YXRlQmFzZTsKLWNsYXNzIFZpZGVvVHJhY2tQcml2YXRl
OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgRm9ybWF0UmVhZGVyOwotCi1jbGFz
cyBUcmFja1JlYWRlciBmaW5hbCA6IHB1YmxpYyBDb3JlTWVkaWFXcmFwcGVkPFRyYWNrUmVhZGVy
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBXcmFwcGVyQ2xhc3Mgd3JhcHBlckNs
YXNzKCk7Ci0gICAgc3RhdGljIENNQmFzZUNsYXNzSUQgd3JhcHBlckNsYXNzSUQoKTsKLSAgICBz
dGF0aWMgQ29yZU1lZGlhV3JhcHBlZDxUcmFja1JlYWRlcj4qIHVud3JhcChDTUJhc2VPYmplY3RS
ZWYpOwotICAgIHN0YXRpYyBXVEY6OldvcmtRdWV1ZSYgc3RvcmFnZVF1ZXVlKCk7Ci0KLSAgICBz
dGF0aWMgUmVmUHRyPFRyYWNrUmVhZGVyPiBjcmVhdGUoQWxsb2NhdG9yJiYsIGNvbnN0IEZvcm1h
dFJlYWRlciYsIENNTWVkaWFUeXBlLCB1aW50NjRfdCwgT3B0aW9uYWw8Ym9vbD4pOwotCi0gICAg
dWludDY0X3QgdHJhY2tJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tJRDsgfQotICAgIHZvaWQg
YWRkU2FtcGxlKFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4mJiwgTVRQbHVnaW5CeXRlU291cmNl
UmVmKTsKLSAgICB2b2lkIHdhaXRGb3JTYW1wbGUoRnVuY3Rpb248Ym9vbChXZWJDb3JlOjpTYW1w
bGVNYXAmLCBib29sKT4mJikgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFi
bGVkKSB7IG1faXNFbmFibGVkID0gZW5hYmxlZCA/IEVuYWJsZWQ6OlRydWUgOiBFbmFibGVkOjpG
YWxzZTsgfQotICAgIENNTWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVk
aWFUeXBlOyB9Ci0KLSAgICB2b2lkIGZpbmlzaFBhcnNpbmcoKTsKLQotcHJpdmF0ZToKLSAgICB1
c2luZyBDb3JlTWVkaWFXcmFwcGVkPFRyYWNrUmVhZGVyPjo6dW53cmFwOwotCi0gICAgVHJhY2tS
ZWFkZXIoQWxsb2NhdG9yJiYsIGNvbnN0IEZvcm1hdFJlYWRlciYsIENNTWVkaWFUeXBlLCB1aW50
NjRfdCwgT3B0aW9uYWw8Ym9vbD4pOwotCi0gICAgLy8gQ01CYXNlQ2xhc3MKLSAgICBTdHJpbmcg
ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJXZWJLaXQ6OlRyYWNrUmVh
ZGVyIl9zOyB9Ci0gICAgT1NTdGF0dXMgY29weVByb3BlcnR5KENGU3RyaW5nUmVmLCBDRkFsbG9j
YXRvclJlZiwgdm9pZCogY29waWVkVmFsdWUpIGZpbmFsOwotICAgIHZvaWQgZmluYWxpemUoKSBm
aW5hbDsKLQotICAgIC8vIFdyYXBwZXJDbGFzcwotICAgIE9TU3RhdHVzIGdldFRyYWNrSW5mbyhN
VFBlcnNpc3RlbnRUcmFja0lEKiwgQ01NZWRpYVR5cGUqKTsKLSAgICBPU1N0YXR1cyBjcmVhdGVD
dXJzb3JBdFByZXNlbnRhdGlvblRpbWVTdGFtcChDTVRpbWUsIE1UUGx1Z2luU2FtcGxlQ3Vyc29y
UmVmKik7Ci0gICAgT1NTdGF0dXMgY3JlYXRlQ3Vyc29yQXRGaXJzdFNhbXBsZUluRGVjb2RlT3Jk
ZXIoTVRQbHVnaW5TYW1wbGVDdXJzb3JSZWYqKTsKLSAgICBPU1N0YXR1cyBjcmVhdGVDdXJzb3JB
dExhc3RTYW1wbGVJbkRlY29kZU9yZGVyKE1UUGx1Z2luU2FtcGxlQ3Vyc29yUmVmKik7Ci0KLSAg
ICBzdHJ1Y3QgU2FtcGxlU3RvcmFnZSB7Ci0gICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FM
TE9DQVRFRDsKLSAgICAgICAgflNhbXBsZVN0b3JhZ2UoKSB7IEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOyB9Ci0gICAgICAgIFdlYkNvcmU6OlNhbXBsZU1hcCBzYW1wbGVNYXA7Ci0gICAgICAgIGJv
b2wgaGFzQWxsU2FtcGxlcyB7IGZhbHNlIH07Ci0gICAgfTsKLQotICAgIGVudW0gRW5hYmxlZCA6
IHVpbnQ4X3QgeyBVbmtub3duLCBGYWxzZSwgVHJ1ZSB9OwotCi0gICAgY29uc3QgdWludDY0X3Qg
bV90cmFja0lEOwotICAgIGNvbnN0IENNTWVkaWFUeXBlIG1fbWVkaWFUeXBlOwotICAgIGNvbnN0
IE1lZGlhVGltZSBtX2R1cmF0aW9uOwotICAgIHN0ZDo6YXRvbWljPEVuYWJsZWQ+IG1faXNFbmFi
bGVkIHsgRW5hYmxlZDo6VW5rbm93biB9OwotICAgIG11dGFibGUgQ29uZGl0aW9uIG1fc2FtcGxl
U3RvcmFnZUNvbmRpdGlvbjsKLSAgICBtdXRhYmxlIExvY2sgbV9zYW1wbGVTdG9yYWdlTG9jazsK
LSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTYW1wbGVTdG9yYWdlPiBtX3NhbXBsZVN0b3Jh
Z2U7Ci19OwotCi1jb25zdGV4cHIgVHJhY2tSZWFkZXI6OldyYXBwZXJDbGFzcyBUcmFja1JlYWRl
cjo6d3JhcHBlckNsYXNzKCkKLXsKLSAgICByZXR1cm4gewotICAgICAgICAudmVyc2lvbiA9IGtN
VFBsdWdpblRyYWNrUmVhZGVyX0NsYXNzVmVyc2lvbl8xLAotICAgICAgICAuZ2V0VHJhY2tJbmZv
ID0gW10oTVRQbHVnaW5UcmFja1JlYWRlclJlZiB0cmFja1JlYWRlciwgTVRQZXJzaXN0ZW50VHJh
Y2tJRCogdHJhY2tJRCwgQ01NZWRpYVR5cGUqIG1lZGlhVHlwZSkgewotICAgICAgICAgICAgcmV0
dXJuIHVud3JhcCh0cmFja1JlYWRlciktPmdldFRyYWNrSW5mbyh0cmFja0lELCBtZWRpYVR5cGUp
OwotICAgICAgICB9LAotICAgICAgICAuY3JlYXRlQ3Vyc29yQXRQcmVzZW50YXRpb25UaW1lU3Rh
bXAgPSBbXShNVFBsdWdpblRyYWNrUmVhZGVyUmVmIHRyYWNrUmVhZGVyLCBDTVRpbWUgdGltZXN0
YW1wLCBNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogY3Vyc29yKSB7Ci0gICAgICAgICAgICByZXR1
cm4gdW53cmFwKHRyYWNrUmVhZGVyKS0+Y3JlYXRlQ3Vyc29yQXRQcmVzZW50YXRpb25UaW1lU3Rh
bXAodGltZXN0YW1wLCBjdXJzb3IpOwotICAgICAgICB9LAotICAgICAgICAuY3JlYXRlQ3Vyc29y
QXRGaXJzdFNhbXBsZUluRGVjb2RlT3JkZXIgPSBbXShNVFBsdWdpblRyYWNrUmVhZGVyUmVmIHRy
YWNrUmVhZGVyLCBNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogY3Vyc29yKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gdW53cmFwKHRyYWNrUmVhZGVyKS0+Y3JlYXRlQ3Vyc29yQXRGaXJzdFNhbXBsZUlu
RGVjb2RlT3JkZXIoY3Vyc29yKTsKLSAgICAgICAgfSwKLSAgICAgICAgLmNyZWF0ZUN1cnNvckF0
TGFzdFNhbXBsZUluRGVjb2RlT3JkZXIgPSBbXShNVFBsdWdpblRyYWNrUmVhZGVyUmVmIHRyYWNr
UmVhZGVyLCBNVFBsdWdpblNhbXBsZUN1cnNvclJlZiogY3Vyc29yKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gdW53cmFwKHRyYWNrUmVhZGVyKS0+Y3JlYXRlQ3Vyc29yQXRMYXN0U2FtcGxlSW5EZWNv
ZGVPcmRlcihjdXJzb3IpOwotICAgICAgICB9LAotICAgIH07Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNl
c0NvY29hLnR4dAppbmRleCBjYmEzODI2NDkwMWZhMWQ4ZTBmNTBmNWU3ZDQ4NzkxNTc0ZjRmNGRm
Li5iODNkNzM4NjI1OTY4ZGZkN2U4OTIzZDJmZTc4NDJiYjA1NzJmZTJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
Q29jb2EudHh0CkBAIC0xMDcsNyArMTA3LDcgQEAgU2hhcmVkL0FQSS9jL2NmL1dLVVJMQ0YubW0K
IFNoYXJlZC9BUEkvYy9jZy9XS0ltYWdlQ0cuY3BwCiAKIFNoYXJlZC9BUEkvYy9tYWMvV0tDZXJ0
aWZpY2F0ZUluZm9NYWMubW0KLVNoYXJlZC9BUEkvYy9tYWMvV0tGb3JtYXRSZWFkZXIuY3BwCitT
aGFyZWQvQVBJL2MvbWFjL1dLTWVkaWFGb3JtYXRSZWFkZXIuY3BwCiBTaGFyZWQvQVBJL2MvbWFj
L1dLT2JqQ1R5cGVXcmFwcGVyUmVmLm1tCiBTaGFyZWQvQVBJL2MvbWFjL1dLVVJMUmVxdWVzdE5T
Lm1tCiBTaGFyZWQvQVBJL2MvbWFjL1dLVVJMUmVzcG9uc2VOUy5tbQpAQCAtMjE1LDkgKzIxNSwx
MCBAQCBTaGFyZWQvbWFjL1dlYkhpdFRlc3RSZXN1bHREYXRhLm1tCiBTaGFyZWQvbWFjL1dlYk1l
bW9yeVNhbXBsZXIubWFjLm1tCiAKIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvQ29yZU1l
ZGlhV3JhcHBlZC5jcHAKLVNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvRm9ybWF0UmVhZGVy
LmNwcAotU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9TYW1wbGVDdXJzb3IuY3BwCi1TaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL1RyYWNrUmVhZGVyLmNwcAorU2hhcmVkL21hYy9NZWRp
YUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAKK1NoYXJlZC9tYWMvTWVkaWFGb3Jt
YXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCitTaGFyZWQvbWFjL01lZGlhRm9ybWF0
UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcAorU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRl
ci9NZWRpYVRyYWNrUmVhZGVyLmNwcAogCiBTaGFyZWQvUGx1Z2lucy9tYWMvUGx1Z2luU2FuZGJv
eFByb2ZpbGUubW0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNzI1YWI2YTE4ZWNjMjdmMzlhY2M0YzU1ODQ5ZjE5NDk4ZDUzODlkMi4u
MDU2OTgwMjhmZWI1MWM0N2I2Y2U3ZmQyYzI4NDZjZmRkOTE3ZGU5YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTQzLDExICsxNTQz
LDExIEBACiAJCUExM0IzREEyMjA3RjM5REUwMDkwQzU4RCAvKiBNb2JpbGVXaUZpU1BJLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTNCM0RBMTIwN0Yz
OURFMDA5MEM1OEQgLyogTW9iaWxlV2lGaVNQSS5oICovOyB9OwogCQlBMTNEQzY4MjIwN0FBNkIy
MDA2NkVGNzIgLyogV0tBcHBsaWNhdGlvblN0YXRlVHJhY2tpbmdWaWV3LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTNEQzY4MDIwN0FBNkIyMDA2NkVG
NzIgLyogV0tBcHBsaWNhdGlvblN0YXRlVHJhY2tpbmdWaWV3LmggKi87IH07CiAJCUExNTc5NzY0
MjU4MkIxREIwMDUyODIzNiAvKiBNZWRpYUZvcm1hdFJlYWRlci5idW5kbGUgaW4gQ29weSBQbHVn
LWlucyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTZFNjYwMDI1ODE5MzA4
MDBFRTE3NDkgLyogTWVkaWFGb3JtYXRSZWFkZXIuYnVuZGxlICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFJlbW92ZUhlYWRlcnNPbkNvcHksICk7IH07IH07Ci0JCUExNTc5OUI3MjU4NDQz
MzIwMDUyODIzNiAvKiBUcmFja1JlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTE1Nzk5QUUyNTg0NDMzMTAwNTI4MjM2IC8qIFRyYWNrUmVhZGVy
LmggKi87IH07CisJCUExNTc5OUI3MjU4NDQzMzIwMDUyODIzNiAvKiBNZWRpYVRyYWNrUmVhZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTU3OTlB
RTI1ODQ0MzMxMDA1MjgyMzYgLyogTWVkaWFUcmFja1JlYWRlci5oICovOyB9OwogCQlBMTU3OTlC
QzI1ODQ0MzMyMDA1MjgyMzYgLyogQ29yZU1lZGlhV3JhcHBlZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE1Nzk5QjMyNTg0NDMzMTAwNTI4MjM2IC8q
IENvcmVNZWRpYVdyYXBwZWQuaCAqLzsgfTsKLQkJQTE1Nzk5QkQyNTg0NDMzMjAwNTI4MjM2IC8q
IFNhbXBsZUN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTE1Nzk5QjQyNTg0NDMzMTAwNTI4MjM2IC8qIFNhbXBsZUN1cnNvci5oICovOyB9Owot
CQlBMTU3OTlCRTI1ODQ0MzMyMDA1MjgyMzYgLyogRm9ybWF0UmVhZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTU3OTlCNTI1ODQ0MzMxMDA1Mjgy
MzYgLyogRm9ybWF0UmVhZGVyLmggKi87IH07Ci0JCUExNTc5QjI4MjU4NDkwRTUwMDUyODIzNiAv
KiBXS0Zvcm1hdFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTE1NzlCMjYyNTg0OTBFNTAwNTI4MjM2IC8qIFdLRm9ybWF0UmVhZGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTE1Nzk5QkQy
NTg0NDMzMjAwNTI4MjM2IC8qIE1lZGlhU2FtcGxlQ3Vyc29yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTU3OTlCNDI1ODQ0MzMxMDA1MjgyMzYgLyog
TWVkaWFTYW1wbGVDdXJzb3IuaCAqLzsgfTsKKwkJQTE1Nzk5QkUyNTg0NDMzMjAwNTI4MjM2IC8q
IE1lZGlhRm9ybWF0UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMTU3OTlCNTI1ODQ0MzMxMDA1MjgyMzYgLyogTWVkaWFGb3JtYXRSZWFkZXIu
aCAqLzsgfTsKKwkJQTE1NzlCMjgyNTg0OTBFNTAwNTI4MjM2IC8qIFdLTWVkaWFGb3JtYXRSZWFk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNTc5
QjI2MjU4NDkwRTUwMDUyODIzNiAvKiBXS01lZGlhRm9ybWF0UmVhZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTE1RUVERTYxRTMwMUNFRTAw
MDA2OUIwIC8qIFdLUGFzc3dvcmRWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMTVFRURFNDFFMzAxQ0VFMDAwMDY5QjAgLyogV0tQYXNzd29yZFZp
ZXcuaCAqLzsgfTsKIAkJQTE2RTY2NzUyNTgxQTQ0ODAwRUUxNzQ5IC8qIFdlYktpdC5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4REMy
RUY1QjA0ODZBNjk0MDA5OEIyMTYgLyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsKIAkJQTE2RTY2
ODcyNTgxQTRGNzAwRUUxNzQ5IC8qIE1lZGlhRm9ybWF0UmVhZGVyUGx1Z0luLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNkU2Njg2MjU4MUE0Rjcw
MEVFMTc0OSAvKiBNZWRpYUZvcm1hdFJlYWRlclBsdWdJbi5jcHAgKi87IH07CkBAIC0xNTY1LDYg
KzE1NjUsNyBAQAogCQlBMUE0RkU1QzE4RENFOUZBMDBCNUVBOEEgLyogX1dLRG93bmxvYWRJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTFB
NEZFNTkxOERDRTlGQTAwQjVFQThBIC8qIF9XS0Rvd25sb2FkSW50ZXJuYWwuaCAqLzsgfTsKIAkJ
QTFBNEZFNjExOERENTRBNDAwQjVFQThBIC8qIF9XS0Rvd25sb2FkRGVsZWdhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExQTRGRTYwMThERDU0QTQw
MEI1RUE4QSAvKiBfV0tEb3dubG9hZERlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTFBREFGQjYyMzY4RTZBODAwOUNCNzc2IC8qIFNo
YXJlZE1lbW9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMUFEQUZCNTIzNjhFNEI4MDA5Q0I3NzYgLyogU2hhcmVkTWVtb3J5LmNwcCAqLzsgfTsK
KwkJQTFCNERDRTEyNUE3OTIzQzAwN0QxNzhDIC8qIE1lZGlhU2FtcGxlQnl0ZVJhbmdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUI0RENERjI1QTc5
MjExMDA3RDE3OEMgLyogTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCAqLzsgfTsKIAkJQTFDNTEyQzkx
OTA2NTZFNTAwNDQ4OTE0IC8qIFdlYlByZXZpZXdMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExQzUxMkM3MTkwNjU2RTUwMDQ0ODkx
NCAvKiBXZWJQcmV2aWV3TG9hZGVyQ2xpZW50LmggKi87IH07CiAJCUExREY2MzEzMThFMEI3Qzgw
MDNBM0UyQSAvKiBMZWdhY3lEb3dubG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTFERjYzMTExOEUwQjdDODAwM0EzRTJBIC8qIExlZ2Fj
eURvd25sb2FkQ2xpZW50LmggKi87IH07CiAJCUExRTY4ODcwMUY2RTJCQUIwMDcwMDZBNiAvKiBR
dWFyYW50aW5lU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMUU2ODg2RjFGNkUyQkFCMDA3MDA2QTYgLyogUXVhcmFudGluZVNQSS5oICovOyB9OwpA
QCAtNDg5OSwxNSArNDkwMCwxNSBAQAogCQlBMTNCM0RBMTIwN0YzOURFMDA5MEM1OEQgLyogTW9i
aWxlV2lGaVNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2JpbGVXaUZpU1BJLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUExM0RDNjgwMjA3QUE2QjIwMDY2RUY3MiAvKiBXS0FwcGxpY2F0
aW9uU3RhdGVUcmFja2luZ1ZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tBcHBsaWNhdGlvblN0YXRl
VHJhY2tpbmdWaWV3Lmg7IHBhdGggPSBpb3MvV0tBcHBsaWNhdGlvblN0YXRlVHJhY2tpbmdWaWV3
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExM0RDNjgxMjA3QUE2QjIwMDY2RUY3
MiAvKiBXS0FwcGxpY2F0aW9uU3RhdGVUcmFja2luZ1ZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBXS0FwcGxpY2F0aW9uU3RhdGVUcmFja2luZ1ZpZXcubW07IHBhdGggPSBpb3MvV0tBcHBs
aWNhdGlvblN0YXRlVHJhY2tpbmdWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBMTU3OTlBRTI1ODQ0MzMxMDA1MjgyMzYgLyogVHJhY2tSZWFkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhY2tSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTE1Nzk5QUYyNTg0NDMzMTAwNTI4MjM2IC8qIFNhbXBsZUN1cnNvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGVDdXJzb3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMTU3OTlCMDI1ODQ0MzMxMDA1MjgyMzYgLyogRm9y
bWF0UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1h
dFJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUExNTc5OUIxMjU4NDQz
MzEwMDUyODIzNiAvKiBUcmFja1JlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUcmFja1JlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUExNTc5OUFFMjU4NDQzMzEwMDUyODIzNiAvKiBNZWRpYVRyYWNrUmVhZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhVHJhY2tSZWFkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTE1Nzk5QUYyNTg0NDMzMTAwNTI4MjM2IC8qIE1lZGlhU2FtcGxl
Q3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhU2Ft
cGxlQ3Vyc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE1Nzk5QjAyNTg0
NDMzMTAwNTI4MjM2IC8qIE1lZGlhRm9ybWF0UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRm9ybWF0UmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTE1Nzk5QjEyNTg0NDMzMTAwNTI4MjM2IC8qIE1lZGlhVHJhY2tSZWFk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFUcmFja1Jl
YWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNTc5OUIzMjU4NDQzMzEw
MDUyODIzNiAvKiBDb3JlTWVkaWFXcmFwcGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvcmVNZWRpYVdyYXBwZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTE1Nzk5QjQyNTg0NDMzMTAwNTI4MjM2IC8qIFNhbXBsZUN1cnNvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGVDdXJzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTE1Nzk5QjUyNTg0NDMzMTAwNTI4MjM2IC8qIEZvcm1hdFJlYWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXRSZWFkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTE1NzlCMjUyNTg0OTBFNTAwNTI4MjM2IC8qIFdLRm9ybWF0UmVh
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLRm9ybWF0UmVh
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTE1NzlCMjYyNTg0OTBFNTAw
NTI4MjM2IC8qIFdLRm9ybWF0UmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLRm9ybWF0UmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNTc5
OUI0MjU4NDQzMzEwMDUyODIzNiAvKiBNZWRpYVNhbXBsZUN1cnNvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVNhbXBsZUN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMTU3OTlCNTI1ODQ0MzMxMDA1MjgyMzYgLyogTWVkaWFGb3JtYXRSZWFk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFGb3JtYXRSZWFkZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE1NzlCMjUyNTg0OTBFNTAwNTI4MjM2
IC8qIFdLTWVkaWFGb3JtYXRSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0tNZWRpYUZvcm1hdFJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUExNTc5QjI2MjU4NDkwRTUwMDUyODIzNiAvKiBXS01lZGlhRm9ybWF0UmVhZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTWVkaWFGb3JtYXRSZWFkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE1NzlCODMyNTg1MkI3QzAwNTI4MjM2IC8q
IENvcmVNZWRpYVdyYXBwZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29yZU1lZGlhV3JhcHBl
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNUVFREUzMUUzMDFDRUUwMDAw
NjlCMCAvKiBXS1Bhc3N3b3JkVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IFdLUGFzc3dvcmRWaWV3Lm1tOyBwYXRoID0gaW9zL1dLUGFzc3dvcmRWaWV3Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTVFRURFNDFFMzAxQ0VFMDAwMDY5QjAg
LyogV0tQYXNzd29yZFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQ
YXNzd29yZFZpZXcuaDsgcGF0aCA9IGlvcy9XS1Bhc3N3b3JkVmlldy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNDkzNiw2ICs0OTM3LDggQEAKIAkJQTFBNEZFNTkxOERDRTlGQTAw
QjVFQThBIC8qIF9XS0Rvd25sb2FkSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gX1dLRG93bmxvYWRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBMUE0RkU2MDE4REQ1NEE0MDBCNUVBOEEgLyogX1dLRG93bmxvYWREZWxlZ2F0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tEb3dubG9hZERlbGVnYXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExQURBRkI1MjM2OEU0QjgwMDlDQjc3NiAvKiBT
aGFyZWRNZW1vcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVkTWVtb3J5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTFCNERDREYyNUE3OTIxMTAwN0QxNzhDIC8qIE1l
ZGlhU2FtcGxlQnl0ZVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2FtcGxlQnl0ZVJhbmdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExQjREQ0UwMjVBNzkyMTEwMDdEMTc4
QyAvKiBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVNh
bXBsZUJ5dGVSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExQjg5Qjky
MjIxRTAyMzMwMEVCNENFQSAvKiBTREtWYXJpYW50LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54
Y2NvbmZpZzsgcGF0aCA9IFNES1ZhcmlhbnQueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUExQjlDQTM4MjI0NkU1NEEwMDNENkRDQSAvKiBXZWJQYXltZW50Q29vcmRpbmF0
b3JDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRvckNv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUM1MTJDNjE5MDY1NkU1MDA0
NDg5MTQgLyogV2ViUHJldmlld0xvYWRlckNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBXZWJQcmV2aWV3TG9hZGVyQ2xpZW50LmNwcDsgcGF0aCA9IGlvcy9X
ZWJQcmV2aWV3TG9hZGVyQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTkzMTYsMTIgKzkzMTksMTQgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUExNTc5QjgzMjU4NTJC
N0MwMDUyODIzNiAvKiBDb3JlTWVkaWFXcmFwcGVkLmNwcCAqLywKIAkJCQlBMTU3OTlCMzI1ODQ0
MzMxMDA1MjgyMzYgLyogQ29yZU1lZGlhV3JhcHBlZC5oICovLAotCQkJCUExNTc5OUIwMjU4NDQz
MzEwMDUyODIzNiAvKiBGb3JtYXRSZWFkZXIuY3BwICovLAotCQkJCUExNTc5OUI1MjU4NDQzMzEw
MDUyODIzNiAvKiBGb3JtYXRSZWFkZXIuaCAqLywKLQkJCQlBMTU3OTlBRjI1ODQ0MzMxMDA1Mjgy
MzYgLyogU2FtcGxlQ3Vyc29yLmNwcCAqLywKLQkJCQlBMTU3OTlCNDI1ODQ0MzMxMDA1MjgyMzYg
LyogU2FtcGxlQ3Vyc29yLmggKi8sCi0JCQkJQTE1Nzk5QjEyNTg0NDMzMTAwNTI4MjM2IC8qIFRy
YWNrUmVhZGVyLmNwcCAqLywKLQkJCQlBMTU3OTlBRTI1ODQ0MzMxMDA1MjgyMzYgLyogVHJhY2tS
ZWFkZXIuaCAqLywKKwkJCQlBMTU3OTlCMDI1ODQ0MzMxMDA1MjgyMzYgLyogTWVkaWFGb3JtYXRS
ZWFkZXIuY3BwICovLAorCQkJCUExNTc5OUI1MjU4NDQzMzEwMDUyODIzNiAvKiBNZWRpYUZvcm1h
dFJlYWRlci5oICovLAorCQkJCUExQjREQ0UwMjVBNzkyMTEwMDdEMTc4QyAvKiBNZWRpYVNhbXBs
ZUJ5dGVSYW5nZS5jcHAgKi8sCisJCQkJQTFCNERDREYyNUE3OTIxMTAwN0QxNzhDIC8qIE1lZGlh
U2FtcGxlQnl0ZVJhbmdlLmggKi8sCisJCQkJQTE1Nzk5QUYyNTg0NDMzMTAwNTI4MjM2IC8qIE1l
ZGlhU2FtcGxlQ3Vyc29yLmNwcCAqLywKKwkJCQlBMTU3OTlCNDI1ODQ0MzMxMDA1MjgyMzYgLyog
TWVkaWFTYW1wbGVDdXJzb3IuaCAqLywKKwkJCQlBMTU3OTlCMTI1ODQ0MzMxMDA1MjgyMzYgLyog
TWVkaWFUcmFja1JlYWRlci5jcHAgKi8sCisJCQkJQTE1Nzk5QUUyNTg0NDMzMTAwNTI4MjM2IC8q
IE1lZGlhVHJhY2tSZWFkZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gTWVkaWFGb3JtYXRSZWFk
ZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTAyOTcsOCArMTAzMDIsOCBAQAog
CQkJCTdDRDVFQkJBMTc0NkE4M0UwMDBDMUM0NSAvKiBXS0Jhc2VNYWMuaCAqLywKIAkJCQlCQzQw
NzYyMTEyNEZGMDQwMDA2OEYyMEEgLyogV0tDZXJ0aWZpY2F0ZUluZm9NYWMuaCAqLywKIAkJCQlC
QzQwNzYyMjEyNEZGMDQwMDA2OEYyMEEgLyogV0tDZXJ0aWZpY2F0ZUluZm9NYWMubW0gKi8sCi0J
CQkJQTE1NzlCMjUyNTg0OTBFNTAwNTI4MjM2IC8qIFdLRm9ybWF0UmVhZGVyLmNwcCAqLywKLQkJ
CQlBMTU3OUIyNjI1ODQ5MEU1MDA1MjgyMzYgLyogV0tGb3JtYXRSZWFkZXIuaCAqLywKKwkJCQlB
MTU3OUIyNTI1ODQ5MEU1MDA1MjgyMzYgLyogV0tNZWRpYUZvcm1hdFJlYWRlci5jcHAgKi8sCisJ
CQkJQTE1NzlCMjYyNTg0OTBFNTAwNTI4MjM2IC8qIFdLTWVkaWFGb3JtYXRSZWFkZXIuaCAqLywK
IAkJCQk3Q0Q1RUJCNzE3NDZBMTVCMDAwQzFDNDUgLyogV0tPYmpDVHlwZVdyYXBwZXJSZWYuaCAq
LywKIAkJCQk3Q0Q1RUJCNjE3NDZBMTVCMDAwQzFDNDUgLyogV0tPYmpDVHlwZVdyYXBwZXJSZWYu
bW0gKi8sCiAJCQkJQkM0MDc2MjMxMjRGRjA0MDAwNjhGMjBBIC8qIFdLVVJMUmVxdWVzdE5TLmgg
Ki8sCkBAIC0xMTU3NSw3ICsxMTU4MCw2IEBACiAJCQkJQzU5QzRBNTkxOEI4MTE3NDAwN0JEQ0I2
IC8qIEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTgx
RDhEMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJE
OEFCNEEyNTgyMEU1MzAwNTM4NkY4IC8qIEZvbnRSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAot
CQkJCUExNTc5OUJFMjU4NDQzMzIwMDUyODIzNiAvKiBGb3JtYXRSZWFkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBMTRGOEUyMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9EYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUUwMEQ2MTE4MzE3OTIxMDAwODdERDcgLyogRnJhbWVMb2FkU3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTIxRTg0MjQxMDIwOEQwMDQ4NkY5QiAvKiBGcmFt
ZVRyZWVOb2RlRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTY1OSw5ICsxMTY2MywxMyBAQAog
CQkJCTFBNkQ4NkMyMURGNzUyNjUwMDc3NDVFOCAvKiBNYWNoTWVzc2FnZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNDNTZGNzkxMTU5OTU3RDAwMUNDQUY5IC8qIE1hY2hQb3J0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTI0QjVGMzExRjUzMUU4MDBDMzgyNjkgLyogTWFjaFV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQTE1Nzk5QkUyNTg0NDMzMjAwNTI4MjM2IC8qIE1lZGlhRm9ybWF0
UmVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQyNTg5QTI1NUI1MzVBMDA1OUVFREQgLyog
TWVkaWFQZXJtaXNzaW9uVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0UxOUVGQzIz
RDQwMUYxMDA5NEZGQjQgLyogTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA3RTE5RUZEMjNENDAxRjEwMDk0RkZCNCAvKiBNZWRpYVBsYXllclBy
aXZhdGVSZW1vdGVNZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUExQjREQ0Ux
MjVBNzkyM0MwMDdEMTc4QyAvKiBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTE1Nzk5QkQyNTg0NDMzMjAwNTI4MjM2IC8qIE1lZGlhU2FtcGxlQ3Vyc29yLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMTU3OTlCNzI1ODQ0MzMyMDA1MjgyMzYgLyogTWVkaWFUcmFja1Jl
YWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE5MzNERUYxOTY1RUIzMTAwOEFDM0VBIC8qIE1l
bnVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCNDc5MDhEMjUzMTREODMwMEVDMTFB
QiAvKiBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
QzRDODI5MTZCODc2QTkwMDY5RENDRCAvKiBNZXNzYWdlRmxhZ3MuaCBpbiBIZWFkZXJzICovLApA
QCAtMTE4NzIsNyArMTE4ODAsNiBAQAogCQkJCTBFOTdENzREMjAwRTkwMDQwMEJGNjY0MyAvKiBT
YWZlQnJvd3NpbmdTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQTk4NTRBMjEwQkVCNjQwMDU3
RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzJEMDIx
NzEyQUM0MUNCMDBFNzMyQTMgLyogU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUExNTc5OUJEMjU4NDQzMzIwMDUyODIzNiAvKiBTYW1wbGVDdXJzb3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBQUI0QThEMTI5NkYwQTIwMDIzOTUyRiAvKiBTYW5kYm94RXh0
ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUU1NTJDNTE2QUUwNjVGMDA0RUQ2NTMgLyog
U2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRE
NTREMDQyMUYxRDcyRDAwN0UzQzM2IC8qIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVS
ZW1vdGVJT1MuaCBpbiBIZWFkZXJzICovLApAQCAtMTE5MzYsNyArMTE5NDMsNiBAQAogCQkJCTFB
QUYyNjM5MTQ2ODdDMzkwMDRBMUU4QSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGMDVEODcxNDY4ODM0ODAwOEIxRTgxIC8qIFRpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJGODMzNjg2
MUZBMTM5REYwMEM2RTA4MCAvKiBUb3VjaEJhck1lbnVEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlBMTU3OTlCNzI1ODQ0MzMyMDA1MjgyMzYgLyogVHJhY2tSZWFkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ2QkVCNkUzMjJGQkIyMUEwMDI2OTg2NyAvKiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RUIyRTNBMjFFMTk4M0UwMEI4OUNERiAv
KiBVMmZBdXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZFNDM2NjE4QjZDMDgx
MDA5QzdBNDggLyogVUlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMjM1Niw3ICsxMjM2
Miw2IEBACiAJCQkJNTE0ODlDQzMyMzcwREJGQTAwNDRFNjhBIC8qIFdLRmluZFJlc3VsdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE0ODlDQzcyMzcyMzc4MDAwNDRFNjhBIC8qIFdLRmluZFJlc3Vs
dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTE2QjZDRjIwMTdCN0FEMDA4OTk2RDYg
LyogV0tGb2N1c2VkRm9ybUNvbnRyb2xWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMTU3OUIy
ODI1ODQ5MEU1MDA1MjgyMzYgLyogV0tGb3JtYXRSZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU1Q0IwN0RDMjBFMTY3OEYwMDIyQzE4MyAvKiBXS0Zvcm1Db2xvckNvbnRyb2wuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU1NDhFQkQxMjEwMTVGMEUwMEJFM0MzMiAvKiBXS0Zvcm1Db2xvclBpY2tl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU0MjU2QjcxOEJFQzE4QzAwREU0MTc5IC8qIFdLRm9y
bVBlcmlwaGVyYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMTI0MDgsNiArMTI0MTMsNyBAQAogCQkJ
CTUxQTlFMTBCMTMxNUNEMTgwMDlFNzAzMSAvKiBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTJENzkwQTlGMUFENzE2NDkwMEFCOTBCMyAvKiBXS0xheW91dE1v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDRTkxMjE0MjI5M0MyODAwMDVCRUM3OCAvKiBXS01h
aW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUExNTc5QjI4MjU4NDkwRTUwMDUyODIzNiAvKiBXS01l
ZGlhRm9ybWF0UmVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTkxN0RBNzI1MkQ2NDlFMDA1
MDMxM0YgLyogV0tNZWRpYVBsYXliYWNrU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQw
RUU2MUJGNjc3RTMwMEJBODFCRSAvKiBXS01lbnVJdGVtSWRlbnRpZmllcnNQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1Q0FCREM4NjIyQzQwRkRFMDAxRURFOEUgLyogV0tNZXNzYWdlTGlz
dGVuZXIuaCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>