<?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>226197</bug_id>
          
          <creation_ts>2021-05-24 16:19:24 -0700</creation_ts>
          <short_desc>[PlayStation] Implement FileSystem without std::filesystem</short_desc>
          <delta_ts>2021-05-25 10:35:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</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="Don Olmstead">don.olmstead</reporter>
          <assigned_to name="Don Olmstead">don.olmstead</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>chris.reid</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1763311</commentid>
    <comment_count>0</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2021-05-24 16:19:24 -0700</bug_when>
    <thetext>The PlayStation 4 doesn&apos;t have std::filesystem support currently so bring back the POSIX implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763317</commentid>
    <comment_count>1</comment_count>
      <attachid>429588</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2021-05-24 16:32:15 -0700</bug_when>
    <thetext>Created attachment 429588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763319</commentid>
    <comment_count>2</comment_count>
      <attachid>429589</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2021-05-24 16:38:01 -0700</bug_when>
    <thetext>Created attachment 429589
Patch

Make style checker happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763326</commentid>
    <comment_count>3</comment_count>
      <attachid>429588</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2021-05-24 16:52:34 -0700</bug_when>
    <thetext>Comment on attachment 429588
Patch

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

Just have an informal comment

&gt; Source/WTF/wtf/playstation/FileSystemPlayStation.cpp:38
&gt; +#include &lt;fnmatch.h&gt;

fnmatch.h looks like it isn&apos;t needed now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763329</commentid>
    <comment_count>4</comment_count>
      <attachid>429589</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-24 16:54:13 -0700</bug_when>
    <thetext>Comment on attachment 429589
Patch

r=me if the bots are happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763522</commentid>
    <comment_count>5</comment_count>
      <attachid>429654</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2021-05-25 08:37:09 -0700</bug_when>
    <thetext>Created attachment 429654
Patch

Added implementation for isHidden and got rid of unused includes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763567</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-25 10:34:11 -0700</bug_when>
    <thetext>Committed r278027 (238124@main): &lt;https://commits.webkit.org/238124@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429654.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763569</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-25 10:35:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/78464748&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429588</attachid>
            <date>2021-05-24 16:32:15 -0700</date>
            <delta_ts>2021-05-24 16:38:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226197.diff</filename>
            <type>text/plain</type>
            <size>19875</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlYTg1Yzg2MDczMDYuLjE3
NjFmNmY1ZTUyYiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDIxLTA1LTI0ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5j
b20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9uXSBJbXBsZW1lbnQgRmlsZVN5c3RlbSB3aXRob3V0
IHN0ZDo6ZmlsZXN5c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRXhwb3NlIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrIGZvciA8ZmlsZXN5c3RlbT4g
c3VwcG9ydCBhcyBIQVZFX1NURF9GSUxFU1lTVEVNLgorCisgICAgICAgICogU291cmNlL2NtYWtl
L09wdGlvbnNDb21tb24uY21ha2U6CisKIDIwMjEtMDUtMTggIFlvc2hpYWtpIEppdHN1a2F3YSAg
PHlvc2hpYWtpLmppdHN1a2F3YUBzb255LmNvbT4KIAogICAgICAgICBbUGxheVN0YXRpb25dIEZp
eCBQbGF5U3RhdGlvbiBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDkwNDYxMTUwMDk0NC4uZTQ4ZjBjMDAxODgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUzIEBACisyMDIxLTA1LTI0ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRA
c29ueS5jb20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9uXSBJbXBsZW1lbnQgRmlsZVN5c3RlbSB3
aXRob3V0IHN0ZDo6ZmlsZXN5c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI2MTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhlIFBsYXlTdGF0aW9uIDQgZG9lc24ndCBoYXZlIHN1cHBvcnQgaW4g
aXRzIFNESyBmb3Igc3RkOjpmaWxlc3lzdGVtIHNvIGJhY2twb3J0IHRoZQorICAgICAgICBmdW5j
dGlvbnMgamV0dGlzb25lZCBmcm9tIEZpbGVTeXN0ZW1QT1NJWCBhbmQgYWRkIHRoZW0gdG8gYSBG
aWxlU3lzdGVtUGxheVN0YXRpb24uY3BwLgorICAgICAgICBUaGUgb3JkZXJpbmcgbWF0Y2hlcyB0
aGUgY29udGVudHMgb2YgRmlsZVN5c3RlbS5jcHAuCisKKyAgICAgICAgTW9zdCBvZiB0aGUgZnVu
Y3Rpb25zIHBvcnRlZCB0byBzdGQ6OmZpbGVzeXN0ZW0gd2VyZSBqdXN0IG1vdmVkIG92ZXIgYXMg
aXMgZnJvbSB0aGUgY29tbWl0CisgICAgICAgIHByaW9yIHRvIHIyNzY4NzkuIE1pbm9yIGNoYW5n
ZXMgdG8gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgbWFkZSB3aGVuIHJlcXVpcmVkLgorCisgICAg
ICAgIFRoZSBmaWxlVHlwZVBvdGVudGlhbGx5Rm9sbG93aW5nU3ltTGlua3MgZnVuY3Rpb24gd2Fz
IGNyZWF0ZWQgZnJvbSB0aGUgcHJldmlvdXMgYmVoYXZpb3IKKyAgICAgICAgb2YgZmlsZU1ldGFk
YXRhVXNpbmdGdW5jdGlvbiBhbmQgdG9GaWxlTWV0YXRhVHlwZS4KKworICAgICAgICBUaGUgaGFy
ZExpbmtDb3VudCB3YXMgY3JlYXRlZCBmcm9tIGxvb2tpbmcgYXQgdGhlIGJlaGF2aW9yIGhhcmRM
aW5rQ291bnQgcmVwbGFjZWQgaW4KKyAgICAgICAgcjI3NzQ0Ni4KKworICAgICAgICAqIHd0Zi9G
aWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1IYXZlLmg6CisgICAgICAgICog
d3RmL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2U6CisgICAgICAgICogd3RmL1N0ZEZpbGVzeXN0
ZW0uaDoKKyAgICAgICAgKiB3dGYvcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0aW9uLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlVHlwZVBvdGVudGlh
bGx5Rm9sbG93aW5nU3ltTGlua3MpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6Zmls
ZUV4aXN0cyk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVGaWxlKToKKyAg
ICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KToKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1vdmVGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5
c3RlbUltcGw6OmZpbGVTaXplKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1ha2VB
bGxEaXJlY3Rvcmllcyk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjp2b2x1bWVGcmVl
U3BhY2UpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6Y3JlYXRlU3ltYm9saWNMaW5r
KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmhhcmRMaW5rKToKKyAgICAgICAgKFdU
Rjo6RmlsZVN5c3RlbUltcGw6OmhhcmRMaW5rT3JDb3B5RmlsZSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpoYXJkTGlua0NvdW50KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6OmZpbGVNb2RpZmljYXRpb25UaW1lKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
OnVwZGF0ZUZpbGVNb2RpZmljYXRpb25UaW1lKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6OmlzSGlkZGVuRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlVHlw
ZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlVHlwZUZvbGxvd2luZ1N5bWxp
bmtzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OnBhdGhGaWxlTmFtZSk6CisgICAg
ICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpwYXJlbnRQYXRoKToKKyAgICAgICAgKFdURjo6Rmls
ZVN5c3RlbUltcGw6OnJlYWxQYXRoKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudCk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Omxpc3REaXJlY3RvcnkpOgorCiAyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZW1vdmUgU3RyaW5nQnVpbGRlcjo6YXBwZW5kTGl0ZXJhbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9G
aWxlU3lzdGVtLmNwcAppbmRleCBjM2YxNzBjYzI4YWIuLjI0NzBlNDg1OWZmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRmls
ZVN5c3RlbS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhp
Y2FsbHlSYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZEZpbGVzeXN0ZW0uaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCkBAIC00NSwxMCArNDQsMTYgQEAKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CiAjZW5kaWYKIAor
I2lmIEhBVkUoU1REX0ZJTEVTWVNURU0pIHx8IEhBVkUoU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lT
VEVNKQorI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKKyNpZiBIQVZFKFNURF9GSUxF
U1lTVEVNKSB8fCBIQVZFKFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTSkKKwogc3RhdGljIHN0
ZDo6ZmlsZXN5c3RlbTo6cGF0aCB0b1N0ZEZpbGVTeXN0ZW1QYXRoKFN0cmluZ1ZpZXcgcGF0aCkK
IHsKICAgICByZXR1cm4gc3RkOjpmaWxlc3lzdGVtOjp1OHBhdGgocGF0aC51dGY4KCkuZGF0YSgp
KTsKQEAgLTU5LDYgKzY0LDggQEAgc3RhdGljIFN0cmluZyBmcm9tU3RkRmlsZVN5c3RlbVBhdGgo
Y29uc3Qgc3RkOjpmaWxlc3lzdGVtOjpwYXRoJiBwYXRoKQogICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KHBhdGgudThzdHJpbmcoKS5jX3N0cigpKTsKIH0KIAorI2VuZGlmIC8vIEhBVkUoU1RE
X0ZJTEVTWVNURU0pIHx8IEhBVkUoU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNKQorCiAvLyBU
aGUgZm9sbG93aW5nIGxvd2VyLUFTQ0lJIGNoYXJhY3RlcnMgbmVlZCBlc2NhcGluZyB0byBiZSB1
c2VkIGluIGEgZmlsZW5hbWUKIC8vIGFjcm9zcyBhbGwgc3lzdGVtcywgaW5jbHVkaW5nIFdpbmRv
d3M6CiAvLyAgICAgLSBVbnByaW50YWJsZSBBU0NJSSAoMDAtMUYpCkBAIC0xMTUsNiArMTIyLDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZEVzY2FwZVVDaGFyKFVDaGFyIGNoYXJhY3Rlciwg
VUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIsIFUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBI
QVZFKFNURF9GSUxFU1lTVEVNKSB8fCBIQVZFKFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTSkK
KwogdGVtcGxhdGU8dHlwZW5hbWUgQ2xvY2tUeXBlLCB0eXBlbmFtZSA9IHZvaWQ+IHN0cnVjdCBo
YXNfdG9fdGltZV90IDogc3RkOjpmYWxzZV90eXBlIHsgfTsKIHRlbXBsYXRlPHR5cGVuYW1lIENs
b2NrVHlwZT4gc3RydWN0IGhhc190b190aW1lX3Q8Q2xvY2tUeXBlLCBzdGQ6OnZvaWRfdDwKICAg
ICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHN0ZDo6dGltZV90LCBkZWNsdHlwZShD
bG9ja1R5cGU6OnRvX3RpbWVfdChzdGQ6OmZpbGVzeXN0ZW06OmZpbGVfdGltZV90eXBlKCkpKT4+
CkBAIC0xMzgsNiArMTQ3LDggQEAgc3RhdGljIFdhbGxUaW1lIHRvV2FsbFRpbWUoc3RkOjpmaWxl
c3lzdGVtOjpmaWxlX3RpbWVfdHlwZSBmaWxlVGltZSkKICAgICByZXR1cm4gV2FsbFRpbWU6OmZy
b21SYXdTZWNvbmRzKHRvVGltZVQoZmlsZVRpbWUpKTsKIH0KIAorI2VuZGlmIC8vIEhBVkUoU1RE
X0ZJTEVTWVNURU0pIHx8IEhBVkUoU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNKQorCiBTdHJp
bmcgZW5jb2RlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dFN0cmluZykKIHsKICAgICB1
bnNpZ25lZCBsZW5ndGggPSBpbnB1dFN0cmluZy5sZW5ndGgoKTsKQEAgLTUwOSw2ICs1MjAsOCBA
QCBPcHRpb25hbDxTYWx0PiByZWFkT3JNYWtlU2FsdChjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAg
cmV0dXJuIHNhbHQ7CiB9CiAKKyNpZiBIQVZFKFNURF9GSUxFU1lTVEVNKSB8fCBIQVZFKFNURF9F
WFBFUklNRU5UQUxfRklMRVNZU1RFTSkKKwogYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYg
cGF0aCkKIHsKICAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CkBAIC03NDEsNSArNzU0LDcgQEAgVmVj
dG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJu
IGZpbGVOYW1lczsKIH0KIAorI2VuZGlmIC8vIEhBVkUoU1REX0ZJTEVTWVNURU0pIHx8IEhBVkUo
U1REX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNKQorCiB9IC8vIG5hbWVzcGFjZSBGaWxlU3lzdGVt
SW1wbAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybUhhdmUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCmluZGV4IDAyYTA3ZjEz
ZTBkZi4uMjMxM2RiZmNiMzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhh
dmUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaApAQCAtOTMsNiArOTMsMjIg
QEAKICNkZWZpbmUgSEFWRV9BQ0NFU1NJQklMSVRZIDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQo
SEFWRV9TVERfRklMRVNZU1RFTSkKKyNpZiBfX2hhc19pbmNsdWRlKDxmaWxlc3lzdGVtPikKKyNk
ZWZpbmUgSEFWRV9TVERfRklMRVNZU1RFTSAxCisjZWxzZQorI2RlZmluZSBIQVZFX1NURF9GSUxF
U1lTVEVNIDAKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX1NURF9FWFBFUklN
RU5UQUxfRklMRVNZU1RFTSkKKyNpZiBfX2hhc19pbmNsdWRlKDxleHBlcmltZW50YWwvZmlsZXN5
c3RlbT4pCisjZGVmaW5lIFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTSAxCisjZWxzZQorI2Rl
ZmluZSBTVERfRVhQRVJJTUVOVEFMX0ZJTEVTWVNURU0gMAorI2VuZGlmCisjZW5kaWYKKwogLyog
RklYTUU6IFJlbW92ZSBhZnRlciBDTWFrZSBidWlsZCBlbmFibGVkIG9uIERhcndpbiAqLwogI2lm
IE9TKERBUldJTikKICNkZWZpbmUgSEFWRV9FUlJOT19IIDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVBsYXlTdGF0aW9uLmNtYWtlCmluZGV4IGY5NTllZTk4ZDRiNi4uZGFmZDY4ZjY2YTI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKQEAgLTQsNiArNCw3IEBAIGxp
c3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgZ2VuZXJpYy9SdW5Mb29wR2VuZXJpYy5jcHAKICAg
ICBnZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCiAKKyAgICBwbGF5c3RhdGlvbi9GaWxlU3lz
dGVtUGxheVN0YXRpb24uY3BwCiAgICAgcGxheXN0YXRpb24vTGFuZ3VhZ2VQbGF5U3RhdGlvbi5j
cHAKICAgICBwbGF5c3RhdGlvbi9VbmlTdGRFeHRyYXNQbGF5U3RhdGlvbi5jcHAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvU3RkRmlsZXN5c3RlbS5oIGIvU291cmNlL1dURi93dGYvU3Rk
RmlsZXN5c3RlbS5oCmluZGV4IDQ3ODEwMzg1Y2VjYy4uYmNjNDY5Yzk0NDIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9TdGRGaWxlc3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93dGYvU3Rk
RmlsZXN5c3RlbS5oCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
ZiBfX2hhc19pbmNsdWRlKDxmaWxlc3lzdGVtPikKKyNpZiBIQVZFKFNURF9GSUxFU1lTVEVNKQog
I2luY2x1ZGUgPGZpbGVzeXN0ZW0+CiAjZWxpZiBIQVZFKFNURF9FWFBFUklNRU5UQUxfRklMRVNZ
U1RFTSkKICNpbmNsdWRlIDxleHBlcmltZW50YWwvZmlsZXN5c3RlbT4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3BsYXlzdGF0aW9uL0ZpbGVTeXN0ZW1QbGF5U3RhdGlvbi5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9wbGF5c3RhdGlvbi9GaWxlU3lzdGVtUGxheVN0YXRpb24uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uM2U4YTI3YjIwOGVmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dURi93dGYvcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0aW9u
LmNwcApAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9G
aWxlU3lzdGVtLmg+CisKKyNpZiAhSEFWRShTVERfRklMRVNZU1RFTSkgJiYgIUhBVkUoU1REX0VY
UEVSSU1FTlRBTF9GSUxFU1lTVEVNKQorCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8
ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGZubWF0Y2guaD4KKyNpbmNs
dWRlIDxsaWJnZW4uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+
CisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCituYW1l
c3BhY2UgRmlsZVN5c3RlbUltcGwgeworCitlbnVtIGNsYXNzIFNob3VsZEZvbGxvd1N5bWJvbGlj
TGlua3MgeyBObywgWWVzIH07CitzdGF0aWMgT3B0aW9uYWw8RmlsZVR5cGU+IGZpbGVUeXBlUG90
ZW50aWFsbHlGb2xsb3dpbmdTeW1MaW5rcyhjb25zdCBTdHJpbmcmIHBhdGgsIFNob3VsZEZvbGxv
d1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKK3sKKyAgICBDU3RyaW5n
IGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYgKCFmc1Jl
cC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBhdXRvIHN0YXRGdW5jID0gc2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
cyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMgPyBzdGF0IDogbHN0YXQ7CisgICAg
c3RydWN0IHN0YXQgZmlsZUluZm87CisgICAgaWYgKHN0YXRGdW5jKGZzUmVwLmRhdGEoKSwgJmZp
bGVJbmZvKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChTX0lTRElS
KGZpbGVJbmZvLnN0X21vZGUpKQorICAgICAgICByZXR1cm4gRmlsZVR5cGU6OkRpcmVjdG9yeTsK
KyAgICBpZiAoU19JU0xOSyhmaWxlSW5mby5zdF9tb2RlKSkKKyAgICAgICAgcmV0dXJuIEZpbGVU
eXBlOjpTeW1ib2xpY0xpbms7CisgICAgcmV0dXJuIEZpbGVUeXBlOjpSZWd1bGFyOworfQorCiti
b29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGlmIChwYXRoLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNS
ZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBhY2Nlc3MoZnNSZXAuZGF0YSgpLCBGX09LKSAhPSAtMTsKK30KKworYm9vbCBkZWxldGVGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0
YSgpWzBdID09ICdcMCcpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGaWxlIGZhaWxlZCB0byBkZWxl
dGUuIEZhaWxlZCB0byBnZXQgZmlsZXN5c3RlbSByZXByZXNlbnRhdGlvbiB0byBjcmVhdGUgQ1N0
cmluZyBmcm9tIGNmU3RyaW5nIG9yIGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRpb24gaXMgYSBudWxs
IHZhbHVlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyB1bmxpbmso
Li4uKSByZXR1cm5zIDAgb24gc3VjY2Vzc2Z1bCBkZWxldGlvbiBvZiB0aGUgcGF0aCBhbmQgbm9u
LXplcm8gaW4gYW55IG90aGVyIGNhc2UgKGluY2x1ZGluZyBpbnZhbGlkIHBlcm1pc3Npb25zIG9y
IG5vbi1leGlzdGVudCBmaWxlKQorICAgIGJvb2wgdW5saW5rZWQgPSAhdW5saW5rKGZzUmVwLmRh
dGEoKSk7CisgICAgaWYgKCF1bmxpbmtlZCAmJiBlcnJubyAhPSBFTk9FTlQpCisgICAgICAgIExP
R19FUlJPUigiRmlsZSBmYWlsZWQgdG8gZGVsZXRlLiBFcnJvciBtZXNzYWdlOiAlcyIsIHN0cmVy
cm9yKGVycm5vKSk7CisKKyAgICByZXR1cm4gdW5saW5rZWQ7Cit9CisKK2Jvb2wgZGVsZXRlRW1w
dHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIENTdHJpbmcgZnNSZXAgPSBm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAoIWZzUmVwLmRhdGEoKSB8
fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gcm1kaXIoLi4uKSByZXR1cm5zIDAgb24gc3VjY2Vzc2Z1bCBkZWxldGlvbiBvZiB0aGUgcGF0
aCBhbmQgbm9uLXplcm8gaW4gYW55IG90aGVyIGNhc2UgKGluY2x1ZGluZyBpbnZhbGlkIHBlcm1p
c3Npb25zIG9yIG5vbi1leGlzdGVudCBmaWxlKQorICAgIHJldHVybiAhcm1kaXIoZnNSZXAuZGF0
YSgpKTsKK30KKworYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0
cmluZyYgbmV3UGF0aCkKK3sKKyAgICBhdXRvIG9sZEZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKG9sZFBhdGgpOworICAgIGlmIChvbGRGaWxlbmFtZS5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBuZXdGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihuZXdQYXRoKTsKKyAgICBpZiAobmV3RmlsZW5hbWUuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiByZW5hbWUob2xkRmlsZW5hbWUuZGF0YSgp
LCBuZXdGaWxlbmFtZS5kYXRhKCkpICE9IC0xOworfQorCitPcHRpb25hbDx1aW50NjRfdD4gZmls
ZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1Jl
cC5kYXRhKClbMF0gPT0gJ1wwJykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IHN0cnVjdCBzdGF0IGZpbGVJbmZvOworCisgICAgaWYgKHN0YXQoZnNSZXAuZGF0YSgpLCAmZmls
ZUluZm8pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIGZpbGVJ
bmZvLnN0X3NpemU7Cit9CisKK2Jvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYg
cGF0aCkKK3sKKyAgICBDU3RyaW5nIGZ1bGxQYXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOworICAgIGlmICghYWNjZXNzKGZ1bGxQYXRoLmRhdGEoKSwgRl9PSykpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgY2hhciogcCA9IGZ1bGxQYXRoLm11dGFibGVEYXRhKCkgKyAx
OworICAgIGludCBsZW5ndGggPSBmdWxsUGF0aC5sZW5ndGgoKTsKKworICAgIGlmIChwW2xlbmd0
aCAtIDFdID09ICcvJykKKyAgICAgICAgcFtsZW5ndGggLSAxXSA9ICdcMCc7CisgICAgZm9yICg7
ICpwOyArK3ApIHsKKyAgICAgICAgaWYgKCpwID09ICcvJykgeworICAgICAgICAgICAgKnAgPSAn
XDAnOworICAgICAgICAgICAgaWYgKGFjY2VzcyhmdWxsUGF0aC5kYXRhKCksIEZfT0spKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1rZGlyKGZ1bGxQYXRoLmRhdGEoKSwgU19JUldYVSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICpwID0gJy8nOworICAgICAgICB9CisgICAgfQorICAgIGlmIChhY2Nlc3MoZnVsbFBhdGguZGF0
YSgpLCBGX09LKSkgeworICAgICAgICBpZiAobWtkaXIoZnVsbFBhdGguZGF0YSgpLCBTX0lSV1hV
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworT3B0aW9uYWw8dWludDY0X3Q+IHZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgc3RydWN0IHN0YXR2ZnMgZmlsZVN5c3RlbVN0YXQ7CisgICAgaWYgKCFzdGF0
dmZzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksICZmaWxlU3lzdGVtU3Rh
dCkpIHsKKyAgICAgICAgcmV0dXJuIGZpbGVTeXN0ZW1TdGF0LmZfYmF2YWlsICogZmlsZVN5c3Rl
bVN0YXQuZl9mcnNpemU7CisgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2Jv
b2wgY3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3Ry
aW5nJiBzeW1ib2xpY0xpbmtQYXRoKQoreworICAgIENTdHJpbmcgdGFyZ2V0UGF0aEZTUmVwID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHRhcmdldFBhdGgpOworICAgIGlmICghdGFyZ2V0UGF0
aEZTUmVwLmRhdGEoKSB8fCB0YXJnZXRQYXRoRlNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIENTdHJpbmcgc3ltYm9saWNMaW5rUGF0aEZTUmVwID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHN5bWJvbGljTGlua1BhdGgpOworICAgIGlmICghc3lt
Ym9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKSB8fCBzeW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgp
WzBdID09ICdcMCcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAhc3ltbGlu
ayh0YXJnZXRQYXRoRlNSZXAuZGF0YSgpLCBzeW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpKTsK
K30KKworYm9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBk
ZXN0aW5hdGlvbikKK3sKKyAgICBpZiAoc291cmNlLmlzRW1wdHkoKSB8fCBkZXN0aW5hdGlvbi5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZnNTb3VyY2UgPSBm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsKKyAgICBpZiAoIWZzU291cmNlLmRhdGEo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBmc0Rlc3RpbmF0aW9uID0gZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uKTsKKyAgICBpZiAoIWZzRGVzdGluYXRp
b24uZGF0YSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIWxpbmsoZnNT
b3VyY2UuZGF0YSgpLCBmc0Rlc3RpbmF0aW9uLmRhdGEoKSk7Cit9CisKK2Jvb2wgaGFyZExpbmtP
ckNvcHlGaWxlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9u
KQoreworICAgIGlmIChoYXJkTGluayhzb3VyY2UsIGRlc3RpbmF0aW9uKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJmb3JtIGEgY29weSBpbnN0
ZWFkLgorICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpIHx8IGRlc3RpbmF0aW9uLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBmc1NvdXJjZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihzb3VyY2UpOworICAgIGlmICghZnNTb3VyY2UuZGF0YSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGZzRGVzdGluYXRpb24gPSBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oZGVzdGluYXRpb24pOworICAgIGlmICghZnNEZXN0aW5hdGlvbi5kYXRhKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaGFuZGxlID0gb3Blbihmc0Rlc3Rp
bmF0aW9uLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKyAgICBp
ZiAoaGFuZGxlID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGFwcGVu
ZFJlc3VsdCA9IGFwcGVuZEZpbGVDb250ZW50c1RvRmlsZUhhbmRsZShzb3VyY2UsIGhhbmRsZSk7
CisgICAgY2xvc2UoaGFuZGxlKTsKKworICAgIC8vIElmIHRoZSBjb3B5IGZhaWxlZCwgZGVsZXRl
IHRoZSB1bnVzYWJsZSBmaWxlLgorICAgIGlmICghYXBwZW5kUmVzdWx0KQorICAgICAgICB1bmxp
bmsoZnNEZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgcmV0dXJuIGFwcGVuZFJlc3VsdDsKK30K
KworT3B0aW9uYWw8dWludDY0X3Q+IGhhcmRMaW5rQ291bnQoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIGF1dG8gbGlua1BhdGggPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Cisg
ICAgc3RydWN0IHN0YXQgc3RhdDsKKyAgICBpZiAoOjpzdGF0KGxpbmtQYXRoLmRhdGEoKSwgJnN0
YXQpIDwgMCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIC8vIExpbmsgY291
bnQgaXMgMiBpbiB0aGUgc2luZ2xlIGNsaWVudCBjYXNlICh0aGUgYmxvYiBmaWxlIGFuZCBhIGxp
bmspLgorICAgIHJldHVybiBzdGF0LnN0X25saW5rIC0gMTsKK30KKworYm9vbCBkZWxldGVOb25F
bXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYXV0byBlbnRyaWVzID0g
bGlzdERpcmVjdG9yeShwYXRoKTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogZW50cmllcykgewor
ICAgICAgICBpZiAoZmlsZVR5cGVQb3RlbnRpYWxseUZvbGxvd2luZ1N5bUxpbmtzKGVudHJ5LCBT
aG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykgPT0gRmlsZVR5cGU6OkRpcmVjdG9yeSkKKyAg
ICAgICAgICAgIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGVudHJ5KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZGVsZXRlRmlsZShlbnRyeSk7CisgICAgfQorICAgIHJldHVybiBkZWxldGVF
bXB0eURpcmVjdG9yeShwYXRoKTsKK30KKworT3B0aW9uYWw8V2FsbFRpbWU+IGZpbGVNb2RpZmlj
YXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBDU3RyaW5nIGZzUmVwID0gZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwg
ZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKKworICAgIGlmIChzdGF0KGZzUmVwLmRhdGEoKSwg
JmZpbGVJbmZvKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBX
YWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZmlsZUluZm8uc3RfbXRpbWUpOworfQorCitib29sIHVw
ZGF0ZUZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBDU3Ry
aW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYgKCFm
c1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFBhc3NpbmcgaW4gbnVsbCBzZXRzIHRoZSBtb2RpZmljYXRpb24gdGlt
ZSB0byBub3cKKyAgICByZXR1cm4gIXV0aW1lcyhmc1JlcC5kYXRhKCksIG51bGxwdHIpOworfQor
Citib29sIGlzSGlkZGVuRmlsZShjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworT3B0aW9uYWw8RmlsZVR5cGU+IGZpbGVUeXBlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sK
KyAgICByZXR1cm4gZmlsZVR5cGVQb3RlbnRpYWxseUZvbGxvd2luZ1N5bUxpbmtzKHBhdGgsIFNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKTsKK30KKworT3B0aW9uYWw8RmlsZVR5cGU+IGZp
bGVUeXBlRm9sbG93aW5nU3ltbGlua3MoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVy
biBmaWxlVHlwZVBvdGVudGlhbGx5Rm9sbG93aW5nU3ltTGlua3MocGF0aCwgU2hvdWxkRm9sbG93
U3ltYm9saWNMaW5rczo6WWVzKTsKK30KKworU3RyaW5nIHBhdGhGaWxlTmFtZShjb25zdCBTdHJp
bmcmIHBhdGgpCit7CisgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKHBhdGgucmV2ZXJzZUZpbmQo
Jy8nKSArIDEpOworfQorCitTdHJpbmcgcGFyZW50UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7
CisgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKwor
ICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXJuYW1l
KGZzUmVwLm11dGFibGVEYXRhKCkpKTsKK30KKworU3RyaW5nIHJlYWxQYXRoKGNvbnN0IFN0cmlu
ZyYgZmlsZVBhdGgpCit7CisgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihmaWxlUGF0aCk7CisgICAgY2hhciByZXNvbHZlZE5hbWVbUEFUSF9NQVhdOworICAgIGNv
bnN0IGNoYXIqIHJlc3VsdCA9IHJlYWxwYXRoKGZzUmVwLmRhdGEoKSwgcmVzb2x2ZWROYW1lKTsK
KyAgICByZXR1cm4gcmVzdWx0ID8gU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQpIDogZmlsZVBhdGg7
Cit9CisKK1N0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKK3sKKyAgICBpZiAocGF0aC5lbmRzV2l0aCgnLycp
KQorICAgICAgICByZXR1cm4gcGF0aCArIGNvbXBvbmVudDsKKyAgICByZXR1cm4gcGF0aCArICIv
IiArIGNvbXBvbmVudDsKK30KKworU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudHMoU3Ry
aW5nVmlldyBwYXRoLCBjb25zdCBWZWN0b3I8U3RyaW5nVmlldz4mIGNvbXBvbmVudHMpCit7Cisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKHBhdGgpOworICAg
IGZvciAoYXV0byYgY29tcG9uZW50IDogY29tcG9uZW50cykKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoJy8nLCBjb21wb25lbnQpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisK
K1ZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAg
IFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7CisgICAgQ1N0cmluZyBjcGF0aCA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBESVIqIGRpciA9IG9wZW5kaXIoY3BhdGguZGF0YSgp
KTsKKyAgICBpZiAoZGlyKSB7CisgICAgICAgIHN0cnVjdCBkaXJlbnQqIGRwOworICAgICAgICB3
aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFt
ZSA9IGRwLT5kX25hbWU7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFz
dHJjbXAobmFtZSwgIi4uIikpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBjaGFyIGZpbGVQYXRoW1BBVEhfTUFYXTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihmaWxlUGF0aCkgLSAxKSA8IHNucHJpbnRmKGZpbGVQYXRoLCBzaXplb2YoZmls
ZVBhdGgpLCAiJXMvJXMiLCBjcGF0aC5kYXRhKCksIG5hbWUpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOyAvLyBidWZmZXIgb3ZlcmZsb3cKKworICAgICAgICAgICAgYXV0byBzdHJpbmcgPSBz
dHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGZpbGVQYXRoKTsKKworICAgICAgICAg
ICAgLy8gU29tZSBmaWxlIHN5c3RlbSByZXByZXNlbnRhdGlvbnMgY2Fubm90IGJlIHJlcHJlc2Vu
dGVkIGFzIGEgVVRGLTE2IHN0cmluZywKKyAgICAgICAgICAgIC8vIHNvIHRoaXMgc3RyaW5nIG1p
Z2h0IGJlIG51bGwuCisgICAgICAgICAgICBpZiAoIXN0cmluZy5pc051bGwoKSkKKyAgICAgICAg
ICAgICAgICBlbnRyaWVzLmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOworICAgICAgICB9CisgICAg
ICAgIGNsb3NlZGlyKGRpcik7CisgICAgfQorICAgIHJldHVybiBlbnRyaWVzOworfQorCit9IC8v
IG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbAorfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyAhSEFWRShTVERfRklMRVNZU1RFTSkgJiYgIUhBVkUoU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lT
VEVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNDb21tb24uY21ha2UgYi9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc0NvbW1vbi5jbWFrZQppbmRleCBkZDRkYTY4MjIyYWQuLmY4MzA4ZTVm
N2RmMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNDb21tb24uY21ha2UKKysrIGIv
U291cmNlL2NtYWtlL09wdGlvbnNDb21tb24uY21ha2UKQEAgLTE2MSw3ICsxNjEsOSBAQCBpZiAo
SEFWRV9JTlQxMjhfVkFMVUUpCiAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEhBVkVfSU5UMTI4
X1QgSU5UMTI4X1ZBTFVFKQogZW5kaWYgKCkKIAotIyBDaGVjayB3aGV0aGVyIGV4cGVyaW1lbnRh
bC9maWxlc3lzdGVtIGlzIHRoZSBmaWxlc3lzdGVtIGltcGwgYXZhaWxhYmxlCi1pZiAoU1REX0VY
UEVSSU1FTlRBTF9GSUxFU1lTVEVNX0lTX0FWQUlMQUJMRSkKLSAgU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoSEFWRV9TVERfRVhQRVJJTUVOVEFMX0ZJTEVTWVNURU0gVFJVRSkKKyMgQ2hlY2sgd2hp
Y2ggZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgaWYgYW55CitpZiAoU1RE
X0ZJTEVTWVNURU1fSVNfQVZBSUxBQkxFKQorICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEhB
VkVfU1REX0ZJTEVTWVNURU0gVFJVRSkKK2Vsc2VpZiAoU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lT
VEVNX0lTX0FWQUlMQUJMRSkKKyAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChIQVZFX1NURF9F
WFBFUklNRU5UQUxfRklMRVNZU1RFTSBUUlVFKQogZW5kaWYgKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429589</attachid>
            <date>2021-05-24 16:38:01 -0700</date>
            <delta_ts>2021-05-25 08:37:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226197.diff</filename>
            <type>text/plain</type>
            <size>19882</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlYTg1Yzg2MDczMDYuLjE3
NjFmNmY1ZTUyYiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDIxLTA1LTI0ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5j
b20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9uXSBJbXBsZW1lbnQgRmlsZVN5c3RlbSB3aXRob3V0
IHN0ZDo6ZmlsZXN5c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRXhwb3NlIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrIGZvciA8ZmlsZXN5c3RlbT4g
c3VwcG9ydCBhcyBIQVZFX1NURF9GSUxFU1lTVEVNLgorCisgICAgICAgICogU291cmNlL2NtYWtl
L09wdGlvbnNDb21tb24uY21ha2U6CisKIDIwMjEtMDUtMTggIFlvc2hpYWtpIEppdHN1a2F3YSAg
PHlvc2hpYWtpLmppdHN1a2F3YUBzb255LmNvbT4KIAogICAgICAgICBbUGxheVN0YXRpb25dIEZp
eCBQbGF5U3RhdGlvbiBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDkwNDYxMTUwMDk0NC4uZTQ4ZjBjMDAxODgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUzIEBACisyMDIxLTA1LTI0ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRA
c29ueS5jb20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9uXSBJbXBsZW1lbnQgRmlsZVN5c3RlbSB3
aXRob3V0IHN0ZDo6ZmlsZXN5c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI2MTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhlIFBsYXlTdGF0aW9uIDQgZG9lc24ndCBoYXZlIHN1cHBvcnQgaW4g
aXRzIFNESyBmb3Igc3RkOjpmaWxlc3lzdGVtIHNvIGJhY2twb3J0IHRoZQorICAgICAgICBmdW5j
dGlvbnMgamV0dGlzb25lZCBmcm9tIEZpbGVTeXN0ZW1QT1NJWCBhbmQgYWRkIHRoZW0gdG8gYSBG
aWxlU3lzdGVtUGxheVN0YXRpb24uY3BwLgorICAgICAgICBUaGUgb3JkZXJpbmcgbWF0Y2hlcyB0
aGUgY29udGVudHMgb2YgRmlsZVN5c3RlbS5jcHAuCisKKyAgICAgICAgTW9zdCBvZiB0aGUgZnVu
Y3Rpb25zIHBvcnRlZCB0byBzdGQ6OmZpbGVzeXN0ZW0gd2VyZSBqdXN0IG1vdmVkIG92ZXIgYXMg
aXMgZnJvbSB0aGUgY29tbWl0CisgICAgICAgIHByaW9yIHRvIHIyNzY4NzkuIE1pbm9yIGNoYW5n
ZXMgdG8gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgbWFkZSB3aGVuIHJlcXVpcmVkLgorCisgICAg
ICAgIFRoZSBmaWxlVHlwZVBvdGVudGlhbGx5Rm9sbG93aW5nU3ltTGlua3MgZnVuY3Rpb24gd2Fz
IGNyZWF0ZWQgZnJvbSB0aGUgcHJldmlvdXMgYmVoYXZpb3IKKyAgICAgICAgb2YgZmlsZU1ldGFk
YXRhVXNpbmdGdW5jdGlvbiBhbmQgdG9GaWxlTWV0YXRhVHlwZS4KKworICAgICAgICBUaGUgaGFy
ZExpbmtDb3VudCB3YXMgY3JlYXRlZCBmcm9tIGxvb2tpbmcgYXQgdGhlIGJlaGF2aW9yIGhhcmRM
aW5rQ291bnQgcmVwbGFjZWQgaW4KKyAgICAgICAgcjI3NzQ0Ni4KKworICAgICAgICAqIHd0Zi9G
aWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1IYXZlLmg6CisgICAgICAgICog
d3RmL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2U6CisgICAgICAgICogd3RmL1N0ZEZpbGVzeXN0
ZW0uaDoKKyAgICAgICAgKiB3dGYvcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0aW9uLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlVHlwZVBvdGVudGlh
bGx5Rm9sbG93aW5nU3ltTGlua3MpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6Zmls
ZUV4aXN0cyk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVGaWxlKToKKyAg
ICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KToKKyAgICAg
ICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1vdmVGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5
c3RlbUltcGw6OmZpbGVTaXplKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1ha2VB
bGxEaXJlY3Rvcmllcyk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjp2b2x1bWVGcmVl
U3BhY2UpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6Y3JlYXRlU3ltYm9saWNMaW5r
KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmhhcmRMaW5rKToKKyAgICAgICAgKFdU
Rjo6RmlsZVN5c3RlbUltcGw6OmhhcmRMaW5rT3JDb3B5RmlsZSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpoYXJkTGlua0NvdW50KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6OmZpbGVNb2RpZmljYXRpb25UaW1lKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
OnVwZGF0ZUZpbGVNb2RpZmljYXRpb25UaW1lKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6OmlzSGlkZGVuRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlVHlw
ZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlVHlwZUZvbGxvd2luZ1N5bWxp
bmtzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OnBhdGhGaWxlTmFtZSk6CisgICAg
ICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpwYXJlbnRQYXRoKToKKyAgICAgICAgKFdURjo6Rmls
ZVN5c3RlbUltcGw6OnJlYWxQYXRoKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudCk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
Omxpc3REaXJlY3RvcnkpOgorCiAyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZW1vdmUgU3RyaW5nQnVpbGRlcjo6YXBwZW5kTGl0ZXJhbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9G
aWxlU3lzdGVtLmNwcAppbmRleCBjM2YxNzBjYzI4YWIuLjI0NzBlNDg1OWZmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRmls
ZVN5c3RlbS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhp
Y2FsbHlSYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZEZpbGVzeXN0ZW0uaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCkBAIC00NSwxMCArNDQsMTYgQEAKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CiAjZW5kaWYKIAor
I2lmIEhBVkUoU1REX0ZJTEVTWVNURU0pIHx8IEhBVkUoU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lT
VEVNKQorI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKKyNpZiBIQVZFKFNURF9GSUxF
U1lTVEVNKSB8fCBIQVZFKFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTSkKKwogc3RhdGljIHN0
ZDo6ZmlsZXN5c3RlbTo6cGF0aCB0b1N0ZEZpbGVTeXN0ZW1QYXRoKFN0cmluZ1ZpZXcgcGF0aCkK
IHsKICAgICByZXR1cm4gc3RkOjpmaWxlc3lzdGVtOjp1OHBhdGgocGF0aC51dGY4KCkuZGF0YSgp
KTsKQEAgLTU5LDYgKzY0LDggQEAgc3RhdGljIFN0cmluZyBmcm9tU3RkRmlsZVN5c3RlbVBhdGgo
Y29uc3Qgc3RkOjpmaWxlc3lzdGVtOjpwYXRoJiBwYXRoKQogICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KHBhdGgudThzdHJpbmcoKS5jX3N0cigpKTsKIH0KIAorI2VuZGlmIC8vIEhBVkUoU1RE
X0ZJTEVTWVNURU0pIHx8IEhBVkUoU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNKQorCiAvLyBU
aGUgZm9sbG93aW5nIGxvd2VyLUFTQ0lJIGNoYXJhY3RlcnMgbmVlZCBlc2NhcGluZyB0byBiZSB1
c2VkIGluIGEgZmlsZW5hbWUKIC8vIGFjcm9zcyBhbGwgc3lzdGVtcywgaW5jbHVkaW5nIFdpbmRv
d3M6CiAvLyAgICAgLSBVbnByaW50YWJsZSBBU0NJSSAoMDAtMUYpCkBAIC0xMTUsNiArMTIyLDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZEVzY2FwZVVDaGFyKFVDaGFyIGNoYXJhY3Rlciwg
VUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIsIFUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBI
QVZFKFNURF9GSUxFU1lTVEVNKSB8fCBIQVZFKFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTSkK
KwogdGVtcGxhdGU8dHlwZW5hbWUgQ2xvY2tUeXBlLCB0eXBlbmFtZSA9IHZvaWQ+IHN0cnVjdCBo
YXNfdG9fdGltZV90IDogc3RkOjpmYWxzZV90eXBlIHsgfTsKIHRlbXBsYXRlPHR5cGVuYW1lIENs
b2NrVHlwZT4gc3RydWN0IGhhc190b190aW1lX3Q8Q2xvY2tUeXBlLCBzdGQ6OnZvaWRfdDwKICAg
ICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHN0ZDo6dGltZV90LCBkZWNsdHlwZShD
bG9ja1R5cGU6OnRvX3RpbWVfdChzdGQ6OmZpbGVzeXN0ZW06OmZpbGVfdGltZV90eXBlKCkpKT4+
CkBAIC0xMzgsNiArMTQ3LDggQEAgc3RhdGljIFdhbGxUaW1lIHRvV2FsbFRpbWUoc3RkOjpmaWxl
c3lzdGVtOjpmaWxlX3RpbWVfdHlwZSBmaWxlVGltZSkKICAgICByZXR1cm4gV2FsbFRpbWU6OmZy
b21SYXdTZWNvbmRzKHRvVGltZVQoZmlsZVRpbWUpKTsKIH0KIAorI2VuZGlmIC8vIEhBVkUoU1RE
X0ZJTEVTWVNURU0pIHx8IEhBVkUoU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNKQorCiBTdHJp
bmcgZW5jb2RlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dFN0cmluZykKIHsKICAgICB1
bnNpZ25lZCBsZW5ndGggPSBpbnB1dFN0cmluZy5sZW5ndGgoKTsKQEAgLTUwOSw2ICs1MjAsOCBA
QCBPcHRpb25hbDxTYWx0PiByZWFkT3JNYWtlU2FsdChjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAg
cmV0dXJuIHNhbHQ7CiB9CiAKKyNpZiBIQVZFKFNURF9GSUxFU1lTVEVNKSB8fCBIQVZFKFNURF9F
WFBFUklNRU5UQUxfRklMRVNZU1RFTSkKKwogYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYg
cGF0aCkKIHsKICAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CkBAIC03NDEsNSArNzU0LDcgQEAgVmVj
dG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJu
IGZpbGVOYW1lczsKIH0KIAorI2VuZGlmIC8vIEhBVkUoU1REX0ZJTEVTWVNURU0pIHx8IEhBVkUo
U1REX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNKQorCiB9IC8vIG5hbWVzcGFjZSBGaWxlU3lzdGVt
SW1wbAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybUhhdmUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCmluZGV4IDAyYTA3ZjEz
ZTBkZi4uMjMxM2RiZmNiMzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhh
dmUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaApAQCAtOTMsNiArOTMsMjIg
QEAKICNkZWZpbmUgSEFWRV9BQ0NFU1NJQklMSVRZIDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQo
SEFWRV9TVERfRklMRVNZU1RFTSkKKyNpZiBfX2hhc19pbmNsdWRlKDxmaWxlc3lzdGVtPikKKyNk
ZWZpbmUgSEFWRV9TVERfRklMRVNZU1RFTSAxCisjZWxzZQorI2RlZmluZSBIQVZFX1NURF9GSUxF
U1lTVEVNIDAKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX1NURF9FWFBFUklN
RU5UQUxfRklMRVNZU1RFTSkKKyNpZiBfX2hhc19pbmNsdWRlKDxleHBlcmltZW50YWwvZmlsZXN5
c3RlbT4pCisjZGVmaW5lIFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTSAxCisjZWxzZQorI2Rl
ZmluZSBTVERfRVhQRVJJTUVOVEFMX0ZJTEVTWVNURU0gMAorI2VuZGlmCisjZW5kaWYKKwogLyog
RklYTUU6IFJlbW92ZSBhZnRlciBDTWFrZSBidWlsZCBlbmFibGVkIG9uIERhcndpbiAqLwogI2lm
IE9TKERBUldJTikKICNkZWZpbmUgSEFWRV9FUlJOT19IIDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVBsYXlTdGF0aW9uLmNtYWtlCmluZGV4IGY5NTllZTk4ZDRiNi4uZGFmZDY4ZjY2YTI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKQEAgLTQsNiArNCw3IEBAIGxp
c3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgZ2VuZXJpYy9SdW5Mb29wR2VuZXJpYy5jcHAKICAg
ICBnZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCiAKKyAgICBwbGF5c3RhdGlvbi9GaWxlU3lz
dGVtUGxheVN0YXRpb24uY3BwCiAgICAgcGxheXN0YXRpb24vTGFuZ3VhZ2VQbGF5U3RhdGlvbi5j
cHAKICAgICBwbGF5c3RhdGlvbi9VbmlTdGRFeHRyYXNQbGF5U3RhdGlvbi5jcHAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvU3RkRmlsZXN5c3RlbS5oIGIvU291cmNlL1dURi93dGYvU3Rk
RmlsZXN5c3RlbS5oCmluZGV4IDQ3ODEwMzg1Y2VjYy4uYmRjZGY0NDZkZmQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9TdGRGaWxlc3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93dGYvU3Rk
RmlsZXN5c3RlbS5oCkBAIC0yMyw3ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
ZiBfX2hhc19pbmNsdWRlKDxmaWxlc3lzdGVtPikKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShT
VERfRklMRVNZU1RFTSkKICNpbmNsdWRlIDxmaWxlc3lzdGVtPgogI2VsaWYgSEFWRShTVERfRVhQ
RVJJTUVOVEFMX0ZJTEVTWVNURU0pCiAjaW5jbHVkZSA8ZXhwZXJpbWVudGFsL2ZpbGVzeXN0ZW0+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wbGF5c3RhdGlvbi9GaWxlU3lzdGVtUGxheVN0
YXRpb24uY3BwIGIvU291cmNlL1dURi93dGYvcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU3ZTJlYmRm
YjM5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3BsYXlzdGF0aW9uL0ZpbGVT
eXN0ZW1QbGF5U3RhdGlvbi5jcHAKQEAgLTAsMCArMSwzNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorCisjaWYgIUhBVkUoU1REX0ZJTEVTWVNURU0p
ICYmICFIQVZFKFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTSkKKworI2luY2x1ZGUgPGRpcmVu
dC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxm
bm1hdGNoLmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjaW5jbHVkZSA8c3lz
L3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsIHsKKworZW51bSBjbGFzcyBTaG91
bGRGb2xsb3dTeW1ib2xpY0xpbmtzIHsgTm8sIFllcyB9Oworc3RhdGljIE9wdGlvbmFsPEZpbGVU
eXBlPiBmaWxlVHlwZVBvdGVudGlhbGx5Rm9sbG93aW5nU3ltTGlua3MoY29uc3QgU3RyaW5nJiBw
YXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzIHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mp
Cit7CisgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
KworICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBzdGF0RnVuYyA9IHNob3VsZEZv
bGxvd1N5bWJvbGljTGlua3MgPT0gU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzID8gc3Rh
dCA6IGxzdGF0OworICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgIGlmIChzdGF0RnVuYyhm
c1JlcC5kYXRhKCksICZmaWxlSW5mbykpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBpZiAoU19JU0RJUihmaWxlSW5mby5zdF9tb2RlKSkKKyAgICAgICAgcmV0dXJuIEZpbGVU
eXBlOjpEaXJlY3Rvcnk7CisgICAgaWYgKFNfSVNMTksoZmlsZUluZm8uc3RfbW9kZSkpCisgICAg
ICAgIHJldHVybiBGaWxlVHlwZTo6U3ltYm9saWNMaW5rOworICAgIHJldHVybiBGaWxlVHlwZTo6
UmVndWxhcjsKK30KKworYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICBpZiAocGF0aC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1N0cmlu
ZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZnNS
ZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gYWNjZXNzKGZzUmVwLmRhdGEoKSwgRl9PSykgIT0gLTE7Cit9CisK
K2Jvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgQ1N0cmluZyBmc1Jl
cCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZnNSZXAuZGF0
YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKSB7CisgICAgICAgIExPR19FUlJPUigiRmls
ZSBmYWlsZWQgdG8gZGVsZXRlLiBGYWlsZWQgdG8gZ2V0IGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRp
b24gdG8gY3JlYXRlIENTdHJpbmcgZnJvbSBjZlN0cmluZyBvciBmaWxlc3lzdGVtIHJlcHJlc2Vu
dGF0aW9uIGlzIGEgbnVsbCB2YWx1ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gdW5saW5rKC4uLikgcmV0dXJucyAwIG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24gb2Yg
dGhlIHBhdGggYW5kIG5vbi16ZXJvIGluIGFueSBvdGhlciBjYXNlIChpbmNsdWRpbmcgaW52YWxp
ZCBwZXJtaXNzaW9ucyBvciBub24tZXhpc3RlbnQgZmlsZSkKKyAgICBib29sIHVubGlua2VkID0g
IXVubGluayhmc1JlcC5kYXRhKCkpOworICAgIGlmICghdW5saW5rZWQgJiYgZXJybm8gIT0gRU5P
RU5UKQorICAgICAgICBMT0dfRVJST1IoIkZpbGUgZmFpbGVkIHRvIGRlbGV0ZS4gRXJyb3IgbWVz
c2FnZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCisgICAgcmV0dXJuIHVubGlua2VkOworfQor
Citib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBD
U3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYg
KCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIHJtZGlyKC4uLikgcmV0dXJucyAwIG9uIHN1Y2Nlc3NmdWwgZGVs
ZXRpb24gb2YgdGhlIHBhdGggYW5kIG5vbi16ZXJvIGluIGFueSBvdGhlciBjYXNlIChpbmNsdWRp
bmcgaW52YWxpZCBwZXJtaXNzaW9ucyBvciBub24tZXhpc3RlbnQgZmlsZSkKKyAgICByZXR1cm4g
IXJtZGlyKGZzUmVwLmRhdGEoKSk7Cit9CisKK2Jvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBv
bGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCit7CisgICAgYXV0byBvbGRGaWxlbmFtZSA9
IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsKKyAgICBpZiAob2xkRmlsZW5hbWUu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gbmV3RmlsZW5hbWUg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24obmV3UGF0aCk7CisgICAgaWYgKG5ld0ZpbGVuYW1l
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVuYW1lKG9s
ZEZpbGVuYW1lLmRhdGEoKSwgbmV3RmlsZW5hbWUuZGF0YSgpKSAhPSAtMTsKK30KKworT3B0aW9u
YWw8dWludDY0X3Q+IGZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBDU3RyaW5n
IGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYgKCFmc1Jl
cC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKKworICAgIGlmIChzdGF0KGZz
UmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiBmaWxlSW5mby5zdF9zaXplOworfQorCitib29sIG1ha2VBbGxEaXJlY3Rvcmll
cyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgQ1N0cmluZyBmdWxsUGF0aCA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoIWFjY2VzcyhmdWxsUGF0aC5kYXRhKCks
IEZfT0spKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNoYXIqIHAgPSBmdWxsUGF0aC5t
dXRhYmxlRGF0YSgpICsgMTsKKyAgICBpbnQgbGVuZ3RoID0gZnVsbFBhdGgubGVuZ3RoKCk7CisK
KyAgICBpZiAocFtsZW5ndGggLSAxXSA9PSAnLycpCisgICAgICAgIHBbbGVuZ3RoIC0gMV0gPSAn
XDAnOworICAgIGZvciAoOyAqcDsgKytwKSB7CisgICAgICAgIGlmICgqcCA9PSAnLycpIHsKKyAg
ICAgICAgICAgICpwID0gJ1wwJzsKKyAgICAgICAgICAgIGlmIChhY2Nlc3MoZnVsbFBhdGguZGF0
YSgpLCBGX09LKSkgeworICAgICAgICAgICAgICAgIGlmIChta2RpcihmdWxsUGF0aC5kYXRhKCks
IFNfSVJXWFUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAqcCA9ICcvJzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYWNj
ZXNzKGZ1bGxQYXRoLmRhdGEoKSwgRl9PSykpIHsKKyAgICAgICAgaWYgKG1rZGlyKGZ1bGxQYXRo
LmRhdGEoKSwgU19JUldYVSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK09wdGlvbmFsPHVpbnQ2NF90PiB2b2x1bWVGcmVlU3BhY2Uo
Y29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0cnVjdCBzdGF0dmZzIGZpbGVTeXN0ZW1TdGF0
OworICAgIGlmICghc3RhdHZmcyhmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgp
LCAmZmlsZVN5c3RlbVN0YXQpKQorICAgICAgICByZXR1cm4gZmlsZVN5c3RlbVN0YXQuZl9iYXZh
aWwgKiBmaWxlU3lzdGVtU3RhdC5mX2Zyc2l6ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCitib29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNv
bnN0IFN0cmluZyYgc3ltYm9saWNMaW5rUGF0aCkKK3sKKyAgICBDU3RyaW5nIHRhcmdldFBhdGhG
U1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKTsKKyAgICBpZiAoIXRh
cmdldFBhdGhGU1JlcC5kYXRhKCkgfHwgdGFyZ2V0UGF0aEZTUmVwLmRhdGEoKVswXSA9PSAnXDAn
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU3RyaW5nIHN5bWJvbGljTGlua1BhdGhG
U1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzeW1ib2xpY0xpbmtQYXRoKTsKKyAgICBp
ZiAoIXN5bWJvbGljTGlua1BhdGhGU1JlcC5kYXRhKCkgfHwgc3ltYm9saWNMaW5rUGF0aEZTUmVw
LmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
IXN5bWxpbmsodGFyZ2V0UGF0aEZTUmVwLmRhdGEoKSwgc3ltYm9saWNMaW5rUGF0aEZTUmVwLmRh
dGEoKSk7Cit9CisKK2Jvb2wgaGFyZExpbmsoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0
cmluZyYgZGVzdGluYXRpb24pCit7CisgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkgfHwgZGVzdGlu
YXRpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGZzU291
cmNlID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7CisgICAgaWYgKCFmc1NvdXJj
ZS5kYXRhKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZnNEZXN0aW5hdGlv
biA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbik7CisgICAgaWYgKCFmc0Rl
c3RpbmF0aW9uLmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICFs
aW5rKGZzU291cmNlLmRhdGEoKSwgZnNEZXN0aW5hdGlvbi5kYXRhKCkpOworfQorCitib29sIGhh
cmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0
aW5hdGlvbikKK3sKKyAgICBpZiAoaGFyZExpbmsoc291cmNlLCBkZXN0aW5hdGlvbikpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSGFyZCBsaW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNv
cHkgaW5zdGVhZC4KKyAgICBpZiAoc291cmNlLmlzRW1wdHkoKSB8fCBkZXN0aW5hdGlvbi5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZnNTb3VyY2UgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsKKyAgICBpZiAoIWZzU291cmNlLmRhdGEoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBmc0Rlc3RpbmF0aW9uID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uKTsKKyAgICBpZiAoIWZzRGVzdGluYXRpb24u
ZGF0YSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGhhbmRsZSA9IG9wZW4o
ZnNEZXN0aW5hdGlvbi5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7
CisgICAgaWYgKGhhbmRsZSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9v
bCBhcHBlbmRSZXN1bHQgPSBhcHBlbmRGaWxlQ29udGVudHNUb0ZpbGVIYW5kbGUoc291cmNlLCBo
YW5kbGUpOworICAgIGNsb3NlKGhhbmRsZSk7CisKKyAgICAvLyBJZiB0aGUgY29weSBmYWlsZWQs
IGRlbGV0ZSB0aGUgdW51c2FibGUgZmlsZS4KKyAgICBpZiAoIWFwcGVuZFJlc3VsdCkKKyAgICAg
ICAgdW5saW5rKGZzRGVzdGluYXRpb24uZGF0YSgpKTsKKworICAgIHJldHVybiBhcHBlbmRSZXN1
bHQ7Cit9CisKK09wdGlvbmFsPHVpbnQ2NF90PiBoYXJkTGlua0NvdW50KGNvbnN0IFN0cmluZyYg
cGF0aCkKK3sKKyAgICBhdXRvIGxpbmtQYXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpOworICAgIHN0cnVjdCBzdGF0IHN0YXQ7CisgICAgaWYgKDo6c3RhdChsaW5rUGF0aC5kYXRh
KCksICZzdGF0KSA8IDApCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBM
aW5rIGNvdW50IGlzIDIgaW4gdGhlIHNpbmdsZSBjbGllbnQgY2FzZSAodGhlIGJsb2IgZmlsZSBh
bmQgYSBsaW5rKS4KKyAgICByZXR1cm4gc3RhdC5zdF9ubGluayAtIDE7Cit9CisKK2Jvb2wgZGVs
ZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGF1dG8gZW50
cmllcyA9IGxpc3REaXJlY3RvcnkocGF0aCk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGVudHJp
ZXMpIHsKKyAgICAgICAgaWYgKGZpbGVUeXBlUG90ZW50aWFsbHlGb2xsb3dpbmdTeW1MaW5rcyhl
bnRyeSwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pID09IEZpbGVUeXBlOjpEaXJlY3Rv
cnkpCisgICAgICAgICAgICBkZWxldGVOb25FbXB0eURpcmVjdG9yeShlbnRyeSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZUZpbGUoZW50cnkpOworICAgIH0KKyAgICByZXR1cm4g
ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7Cit9CisKK09wdGlvbmFsPFdhbGxUaW1lPiBmaWxl
TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgQ1N0cmluZyBmc1Jl
cCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZnNSZXAuZGF0
YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgc3RydWN0IHN0YXQgZmlsZUluZm87CisKKyAgICBpZiAoc3RhdChmc1JlcC5k
YXRhKCksICZmaWxlSW5mbykpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGZpbGVJbmZvLnN0X210aW1lKTsKK30KKwor
Ym9vbCB1cGRhdGVGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAg
IGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBQYXNzaW5nIGluIG51bGwgc2V0cyB0aGUgbW9kaWZpY2F0
aW9uIHRpbWUgdG8gbm93CisgICAgcmV0dXJuICF1dGltZXMoZnNSZXAuZGF0YSgpLCBudWxscHRy
KTsKK30KKworYm9vbCBpc0hpZGRlbkZpbGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK09wdGlvbmFsPEZpbGVUeXBlPiBmaWxlVHlwZShjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgcmV0dXJuIGZpbGVUeXBlUG90ZW50aWFsbHlGb2xsb3dpbmdTeW1MaW5rcyhw
YXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObyk7Cit9CisKK09wdGlvbmFsPEZpbGVU
eXBlPiBmaWxlVHlwZUZvbGxvd2luZ1N5bWxpbmtzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICByZXR1cm4gZmlsZVR5cGVQb3RlbnRpYWxseUZvbGxvd2luZ1N5bUxpbmtzKHBhdGgsIFNob3Vs
ZEZvbGxvd1N5bWJvbGljTGlua3M6Olllcyk7Cit9CisKK1N0cmluZyBwYXRoRmlsZU5hbWUoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBwYXRoLnN1YnN0cmluZyhwYXRoLnJldmVy
c2VGaW5kKCcvJykgKyAxKTsKK30KKworU3RyaW5nIHBhcmVudFBhdGgoY29uc3QgU3RyaW5nJiBw
YXRoKQoreworICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0
aCk7CisKKyAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
ZGlybmFtZShmc1JlcC5tdXRhYmxlRGF0YSgpKSk7Cit9CisKK1N0cmluZyByZWFsUGF0aChjb25z
dCBTdHJpbmcmIGZpbGVQYXRoKQoreworICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oZmlsZVBhdGgpOworICAgIGNoYXIgcmVzb2x2ZWROYW1lW1BBVEhfTUFYXTsK
KyAgICBjb25zdCBjaGFyKiByZXN1bHQgPSByZWFscGF0aChmc1JlcC5kYXRhKCksIHJlc29sdmVk
TmFtZSk7CisgICAgcmV0dXJuIHJlc3VsdCA/IFN0cmluZzo6ZnJvbVVURjgocmVzdWx0KSA6IGZp
bGVQYXRoOworfQorCitTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCit7CisgICAgaWYgKHBhdGguZW5kc1dp
dGgoJy8nKSkKKyAgICAgICAgcmV0dXJuIHBhdGggKyBjb21wb25lbnQ7CisgICAgcmV0dXJuIHBh
dGggKyAiLyIgKyBjb21wb25lbnQ7Cit9CisKK1N0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnRzKFN0cmluZ1ZpZXcgcGF0aCwgY29uc3QgVmVjdG9yPFN0cmluZ1ZpZXc+JiBjb21wb25lbnRz
KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZChwYXRo
KTsKKyAgICBmb3IgKGF1dG8mIGNvbXBvbmVudCA6IGNvbXBvbmVudHMpCisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCcvJywgY29tcG9uZW50KTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygp
OworfQorCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiBlbnRyaWVzOworICAgIENTdHJpbmcgY3BhdGggPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgRElSKiBkaXIgPSBvcGVuZGlyKGNwYXRo
LmRhdGEoKSk7CisgICAgaWYgKGRpcikgeworICAgICAgICBzdHJ1Y3QgZGlyZW50KiBkcDsKKyAg
ICAgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNo
YXIqIG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIi4i
KSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgY2hhciBmaWxlUGF0aFtQQVRIX01BWF07CisgICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoZmlsZVBhdGgpIC0gMSkgPCBzbnByaW50ZihmaWxlUGF0aCwgc2l6
ZW9mKGZpbGVQYXRoKSwgIiVzLyVzIiwgY3BhdGguZGF0YSgpLCBuYW1lKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsgLy8gYnVmZmVyIG92ZXJmbG93CisKKyAgICAgICAgICAgIGF1dG8gc3Ry
aW5nID0gc3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihmaWxlUGF0aCk7CisKKyAg
ICAgICAgICAgIC8vIFNvbWUgZmlsZSBzeXN0ZW0gcmVwcmVzZW50YXRpb25zIGNhbm5vdCBiZSBy
ZXByZXNlbnRlZCBhcyBhIFVURi0xNiBzdHJpbmcsCisgICAgICAgICAgICAvLyBzbyB0aGlzIHN0
cmluZyBtaWdodCBiZSBudWxsLgorICAgICAgICAgICAgaWYgKCFzdHJpbmcuaXNOdWxsKCkpCisg
ICAgICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoV1RGTW92ZShzdHJpbmcpKTsKKyAgICAgICAg
fQorICAgICAgICBjbG9zZWRpcihkaXIpOworICAgIH0KKyAgICByZXR1cm4gZW50cmllczsKK30K
KworfSAvLyBuYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gIUhBVkUoU1REX0ZJTEVTWVNURU0pICYmICFIQVZFKFNURF9FWFBFUklNRU5UQUxf
RklMRVNZU1RFTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQ29tbW9uLmNtYWtl
IGIvU291cmNlL2NtYWtlL09wdGlvbnNDb21tb24uY21ha2UKaW5kZXggZGQ0ZGE2ODIyMmFkLi5m
ODMwOGU1ZjdkZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQ29tbW9uLmNtYWtl
CisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zQ29tbW9uLmNtYWtlCkBAIC0xNjEsNyArMTYxLDkg
QEAgaWYgKEhBVkVfSU5UMTI4X1ZBTFVFKQogICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChIQVZF
X0lOVDEyOF9UIElOVDEyOF9WQUxVRSkKIGVuZGlmICgpCiAKLSMgQ2hlY2sgd2hldGhlciBleHBl
cmltZW50YWwvZmlsZXN5c3RlbSBpcyB0aGUgZmlsZXN5c3RlbSBpbXBsIGF2YWlsYWJsZQotaWYg
KFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTV9JU19BVkFJTEFCTEUpCi0gIFNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKEhBVkVfU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNIFRSVUUpCisjIENo
ZWNrIHdoaWNoIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGlmIGFueQor
aWYgKFNURF9GSUxFU1lTVEVNX0lTX0FWQUlMQUJMRSkKKyAgICBTRVRfQU5EX0VYUE9TRV9UT19C
VUlMRChIQVZFX1NURF9GSUxFU1lTVEVNIFRSVUUpCitlbHNlaWYgKFNURF9FWFBFUklNRU5UQUxf
RklMRVNZU1RFTV9JU19BVkFJTEFCTEUpCisgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoSEFW
RV9TVERfRVhQRVJJTUVOVEFMX0ZJTEVTWVNURU0gVFJVRSkKIGVuZGlmICgpCg==
</data>
<flag name="review"
          id="450808"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429654</attachid>
            <date>2021-05-25 08:37:09 -0700</date>
            <delta_ts>2021-05-25 10:34:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226197.diff</filename>
            <type>text/plain</type>
            <size>19774</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlYTg1Yzg2MDczMDYuLjk4
ZjMwNWE1ZjQwNCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDIxLTA1LTI1ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5j
b20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9uXSBJbXBsZW1lbnQgRmlsZVN5c3RlbSB3aXRob3V0
IHN0ZDo6ZmlsZXN5c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAg
ICAgICAgRXhwb3NlIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrIGZvciA8ZmlsZXN5c3RlbT4gc3Vw
cG9ydCBhcyBIQVZFX1NURF9GSUxFU1lTVEVNLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09w
dGlvbnNDb21tb24uY21ha2U6CisKIDIwMjEtMDUtMTggIFlvc2hpYWtpIEppdHN1a2F3YSAgPHlv
c2hpYWtpLmppdHN1a2F3YUBzb255LmNvbT4KIAogICAgICAgICBbUGxheVN0YXRpb25dIEZpeCBQ
bGF5U3RhdGlvbiBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGU2ZmI5YjgwOGFmZS4uYTkwZTM4NjZlNTkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDUzIEBACisyMDIxLTA1LTI1ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29u
eS5jb20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9uXSBJbXBsZW1lbnQgRmlsZVN5c3RlbSB3aXRo
b3V0IHN0ZDo6ZmlsZXN5c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI2MTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisK
KyAgICAgICAgVGhlIFBsYXlTdGF0aW9uIDQgZG9lc24ndCBoYXZlIHN1cHBvcnQgaW4gaXRzIFNE
SyBmb3Igc3RkOjpmaWxlc3lzdGVtIHNvIGJhY2twb3J0IHRoZQorICAgICAgICBmdW5jdGlvbnMg
amV0dGlzb25lZCBmcm9tIEZpbGVTeXN0ZW1QT1NJWCBhbmQgYWRkIHRoZW0gdG8gYSBGaWxlU3lz
dGVtUGxheVN0YXRpb24uY3BwLgorICAgICAgICBUaGUgb3JkZXJpbmcgbWF0Y2hlcyB0aGUgY29u
dGVudHMgb2YgRmlsZVN5c3RlbS5jcHAuCisKKyAgICAgICAgTW9zdCBvZiB0aGUgZnVuY3Rpb25z
IHBvcnRlZCB0byBzdGQ6OmZpbGVzeXN0ZW0gd2VyZSBqdXN0IG1vdmVkIG92ZXIgYXMgaXMgZnJv
bSB0aGUgY29tbWl0CisgICAgICAgIHByaW9yIHRvIHIyNzY4NzkuIE1pbm9yIGNoYW5nZXMgdG8g
dGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgbWFkZSB3aGVuIHJlcXVpcmVkLgorCisgICAgICAgIFRo
ZSBmaWxlVHlwZVBvdGVudGlhbGx5Rm9sbG93aW5nU3ltTGlua3MgZnVuY3Rpb24gd2FzIGNyZWF0
ZWQgZnJvbSB0aGUgcHJldmlvdXMgYmVoYXZpb3IKKyAgICAgICAgb2YgZmlsZU1ldGFkYXRhVXNp
bmdGdW5jdGlvbiBhbmQgdG9GaWxlTWV0YXRhVHlwZS4KKworICAgICAgICBUaGUgaGFyZExpbmtD
b3VudCB3YXMgY3JlYXRlZCBmcm9tIGxvb2tpbmcgYXQgdGhlIGJlaGF2aW9yIGhhcmRMaW5rQ291
bnQgcmVwbGFjZWQgaW4KKyAgICAgICAgcjI3NzQ0Ni4KKworICAgICAgICAqIHd0Zi9GaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1IYXZlLmg6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtUGxheVN0YXRpb24uY21ha2U6CisgICAgICAgICogd3RmL1N0ZEZpbGVzeXN0ZW0uaDoK
KyAgICAgICAgKiB3dGYvcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0aW9uLmNwcDogQWRk
ZWQuCisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlVHlwZVBvdGVudGlhbGx5Rm9s
bG93aW5nU3ltTGlua3MpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZmlsZUV4aXN0
cyk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVGaWxlKToKKyAgICAgICAg
KFdURjo6RmlsZVN5c3RlbUltcGw6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKFdU
Rjo6RmlsZVN5c3RlbUltcGw6Om1vdmVGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6OmZpbGVTaXplKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1ha2VBbGxEaXJl
Y3Rvcmllcyk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjp2b2x1bWVGcmVlU3BhY2Up
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6Y3JlYXRlU3ltYm9saWNMaW5rKToKKyAg
ICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmhhcmRMaW5rKToKKyAgICAgICAgKFdURjo6Rmls
ZVN5c3RlbUltcGw6OmhhcmRMaW5rT3JDb3B5RmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0
ZW1JbXBsOjpoYXJkTGlua0NvdW50KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmRl
bGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmZp
bGVNb2RpZmljYXRpb25UaW1lKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OnVwZGF0
ZUZpbGVNb2RpZmljYXRpb25UaW1lKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Omlz
SGlkZGVuRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlVHlwZSk6Cisg
ICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlVHlwZUZvbGxvd2luZ1N5bWxpbmtzKToK
KyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OnBhdGhGaWxlTmFtZSk6CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjpwYXJlbnRQYXRoKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6OnJlYWxQYXRoKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudCk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnRzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Omxpc3RE
aXJlY3RvcnkpOgorCiAyMDIxLTA1LTI0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgU3RvcCB1c2luZyBVbmNoZWNrZWRMb2NrIGluIFdURjo6UmVjdXJzaXZlTG9j
awpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9GaWxlU3lzdGVtLmNwcAppbmRleCBjM2YxNzBjYzI4YWIuLjI0NzBlNDg1OWZmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvRmlsZVN5c3RlbS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDx3dGYvQ3J5cHRv
Z3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAj
aW5jbHVkZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZEZpbGVzeXN0ZW0uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogCkBAIC00NSwxMCArNDQsMTYgQEAKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CiAjZW5k
aWYKIAorI2lmIEhBVkUoU1REX0ZJTEVTWVNURU0pIHx8IEhBVkUoU1REX0VYUEVSSU1FTlRBTF9G
SUxFU1lTVEVNKQorI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+CisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKKyNpZiBIQVZFKFNU
RF9GSUxFU1lTVEVNKSB8fCBIQVZFKFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTSkKKwogc3Rh
dGljIHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCB0b1N0ZEZpbGVTeXN0ZW1QYXRoKFN0cmluZ1ZpZXcg
cGF0aCkKIHsKICAgICByZXR1cm4gc3RkOjpmaWxlc3lzdGVtOjp1OHBhdGgocGF0aC51dGY4KCku
ZGF0YSgpKTsKQEAgLTU5LDYgKzY0LDggQEAgc3RhdGljIFN0cmluZyBmcm9tU3RkRmlsZVN5c3Rl
bVBhdGgoY29uc3Qgc3RkOjpmaWxlc3lzdGVtOjpwYXRoJiBwYXRoKQogICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KHBhdGgudThzdHJpbmcoKS5jX3N0cigpKTsKIH0KIAorI2VuZGlmIC8vIEhB
VkUoU1REX0ZJTEVTWVNURU0pIHx8IEhBVkUoU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNKQor
CiAvLyBUaGUgZm9sbG93aW5nIGxvd2VyLUFTQ0lJIGNoYXJhY3RlcnMgbmVlZCBlc2NhcGluZyB0
byBiZSB1c2VkIGluIGEgZmlsZW5hbWUKIC8vIGFjcm9zcyBhbGwgc3lzdGVtcywgaW5jbHVkaW5n
IFdpbmRvd3M6CiAvLyAgICAgLSBVbnByaW50YWJsZSBBU0NJSSAoMDAtMUYpCkBAIC0xMTUsNiAr
MTIyLDggQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZEVzY2FwZVVDaGFyKFVDaGFyIGNoYXJh
Y3RlciwgVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIsIFUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
KyNpZiBIQVZFKFNURF9GSUxFU1lTVEVNKSB8fCBIQVZFKFNURF9FWFBFUklNRU5UQUxfRklMRVNZ
U1RFTSkKKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2xvY2tUeXBlLCB0eXBlbmFtZSA9IHZvaWQ+IHN0
cnVjdCBoYXNfdG9fdGltZV90IDogc3RkOjpmYWxzZV90eXBlIHsgfTsKIHRlbXBsYXRlPHR5cGVu
YW1lIENsb2NrVHlwZT4gc3RydWN0IGhhc190b190aW1lX3Q8Q2xvY2tUeXBlLCBzdGQ6OnZvaWRf
dDwKICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHN0ZDo6dGltZV90LCBkZWNs
dHlwZShDbG9ja1R5cGU6OnRvX3RpbWVfdChzdGQ6OmZpbGVzeXN0ZW06OmZpbGVfdGltZV90eXBl
KCkpKT4+CkBAIC0xMzgsNiArMTQ3LDggQEAgc3RhdGljIFdhbGxUaW1lIHRvV2FsbFRpbWUoc3Rk
OjpmaWxlc3lzdGVtOjpmaWxlX3RpbWVfdHlwZSBmaWxlVGltZSkKICAgICByZXR1cm4gV2FsbFRp
bWU6OmZyb21SYXdTZWNvbmRzKHRvVGltZVQoZmlsZVRpbWUpKTsKIH0KIAorI2VuZGlmIC8vIEhB
VkUoU1REX0ZJTEVTWVNURU0pIHx8IEhBVkUoU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNKQor
CiBTdHJpbmcgZW5jb2RlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dFN0cmluZykKIHsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dFN0cmluZy5sZW5ndGgoKTsKQEAgLTUwOSw2ICs1
MjAsOCBAQCBPcHRpb25hbDxTYWx0PiByZWFkT3JNYWtlU2FsdChjb25zdCBTdHJpbmcmIHBhdGgp
CiAgICAgcmV0dXJuIHNhbHQ7CiB9CiAKKyNpZiBIQVZFKFNURF9GSUxFU1lTVEVNKSB8fCBIQVZF
KFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTSkKKwogYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKICAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CkBAIC03NDEsNSArNzU0LDcg
QEAgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAg
cmV0dXJuIGZpbGVOYW1lczsKIH0KIAorI2VuZGlmIC8vIEhBVkUoU1REX0ZJTEVTWVNURU0pIHx8
IEhBVkUoU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNKQorCiB9IC8vIG5hbWVzcGFjZSBGaWxl
U3lzdGVtSW1wbAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUhhdmUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCmluZGV4IDAy
YTA3ZjEzZTBkZi4uMjMxM2RiZmNiMzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybUhhdmUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaApAQCAtOTMsNiAr
OTMsMjIgQEAKICNkZWZpbmUgSEFWRV9BQ0NFU1NJQklMSVRZIDEKICNlbmRpZgogCisjaWYgIWRl
ZmluZWQoSEFWRV9TVERfRklMRVNZU1RFTSkKKyNpZiBfX2hhc19pbmNsdWRlKDxmaWxlc3lzdGVt
PikKKyNkZWZpbmUgSEFWRV9TVERfRklMRVNZU1RFTSAxCisjZWxzZQorI2RlZmluZSBIQVZFX1NU
RF9GSUxFU1lTVEVNIDAKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX1NURF9F
WFBFUklNRU5UQUxfRklMRVNZU1RFTSkKKyNpZiBfX2hhc19pbmNsdWRlKDxleHBlcmltZW50YWwv
ZmlsZXN5c3RlbT4pCisjZGVmaW5lIFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTSAxCisjZWxz
ZQorI2RlZmluZSBTVERfRVhQRVJJTUVOVEFMX0ZJTEVTWVNURU0gMAorI2VuZGlmCisjZW5kaWYK
KwogLyogRklYTUU6IFJlbW92ZSBhZnRlciBDTWFrZSBidWlsZCBlbmFibGVkIG9uIERhcndpbiAq
LwogI2lmIE9TKERBUldJTikKICNkZWZpbmUgSEFWRV9FUlJOT19IIDEKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCmluZGV4IGY5NTllZTk4ZDRiNi4uZGFmZDY4ZjY2YTI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKQEAgLTQsNiArNCw3
IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgZ2VuZXJpYy9SdW5Mb29wR2VuZXJpYy5j
cHAKICAgICBnZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCiAKKyAgICBwbGF5c3RhdGlvbi9G
aWxlU3lzdGVtUGxheVN0YXRpb24uY3BwCiAgICAgcGxheXN0YXRpb24vTGFuZ3VhZ2VQbGF5U3Rh
dGlvbi5jcHAKICAgICBwbGF5c3RhdGlvbi9VbmlTdGRFeHRyYXNQbGF5U3RhdGlvbi5jcHAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RkRmlsZXN5c3RlbS5oIGIvU291cmNlL1dURi93
dGYvU3RkRmlsZXN5c3RlbS5oCmluZGV4IDQ3ODEwMzg1Y2VjYy4uYmRjZGY0NDZkZmQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdGRGaWxlc3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93
dGYvU3RkRmlsZXN5c3RlbS5oCkBAIC0yMyw3ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLSNpZiBfX2hhc19pbmNsdWRlKDxmaWxlc3lzdGVtPikKKyNwcmFnbWEgb25jZQorCisjaWYg
SEFWRShTVERfRklMRVNZU1RFTSkKICNpbmNsdWRlIDxmaWxlc3lzdGVtPgogI2VsaWYgSEFWRShT
VERfRVhQRVJJTUVOVEFMX0ZJTEVTWVNURU0pCiAjaW5jbHVkZSA8ZXhwZXJpbWVudGFsL2ZpbGVz
eXN0ZW0+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wbGF5c3RhdGlvbi9GaWxlU3lzdGVt
UGxheVN0YXRpb24uY3BwIGIvU291cmNlL1dURi93dGYvcGxheXN0YXRpb24vRmlsZVN5c3RlbVBs
YXlTdGF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmI5
OGFkNzU4MmFjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3BsYXlzdGF0aW9u
L0ZpbGVTeXN0ZW1QbGF5U3RhdGlvbi5jcHAKQEAgLTAsMCArMSwzNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorCisjaWYgIUhBVkUoU1REX0ZJTEVT
WVNURU0pICYmICFIQVZFKFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTSkKKworI2luY2x1ZGUg
PGRpcmVudC5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+
CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNl
IEZpbGVTeXN0ZW1JbXBsIHsKKworZW51bSBjbGFzcyBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtz
IHsgTm8sIFllcyB9Oworc3RhdGljIE9wdGlvbmFsPEZpbGVUeXBlPiBmaWxlVHlwZVBvdGVudGlh
bGx5Rm9sbG93aW5nU3ltTGlua3MoY29uc3QgU3RyaW5nJiBwYXRoLCBTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzIHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpCit7CisgICAgQ1N0cmluZyBmc1Jl
cCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZnNSZXAuZGF0
YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgYXV0byBzdGF0RnVuYyA9IHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MgPT0g
U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzID8gc3RhdCA6IGxzdGF0OworICAgIHN0cnVj
dCBzdGF0IGZpbGVJbmZvOworICAgIGlmIChzdGF0RnVuYyhmc1JlcC5kYXRhKCksICZmaWxlSW5m
bykpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoU19JU0RJUihmaWxl
SW5mby5zdF9tb2RlKSkKKyAgICAgICAgcmV0dXJuIEZpbGVUeXBlOjpEaXJlY3Rvcnk7CisgICAg
aWYgKFNfSVNMTksoZmlsZUluZm8uc3RfbW9kZSkpCisgICAgICAgIHJldHVybiBGaWxlVHlwZTo6
U3ltYm9saWNMaW5rOworICAgIHJldHVybiBGaWxlVHlwZTo6UmVndWxhcjsKK30KKworYm9vbCBm
aWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBpZiAocGF0aC5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRh
dGEoKVswXSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gYWNj
ZXNzKGZzUmVwLmRhdGEoKSwgRl9PSykgIT0gLTE7Cit9CisKK2Jvb2wgZGVsZXRlRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpCit7CisgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVsw
XSA9PSAnXDAnKSB7CisgICAgICAgIExPR19FUlJPUigiRmlsZSBmYWlsZWQgdG8gZGVsZXRlLiBG
YWlsZWQgdG8gZ2V0IGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRpb24gdG8gY3JlYXRlIENTdHJpbmcg
ZnJvbSBjZlN0cmluZyBvciBmaWxlc3lzdGVtIHJlcHJlc2VudGF0aW9uIGlzIGEgbnVsbCB2YWx1
ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gdW5saW5rKC4uLikg
cmV0dXJucyAwIG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24gb2YgdGhlIHBhdGggYW5kIG5vbi16ZXJv
IGluIGFueSBvdGhlciBjYXNlIChpbmNsdWRpbmcgaW52YWxpZCBwZXJtaXNzaW9ucyBvciBub24t
ZXhpc3RlbnQgZmlsZSkKKyAgICBib29sIHVubGlua2VkID0gIXVubGluayhmc1JlcC5kYXRhKCkp
OworICAgIGlmICghdW5saW5rZWQgJiYgZXJybm8gIT0gRU5PRU5UKQorICAgICAgICBMT0dfRVJS
T1IoIkZpbGUgZmFpbGVkIHRvIGRlbGV0ZS4gRXJyb3IgbWVzc2FnZTogJXMiLCBzdHJlcnJvcihl
cnJubykpOworCisgICAgcmV0dXJuIHVubGlua2VkOworfQorCitib29sIGRlbGV0ZUVtcHR5RGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNS
ZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIHJt
ZGlyKC4uLikgcmV0dXJucyAwIG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24gb2YgdGhlIHBhdGggYW5k
IG5vbi16ZXJvIGluIGFueSBvdGhlciBjYXNlIChpbmNsdWRpbmcgaW52YWxpZCBwZXJtaXNzaW9u
cyBvciBub24tZXhpc3RlbnQgZmlsZSkKKyAgICByZXR1cm4gIXJtZGlyKGZzUmVwLmRhdGEoKSk7
Cit9CisKK2Jvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcm
IG5ld1BhdGgpCit7CisgICAgYXV0byBvbGRGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihvbGRQYXRoKTsKKyAgICBpZiAob2xkRmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gbmV3RmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24obmV3UGF0aCk7CisgICAgaWYgKG5ld0ZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVuYW1lKG9sZEZpbGVuYW1lLmRhdGEoKSwgbmV3
RmlsZW5hbWUuZGF0YSgpKSAhPSAtMTsKK30KKworT3B0aW9uYWw8dWludDY0X3Q+IGZpbGVTaXpl
KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0
YSgpWzBdID09ICdcMCcpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBzdHJ1
Y3Qgc3RhdCBmaWxlSW5mbzsKKworICAgIGlmIChzdGF0KGZzUmVwLmRhdGEoKSwgJmZpbGVJbmZv
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBmaWxlSW5mby5z
dF9zaXplOworfQorCitib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgp
Cit7CisgICAgQ1N0cmluZyBmdWxsUGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRo
KTsKKyAgICBpZiAoIWFjY2VzcyhmdWxsUGF0aC5kYXRhKCksIEZfT0spKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGNoYXIqIHAgPSBmdWxsUGF0aC5tdXRhYmxlRGF0YSgpICsgMTsKKyAg
ICBpbnQgbGVuZ3RoID0gZnVsbFBhdGgubGVuZ3RoKCk7CisKKyAgICBpZiAocFtsZW5ndGggLSAx
XSA9PSAnLycpCisgICAgICAgIHBbbGVuZ3RoIC0gMV0gPSAnXDAnOworICAgIGZvciAoOyAqcDsg
KytwKSB7CisgICAgICAgIGlmICgqcCA9PSAnLycpIHsKKyAgICAgICAgICAgICpwID0gJ1wwJzsK
KyAgICAgICAgICAgIGlmIChhY2Nlc3MoZnVsbFBhdGguZGF0YSgpLCBGX09LKSkgeworICAgICAg
ICAgICAgICAgIGlmIChta2RpcihmdWxsUGF0aC5kYXRhKCksIFNfSVJXWFUpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqcCA9
ICcvJzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYWNjZXNzKGZ1bGxQYXRoLmRhdGEoKSwg
Rl9PSykpIHsKKyAgICAgICAgaWYgKG1rZGlyKGZ1bGxQYXRoLmRhdGEoKSwgU19JUldYVSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K09wdGlvbmFsPHVpbnQ2NF90PiB2b2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIHN0cnVjdCBzdGF0dmZzIGZpbGVTeXN0ZW1TdGF0OworICAgIGlmICghc3RhdHZmcyhm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCAmZmlsZVN5c3RlbVN0YXQpKQor
ICAgICAgICByZXR1cm4gZmlsZVN5c3RlbVN0YXQuZl9iYXZhaWwgKiBmaWxlU3lzdGVtU3RhdC5m
X2Zyc2l6ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitib29sIGNyZWF0ZVN5bWJv
bGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgc3ltYm9saWNM
aW5rUGF0aCkKK3sKKyAgICBDU3RyaW5nIHRhcmdldFBhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbih0YXJnZXRQYXRoKTsKKyAgICBpZiAoIXRhcmdldFBhdGhGU1JlcC5kYXRhKCkg
fHwgdGFyZ2V0UGF0aEZTUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBDU3RyaW5nIHN5bWJvbGljTGlua1BhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihzeW1ib2xpY0xpbmtQYXRoKTsKKyAgICBpZiAoIXN5bWJvbGljTGlua1BhdGhG
U1JlcC5kYXRhKCkgfHwgc3ltYm9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKVswXSA9PSAnXDAnKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIXN5bWxpbmsodGFyZ2V0UGF0aEZT
UmVwLmRhdGEoKSwgc3ltYm9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKSk7Cit9CisKK2Jvb2wgaGFy
ZExpbmsoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCit7
CisgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkgfHwgZGVzdGluYXRpb24uaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGZzU291cmNlID0gZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHNvdXJjZSk7CisgICAgaWYgKCFmc1NvdXJjZS5kYXRhKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gZnNEZXN0aW5hdGlvbiA9IGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihkZXN0aW5hdGlvbik7CisgICAgaWYgKCFmc0Rlc3RpbmF0aW9uLmRhdGEoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICFsaW5rKGZzU291cmNlLmRhdGEoKSwg
ZnNEZXN0aW5hdGlvbi5kYXRhKCkpOworfQorCitib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25z
dCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKK3sKKyAgICBpZiAo
aGFyZExpbmsoc291cmNlLCBkZXN0aW5hdGlvbikpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgLy8gSGFyZCBsaW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVhZC4KKyAgICBpZiAo
c291cmNlLmlzRW1wdHkoKSB8fCBkZXN0aW5hdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGF1dG8gZnNTb3VyY2UgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
c291cmNlKTsKKyAgICBpZiAoIWZzU291cmNlLmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byBmc0Rlc3RpbmF0aW9uID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRl
c3RpbmF0aW9uKTsKKyAgICBpZiAoIWZzRGVzdGluYXRpb24uZGF0YSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIGhhbmRsZSA9IG9wZW4oZnNEZXN0aW5hdGlvbi5kYXRhKCks
IE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisgICAgaWYgKGhhbmRsZSA9PSAt
MSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBhcHBlbmRSZXN1bHQgPSBhcHBl
bmRGaWxlQ29udGVudHNUb0ZpbGVIYW5kbGUoc291cmNlLCBoYW5kbGUpOworICAgIGNsb3NlKGhh
bmRsZSk7CisKKyAgICAvLyBJZiB0aGUgY29weSBmYWlsZWQsIGRlbGV0ZSB0aGUgdW51c2FibGUg
ZmlsZS4KKyAgICBpZiAoIWFwcGVuZFJlc3VsdCkKKyAgICAgICAgdW5saW5rKGZzRGVzdGluYXRp
b24uZGF0YSgpKTsKKworICAgIHJldHVybiBhcHBlbmRSZXN1bHQ7Cit9CisKK09wdGlvbmFsPHVp
bnQ2NF90PiBoYXJkTGlua0NvdW50KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBhdXRvIGxp
bmtQYXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIHN0cnVjdCBzdGF0
IHN0YXQ7CisgICAgaWYgKDo6c3RhdChsaW5rUGF0aC5kYXRhKCksICZzdGF0KSA8IDApCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBMaW5rIGNvdW50IGlzIDIgaW4gdGhl
IHNpbmdsZSBjbGllbnQgY2FzZSAodGhlIGJsb2IgZmlsZSBhbmQgYSBsaW5rKS4KKyAgICByZXR1
cm4gc3RhdC5zdF9ubGluayAtIDE7Cit9CisKK2Jvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3Rvcnko
Y29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGF1dG8gZW50cmllcyA9IGxpc3REaXJlY3Rvcnko
cGF0aCk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGVudHJpZXMpIHsKKyAgICAgICAgaWYgKGZp
bGVUeXBlUG90ZW50aWFsbHlGb2xsb3dpbmdTeW1MaW5rcyhlbnRyeSwgU2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rczo6Tm8pID09IEZpbGVUeXBlOjpEaXJlY3RvcnkpCisgICAgICAgICAgICBkZWxl
dGVOb25FbXB0eURpcmVjdG9yeShlbnRyeSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRl
bGV0ZUZpbGUoZW50cnkpOworICAgIH0KKyAgICByZXR1cm4gZGVsZXRlRW1wdHlEaXJlY3Rvcnko
cGF0aCk7Cit9CisKK09wdGlvbmFsPFdhbGxUaW1lPiBmaWxlTW9kaWZpY2F0aW9uVGltZShjb25z
dCBTdHJpbmcmIHBhdGgpCit7CisgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVsw
XSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgc3RydWN0IHN0
YXQgZmlsZUluZm87CisKKyAgICBpZiAoc3RhdChmc1JlcC5kYXRhKCksICZmaWxlSW5mbykpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gV2FsbFRpbWU6OmZyb21S
YXdTZWNvbmRzKGZpbGVJbmZvLnN0X210aW1lKTsKK30KKworYm9vbCB1cGRhdGVGaWxlTW9kaWZp
Y2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgQ1N0cmluZyBmc1JlcCA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZnNSZXAuZGF0YSgpIHx8
IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBQYXNzaW5nIGluIG51bGwgc2V0cyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgdG8gbm93CisgICAg
cmV0dXJuICF1dGltZXMoZnNSZXAuZGF0YSgpLCBudWxscHRyKTsKK30KKworYm9vbCBpc0hpZGRl
bkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGF1dG8gZmlsZW5hbWUgPSBwYXRoRmls
ZU5hbWUocGF0aCk7CisKKyAgICByZXR1cm4gIWZpbGVuYW1lLmlzRW1wdHkoKSAmJiBmaWxlbmFt
ZVswXSA9PSAnLic7Cit9CisKK09wdGlvbmFsPEZpbGVUeXBlPiBmaWxlVHlwZShjb25zdCBTdHJp
bmcmIHBhdGgpCit7CisgICAgcmV0dXJuIGZpbGVUeXBlUG90ZW50aWFsbHlGb2xsb3dpbmdTeW1M
aW5rcyhwYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObyk7Cit9CisKK09wdGlvbmFs
PEZpbGVUeXBlPiBmaWxlVHlwZUZvbGxvd2luZ1N5bWxpbmtzKGNvbnN0IFN0cmluZyYgcGF0aCkK
K3sKKyAgICByZXR1cm4gZmlsZVR5cGVQb3RlbnRpYWxseUZvbGxvd2luZ1N5bUxpbmtzKHBhdGgs
IFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Olllcyk7Cit9CisKK1N0cmluZyBwYXRoRmlsZU5h
bWUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBwYXRoLnN1YnN0cmluZyhwYXRo
LnJldmVyc2VGaW5kKCcvJykgKyAxKTsKK30KKworU3RyaW5nIHBhcmVudFBhdGgoY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCk7CisKKyAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0g
J1wwJykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoZGlybmFtZShmc1JlcC5tdXRhYmxlRGF0YSgpKSk7Cit9CisKK1N0cmluZyByZWFsUGF0
aChjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQoreworICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24oZmlsZVBhdGgpOworICAgIGNoYXIgcmVzb2x2ZWROYW1lW1BBVEhf
TUFYXTsKKyAgICBjb25zdCBjaGFyKiByZXN1bHQgPSByZWFscGF0aChmc1JlcC5kYXRhKCksIHJl
c29sdmVkTmFtZSk7CisgICAgcmV0dXJuIHJlc3VsdCA/IFN0cmluZzo6ZnJvbVVURjgocmVzdWx0
KSA6IGZpbGVQYXRoOworfQorCitTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCit7CisgICAgaWYgKHBhdGgu
ZW5kc1dpdGgoJy8nKSkKKyAgICAgICAgcmV0dXJuIHBhdGggKyBjb21wb25lbnQ7CisgICAgcmV0
dXJuIHBhdGggKyAiLyIgKyBjb21wb25lbnQ7Cit9CisKK1N0cmluZyBwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnRzKFN0cmluZ1ZpZXcgcGF0aCwgY29uc3QgVmVjdG9yPFN0cmluZ1ZpZXc+JiBjb21w
b25lbnRzKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVu
ZChwYXRoKTsKKyAgICBmb3IgKGF1dG8mIGNvbXBvbmVudCA6IGNvbXBvbmVudHMpCisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCcvJywgY29tcG9uZW50KTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOworfQorCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
cGF0aCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBlbnRyaWVzOworICAgIENTdHJpbmcgY3BhdGgg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgRElSKiBkaXIgPSBvcGVuZGly
KGNwYXRoLmRhdGEoKSk7CisgICAgaWYgKGRpcikgeworICAgICAgICBzdHJ1Y3QgZGlyZW50KiBk
cDsKKyAgICAgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkpIHsKKyAgICAgICAgICAgIGNv
bnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICAgICAgaWYgKCFzdHJjbXAobmFt
ZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgY2hhciBmaWxlUGF0aFtQQVRIX01BWF07CisgICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoZmlsZVBhdGgpIC0gMSkgPCBzbnByaW50ZihmaWxlUGF0
aCwgc2l6ZW9mKGZpbGVQYXRoKSwgIiVzLyVzIiwgY3BhdGguZGF0YSgpLCBuYW1lKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsgLy8gYnVmZmVyIG92ZXJmbG93CisKKyAgICAgICAgICAgIGF1
dG8gc3RyaW5nID0gc3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihmaWxlUGF0aCk7
CisKKyAgICAgICAgICAgIC8vIFNvbWUgZmlsZSBzeXN0ZW0gcmVwcmVzZW50YXRpb25zIGNhbm5v
dCBiZSByZXByZXNlbnRlZCBhcyBhIFVURi0xNiBzdHJpbmcsCisgICAgICAgICAgICAvLyBzbyB0
aGlzIHN0cmluZyBtaWdodCBiZSBudWxsLgorICAgICAgICAgICAgaWYgKCFzdHJpbmcuaXNOdWxs
KCkpCisgICAgICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoV1RGTW92ZShzdHJpbmcpKTsKKyAg
ICAgICAgfQorICAgICAgICBjbG9zZWRpcihkaXIpOworICAgIH0KKyAgICByZXR1cm4gZW50cmll
czsKK30KKworfSAvLyBuYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gIUhBVkUoU1REX0ZJTEVTWVNURU0pICYmICFIQVZFKFNURF9FWFBFUklN
RU5UQUxfRklMRVNZU1RFTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQ29tbW9u
LmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNDb21tb24uY21ha2UKaW5kZXggZGQ0ZGE2ODIy
MmFkLi5mODMwOGU1ZjdkZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQ29tbW9u
LmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zQ29tbW9uLmNtYWtlCkBAIC0xNjEsNyAr
MTYxLDkgQEAgaWYgKEhBVkVfSU5UMTI4X1ZBTFVFKQogICBTRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChIQVZFX0lOVDEyOF9UIElOVDEyOF9WQUxVRSkKIGVuZGlmICgpCiAKLSMgQ2hlY2sgd2hldGhl
ciBleHBlcmltZW50YWwvZmlsZXN5c3RlbSBpcyB0aGUgZmlsZXN5c3RlbSBpbXBsIGF2YWlsYWJs
ZQotaWYgKFNURF9FWFBFUklNRU5UQUxfRklMRVNZU1RFTV9JU19BVkFJTEFCTEUpCi0gIFNFVF9B
TkRfRVhQT1NFX1RPX0JVSUxEKEhBVkVfU1REX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNIFRSVUUp
CisjIENoZWNrIHdoaWNoIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGlm
IGFueQoraWYgKFNURF9GSUxFU1lTVEVNX0lTX0FWQUlMQUJMRSkKKyAgICBTRVRfQU5EX0VYUE9T
RV9UT19CVUlMRChIQVZFX1NURF9GSUxFU1lTVEVNIFRSVUUpCitlbHNlaWYgKFNURF9FWFBFUklN
RU5UQUxfRklMRVNZU1RFTV9JU19BVkFJTEFCTEUpCisgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJ
TEQoSEFWRV9TVERfRVhQRVJJTUVOVEFMX0ZJTEVTWVNURU0gVFJVRSkKIGVuZGlmICgpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>