<?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>140073</bug_id>
          
          <creation_ts>2015-01-04 21:01:34 -0800</creation_ts>
          <short_desc>[GTK] Add API for web process filesystem sandbox extensions</short_desc>
          <delta_ts>2016-09-21 05:26:44 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>140072</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>janousek.jiri</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>tmpsantos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1058651</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-01-04 21:01:34 -0800</bug_when>
    <thetext>We unfortunately have to break existing web extensions that perform filesystem operations if we want to sandbox the web process. We have a couple of options here:

1) Require the web extension to set up some form of IPC with the UI process to ask it to perform the syscall for it. This would be inconvenient for web extension authors, and it would be a hole in the sandbox: the UI process should not trust input from the sandbox web process.
2) Provide API to open holes in the sandbox, so the web process can open extra files as needed. E.g. ~/.config/epiphany/adblock

Consider also that the API I add in this patch is on the WebKitWebContext. That&apos;s probably *not acceptable* if extensions are expected to be developed separately from web browsers, which I think we probably want to support. So this is just a proof of concept; probably the final API should be on the WebKitWebExtension itself.

Lastly consider that a better sandbox would trap or block many more syscalls than we currently do. In particular, it&apos;d be really nice to block the web process from accessing the network (if the network process is enabled) (but I think web sockets are currently implemented in the web process only). That would require more sophisticated API beyond that added in this patch, so that the web process would be allowed to e.g. connect to https://easylist-downloads.adblockplus.org/ -- though I definitely want any API we provide to be at a much higher level than system calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058654</commentid>
    <comment_count>1</comment_count>
      <attachid>243962</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-01-04 21:07:04 -0800</bug_when>
    <thetext>Created attachment 243962
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059808</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-01-08 07:08:16 -0800</bug_when>
    <thetext>Another acceptable resolution for this bug, so long as we keep the sandbox relatively lenient (so that it only blocks suspect filesystem accesses), would be to define a directory (e.g. XDG_DATA_DIR/webkitgtk/web-extensions) that will be whitelisted for use by web extensions, and not add any new API. That would likely be preferable.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243962</attachid>
            <date>2015-01-04 21:07:04 -0800</date>
            <delta_ts>2015-01-04 21:07:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0011-GTK-Add-API-for-web-process-filesystem-sandbox-exten.patch</filename>
            <type>text/plain</type>
            <size>40685</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">RnJvbSA3N2NiNjc2ZjI4MWE0MWM5YzRlNzg3ZjZhYzkzZDFmZWEzMzIxMjQyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWNoYWVsIENhdGFuemFybyA8bWNhdGFuemFyb0BpZ2FsaWEu
Y29tPgpEYXRlOiBTdW4sIDQgSmFuIDIwMTUgMjM6MDU6MjQgLTA2MDAKU3ViamVjdDogW1BBVENI
XSBbR1RLXSBBZGQgQVBJIGZvciB3ZWIgcHJvY2VzcyBmaWxlc3lzdGVtIHNhbmRib3ggZXh0ZW5z
aW9ucwoKVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYSB3ZWIgZXh0ZW5zaW9uIHRvIGhhdmUg
bGltaXRlZCBhY2Nlc3MgdG8gdGhlCmZpbGVzeXN0ZW0uCi0tLQogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzAgKysKIC4uLi9TaGFyZWQvV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgICAgICAgIHwgIDI0ICsrCiAuLi4vV2ViS2l0
Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oICB8ICAgOSArCiAuLi4vU2hh
cmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuY3BwICB8ICAxMyArCiAuLi4v
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCB8ICA3MiArKysr
CiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggICB8ICA0
NCArKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0
IHwgICAzICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcCAgICAgICAg
ICAgIHwgIDQzICsrKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaCAgICAg
ICAgICAgICAgfCAgMTggKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgMzUgKysKIC4uLi9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
Q01ha2VMaXN0cy50eHQgIHwgICA0ICsKIC4uLi9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTYW5kYm94
RXh0ZW5zaW9ucy5jcHAgICAgIHwgMzc1ICsrKysrKysrKysrKysrKysrKysrKwogLi4uL1Rlc3Rz
L1dlYktpdDJHdGsvV2ViRXh0ZW5zaW9uVGVzdC5jcHAgICAgICAgICAgfCAgMzAgKysKIDEzIGZp
bGVzIGNoYW5nZWQsIDcwMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTYW5kYm94RXh0ZW5zaW9ucy5jcHAK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggZTk5YmRjMi4uNTZmZGQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM1
IEBACiAyMDE1LTAxLTA0ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNv
bT4KIAorICAgICAgICBbR1RLXSBBZGQgQVBJIGZvciB3ZWIgcHJvY2VzcyBmaWxlc3lzdGVtIHNh
bmRib3ggZXh0ZW5zaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQwMDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYSB3ZWIgZXh0ZW5zaW9uIHRvIGhh
dmUgbGltaXRlZCBhY2Nlc3MgdG8gdGhlCisgICAgICAgIGZpbGVzeXN0ZW0uCisKKyAgICAgICAg
KiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hh
cmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBTaGFyZWQvbGlu
dXgvU2VjY29tcEZpbHRlcnMvU3lzY2FsbFBvbGljeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN5
c2NhbGxQb2xpY3k6OmFkZERlZmF1bHRXZWJQcm9jZXNzUG9saWN5KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJf
Y29udGV4dF9hZGRfZmlsZXN5c3RlbV9zYW5kYm94X2V4dGVuc2lvbik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpjcmVhdGVOZXdX
ZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6YWRkRXh0cmFEaXJlY3Rv
cnlSZWFkUGVybWlzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OmFkZEV4dHJh
RGlyZWN0b3J5V3JpdGVQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6
YWRkRXh0cmFEaXJlY3RvcnlSZWFkQW5kV3JpdGVQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGV4dDo6YWRkRXh0cmFGaWxlUmVhZFBlcm1pc3Npb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZXh0OjphZGRFeHRyYUZpbGVXcml0ZVBlcm1pc3Npb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb250ZXh0OjphZGRFeHRyYUZpbGVSZWFkQW5kV3JpdGVQZXJtaXNzaW9uKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5oOgorCisyMDE1LTAxLTA0ICBNaWNoYWVs
IENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKwogICAgICAgICBbR1RLXSBBZGQg
c2VjY29tcCBmaWx0ZXJzIHN1cHBvcnQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMDAxNAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggNTU5NzlhMC4uMTc5MzIw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcApAQCAtMTQwLDYgKzE0MCwxNSBAQCB2b2lkIFdlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29u
c3QKICAgICBlbmNvZGVyIDw8IGhhc1NlbGVjdGlvblNlcnZpY2VzOwogICAgIGVuY29kZXIgPDwg
aGFzUmljaENvbnRlbnRTZXJ2aWNlczsKICNlbmRpZgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKKyAgICBlbmNvZGVyIDw8IGV4dHJhRGlyZWN0b3J5UmVhZFBlcm1pc3Npb25zOworICAg
IGVuY29kZXIgPDwgZXh0cmFEaXJlY3RvcnlXcml0ZVBlcm1pc3Npb25zOworICAgIGVuY29kZXIg
PDwgZXh0cmFEaXJlY3RvcnlSZWFkQW5kV3JpdGVQZXJtaXNzaW9uczsKKyAgICBlbmNvZGVyIDw8
IGV4dHJhRmlsZVJlYWRQZXJtaXNzaW9uczsKKyAgICBlbmNvZGVyIDw8IGV4dHJhRmlsZVdyaXRl
UGVybWlzc2lvbnM7CisgICAgZW5jb2RlciA8PCBleHRyYUZpbGVSZWFkQW5kV3JpdGVQZXJtaXNz
aW9uczsKKyNlbmRpZgogfQogCiBib29sIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRl
Y29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTI5Niw2ICszMDUsMjEgQEAgYm9vbCBXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIs
IFdlYlByb2MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0VD
Q09NUF9GSUxURVJTKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5leHRyYURp
cmVjdG9yeVJlYWRQZXJtaXNzaW9ucykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMuZXh0cmFEaXJlY3RvcnlXcml0ZVBlcm1pc3Npb25z
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1l
dGVycy5leHRyYURpcmVjdG9yeVJlYWRBbmRXcml0ZVBlcm1pc3Npb25zKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5leHRyYUZpbGVS
ZWFkUGVybWlzc2lvbnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShwYXJhbWV0ZXJzLmV4dHJhRmlsZVdyaXRlUGVybWlzc2lvbnMpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmV4dHJhRmls
ZVJlYWRBbmRXcml0ZVBlcm1pc3Npb25zKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggZWUxYWNiNi4uYWE3NjI0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oCkBAIC0xNjMsNiArMTYzLDE1IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzIHsKICAgICBib29sIGhhc1NlbGVjdGlvblNlcnZpY2VzOwogICAgIGJvb2wgaGFz
UmljaENvbnRlbnRTZXJ2aWNlczsKICNlbmRpZgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVS
UykKKyAgICBWZWN0b3I8U3RyaW5nPiBleHRyYURpcmVjdG9yeVJlYWRQZXJtaXNzaW9uczsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBleHRyYURpcmVjdG9yeVdyaXRlUGVybWlzc2lvbnM7CisgICAgVmVj
dG9yPFN0cmluZz4gZXh0cmFEaXJlY3RvcnlSZWFkQW5kV3JpdGVQZXJtaXNzaW9uczsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBleHRyYUZpbGVSZWFkUGVybWlzc2lvbnM7CisgICAgVmVjdG9yPFN0cmlu
Zz4gZXh0cmFGaWxlV3JpdGVQZXJtaXNzaW9uczsKKyAgICBWZWN0b3I8U3RyaW5nPiBleHRyYUZp
bGVSZWFkQW5kV3JpdGVQZXJtaXNzaW9uczsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZp
bHRlcnMvU3lzY2FsbFBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2Vj
Y29tcEZpbHRlcnMvU3lzY2FsbFBvbGljeS5jcHAKaW5kZXggNGNiMWEwZi4uMDIyYmYwNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2Nh
bGxQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmls
dGVycy9TeXNjYWxsUG9saWN5LmNwcApAQCAtMTMwLDYgKzEzMCwxOSBAQCB2b2lkIFN5c2NhbGxQ
b2xpY3k6OmFkZERlZmF1bHRXZWJQcm9jZXNzUG9saWN5KGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcgogICAgICAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKHJlbW92ZVRyYWlsaW5n
U2xhc2gocGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgpLCBSZWFkQW5kV3Jp
dGUpOwogI2VuZGlmCiAKKyAgICBmb3IgKGNvbnN0IFN0cmluZyYgcGF0aCA6IHBhcmFtZXRlcnMu
ZXh0cmFEaXJlY3RvcnlSZWFkUGVybWlzc2lvbnMpCisgICAgICAgIGFkZERpcmVjdG9yeVBlcm1p
c3Npb24ocGF0aCwgUmVhZCk7CisgICAgZm9yIChjb25zdCBTdHJpbmcmIHBhdGggOiBwYXJhbWV0
ZXJzLmV4dHJhRGlyZWN0b3J5V3JpdGVQZXJtaXNzaW9ucykKKyAgICAgICAgYWRkRGlyZWN0b3J5
UGVybWlzc2lvbihwYXRoLCBXcml0ZSk7CisgICAgZm9yIChjb25zdCBTdHJpbmcmIHBhdGggOiBw
YXJhbWV0ZXJzLmV4dHJhRGlyZWN0b3J5UmVhZEFuZFdyaXRlUGVybWlzc2lvbnMpCisgICAgICAg
IGFkZERpcmVjdG9yeVBlcm1pc3Npb24ocGF0aCwgUmVhZEFuZFdyaXRlKTsKKyAgICBmb3IgKGNv
bnN0IFN0cmluZyYgcGF0aCA6IHBhcmFtZXRlcnMuZXh0cmFGaWxlUmVhZFBlcm1pc3Npb25zKQor
ICAgICAgICBhZGRGaWxlUGVybWlzc2lvbihwYXRoLCBSZWFkKTsKKyAgICBmb3IgKGNvbnN0IFN0
cmluZyYgcGF0aCA6IHBhcmFtZXRlcnMuZXh0cmFGaWxlV3JpdGVQZXJtaXNzaW9ucykKKyAgICAg
ICAgYWRkRmlsZVBlcm1pc3Npb24ocGF0aCwgV3JpdGUpOworICAgIGZvciAoY29uc3QgU3RyaW5n
JiBwYXRoIDogcGFyYW1ldGVycy5leHRyYUZpbGVSZWFkQW5kV3JpdGVQZXJtaXNzaW9ucykKKyAg
ICAgICAgYWRkRmlsZVBlcm1pc3Npb24ocGF0aCwgUmVhZEFuZFdyaXRlKTsKKwogICAgIC8vIFRo
ZSByb290IHBvbGljeSB3aWxsIGJsb2NrIGFjY2VzcyB0byBhbnkgZGlyZWN0b3J5IG9yCiAgICAg
Ly8gZmlsZSB1bmxlc3Mgd2hpdGUgbGlzdGVkIGJlbGxvdyBvciBieSBwbGF0Zm9ybS4KICAgICBh
ZGREaXJlY3RvcnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiLyIpLCBOb3RBbGxvd2VkKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRl
eHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4
dC5jcHAKaW5kZXggZWQ0MTZlNC4uNTgyOTYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTEwODYsNiArMTA4
Niw3OCBAQCBXZWJLaXRQcm9jZXNzTW9kZWwgd2Via2l0X3dlYl9jb250ZXh0X2dldF9wcm9jZXNz
X21vZGVsKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleAogICAgIHJldHVybiB0b1dlYktpdFByb2Nl
c3NNb2RlbChjb250ZXh0LT5wcml2LT5jb250ZXh0LT5wcm9jZXNzTW9kZWwoKSk7CiB9CiAKKy8q
KgorICogd2Via2l0X3dlYl9jb250ZXh0X2FkZF9maWxlc3lzdGVtX3NhbmRib3hfZXh0ZW5zaW9u
OgorICogQGNvbnRleHQ6IHRoZSAjV2ViS2l0V2ViQ29udGV4dAorICogQHBhdGg6IHRoZSBmaWxl
IG9yIGRpcmVjdG9yeSB0byBncmFudCBhY2Nlc3MgdG8KKyAqIEBwZXJtaXNzaW9uOiBhICNXZWJL
aXRGaWxlc3lzdGVtUGVybWlzc2lvbgorICogQHBlcm1pc3Npb25fdHlwZTogYSAjV2ViS2l0Rmls
ZXN5c3RlbVBlcm1pc3Npb25UeXBlCisgKgorICogQWRkcyBhIHBhdGggdG8gdGhlIHdlYiBwcm9j
ZXNzIHNhbmRib3gncyB3aGl0ZWxpc3QuIFRoZSB3ZWIgcHJvY2VzcyB3aWxsIGJlCisgKiBncmFu
dGVkIHJlYWQsIHdyaXRlLCBvciBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byBAcGF0aCwg
YXMgZGV0ZXJtaW5lZCBieQorICogQHBlcm1pc3Npb24uIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdy
YW50IHlvdXIgd2ViIGV4dGVuc2lvbiBhY2Nlc3MgdG8gdGhlCisgKiBmaWxlc3lzdGVtLiBJZiB0
aGUgd2ViIHByb2Nlc3Mgc2FuZGJveCBpcyBlbmFibGVkIGFuZCB0aGUgd2ViIHByb2Nlc3MKKyAq
IGF0dGVtcHRzIHRvIGFjY2VzcyBhIGZpbGUgdGhhdCBpcyBub3Qgd2hpdGVsaXN0ZWQgdXNpbmcg
YSBmdW5jdGlvbiBsaWtlCisgKiBvcGVuKCksIHRoZSBjYWxsIHdpbGwgZmFpbC4KKyAqCisgKiBU
aGUgbmV3IHBlcm1pc3Npb24gd2lsbCBiZSBncmFudGVkIG9ubHkgdG8gd2ViIHByb2Nlc3NlcyB0
aGF0IGhhdmUgbm90IHlldAorICogYmVlbiBjcmVhdGVkLiAjV2ViS2l0V2ViQ29udGV4dDo6aW5p
dGlhbGl6ZS13ZWItZXh0ZW5zaW9ucyBzaWduYWxzIHRoZSBsYXN0CisgKiBwb3NzaWJsZSBvcHBv
cnR1bml0eSB0byB1c2UgdGhpcyBmdW5jdGlvbiBiZWZvcmUgdGhlIGZpcnN0IHdlYiBwcm9jZXNz
IGlzCisgKiBjcmVhdGVkLgorICoKKyAqIFNpbmNlOiAyLjgKKyAqLwordm9pZCB3ZWJraXRfd2Vi
X2NvbnRleHRfYWRkX2ZpbGVzeXN0ZW1fc2FuZGJveF9leHRlbnNpb24oV2ViS2l0V2ViQ29udGV4
dCogY29udGV4dCwgY29uc3QgZ2NoYXIqIHBhdGgsIFdlYktpdEZpbGVzeXN0ZW1QZXJtaXNzaW9u
IHBlcm1pc3Npb24sIFdlYktpdEZpbGVzeXN0ZW1QZXJtaXNzaW9uVHlwZSBwZXJtaXNzaW9uX3R5
cGUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4
dCkpOworCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKyAgICBHVW5pcXVlUHRyPGNoYXI+
IGZpbHRlclBhdGgoZ19zdHJkdXAocGF0aCkpOworICAgIGlmIChnX3N0cl9oYXNfc3VmZml4KHBh
dGgsIEdfRElSX1NFUEFSQVRPUl9TKSkgeworICAgICAgICBpZiAocGVybWlzc2lvbl90eXBlID09
IFdFQktJVF9GSUxFU1lTVEVNX1BFUk1JU1NJT05fVFlQRV9ESVJFQ1RPUlkpIHsKKyAgICAgICAg
ICAgIGZpbHRlclBhdGguZ2V0KClbc3RybGVuKHBhdGgpIC0gMV0gPSAnXDAnOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZ19hc3NlcnQocGVybWlzc2lvbl90eXBlID09IFdFQktJVF9G
SUxFU1lTVEVNX1BFUk1JU1NJT05fVFlQRV9GSUxFKTsKKyAgICAgICAgICAgIGdfZXJyb3IoIkZp
bGUgZmlsdGVyICVzIHNob3VsZCBub3QgZW5kIHdpdGggYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIiwg
cGF0aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0
Y2ggKHBlcm1pc3Npb24pIHsKKyAgICBjYXNlIFdFQktJVF9GSUxFU1lTVEVNX1BFUk1JU1NJT05f
UkVBRDoKKyAgICAgICAgaWYgKHBlcm1pc3Npb25fdHlwZSA9PSBXRUJLSVRfRklMRVNZU1RFTV9Q
RVJNSVNTSU9OX1RZUEVfRElSRUNUT1JZKQorICAgICAgICAgICAgY29udGV4dC0+cHJpdi0+Y29u
dGV4dC0+YWRkRXh0cmFEaXJlY3RvcnlSZWFkUGVybWlzc2lvbihmaWx0ZXJQYXRoLmdldCgpKTsK
KyAgICAgICAgZWxzZSBpZiAocGVybWlzc2lvbl90eXBlID09IFdFQktJVF9GSUxFU1lTVEVNX1BF
Uk1JU1NJT05fVFlQRV9GSUxFKQorICAgICAgICAgICAgY29udGV4dC0+cHJpdi0+Y29udGV4dC0+
YWRkRXh0cmFGaWxlUmVhZFBlcm1pc3Npb24oZmlsdGVyUGF0aC5nZXQoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV0VCS0lUX0ZJTEVTWVNURU1fUEVSTUlTU0lPTl9XUklURToKKyAgICAgICAgaWYg
KHBlcm1pc3Npb25fdHlwZSA9PSBXRUJLSVRfRklMRVNZU1RFTV9QRVJNSVNTSU9OX1RZUEVfRElS
RUNUT1JZKQorICAgICAgICAgICAgY29udGV4dC0+cHJpdi0+Y29udGV4dC0+YWRkRXh0cmFEaXJl
Y3RvcnlXcml0ZVBlcm1pc3Npb24oZmlsdGVyUGF0aC5nZXQoKSk7CisgICAgICAgIGVsc2UgaWYg
KHBlcm1pc3Npb25fdHlwZSA9PSBXRUJLSVRfRklMRVNZU1RFTV9QRVJNSVNTSU9OX1RZUEVfRklM
RSkKKyAgICAgICAgICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPmFkZEV4dHJhRmlsZVdyaXRl
UGVybWlzc2lvbihmaWx0ZXJQYXRoLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Z19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRf
RklMRVNZU1RFTV9QRVJNSVNTSU9OX1JFQURfQU5EX1dSSVRFOgorICAgICAgICBpZiAocGVybWlz
c2lvbl90eXBlID09IFdFQktJVF9GSUxFU1lTVEVNX1BFUk1JU1NJT05fVFlQRV9ESVJFQ1RPUlkp
CisgICAgICAgICAgICBjb250ZXh0LT5wcml2LT5jb250ZXh0LT5hZGRFeHRyYURpcmVjdG9yeVJl
YWRBbmRXcml0ZVBlcm1pc3Npb24oZmlsdGVyUGF0aC5nZXQoKSk7CisgICAgICAgIGVsc2UgaWYg
KHBlcm1pc3Npb25fdHlwZSA9PSBXRUJLSVRfRklMRVNZU1RFTV9QRVJNSVNTSU9OX1RZUEVfRklM
RSkKKyAgICAgICAgICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPmFkZEV4dHJhRmlsZVJlYWRB
bmRXcml0ZVBlcm1pc3Npb24oZmlsdGVyUGF0aC5nZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0ocGF0aCk7CisgICAgVU5VU0VEX1BBUkFNKHBlcm1pc3Npb24pOworICAgIFVO
VVNFRF9QQVJBTShwZXJtaXNzaW9uX3R5cGUpOworI2VuZGlmCit9CisKIFdlYktpdERvd25sb2Fk
KiB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZChEb3dubG9hZFByb3h5KiBkb3du
bG9hZFByb3h5KQogewogICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gZG93
bmxvYWRzTWFwKCkuZ2V0KGRvd25sb2FkUHJveHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCmluZGV4IDhjNDI4YzIuLjQ4ZjAz
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJDb250ZXh0LmgKQEAgLTYyLDYgKzYyLDQ0IEBAIHR5cGVkZWYgZW51bSB7CiB9IFdlYktpdENh
Y2hlTW9kZWw7CiAKIC8qKgorICogV2ViS2l0RmlsZXN5c3RlbVBlcm1pc3Npb246CisgKiBAV0VC
S0lUX0ZJTEVTWVNURU1fUEVSTUlTU0lPTl9SRUFEOiBHcmFudCB0aGUgd2ViIHByb2Nlc3MgcmVh
ZCBhY2Nlc3MgdG8gYQorICogICBmaWxlIG9yIGRpcmVjdG9yeS4KKyAqIEBXRUJLSVRfRklMRVNZ
U1RFTV9QRVJNSVNTSU9OX1dSSVRFOiBHcmFudCB0aGUgd2ViIHByb2Nlc3Mgd3JpdGUgYWNjZXNz
IHRvIGEKKyAqICAgZmlsZSBvciBkaXJlY3RvcnkuIEZvciBkaXJlY3RvcnkgcGVybWlzc2lvbnMg
KGJ1dCBub3QgZm9yIGZpbGUKKyAqICAgcGVybWlzc2lvbnMpLCB0aGlzIGluY2x1ZGVzIHRoZSBh
YmlsaXR5IHRvIGNyZWF0ZSBuZXcgZmlsZXMgaW4gdGhlCisgKiAgIGRpcmVjdG9yeS4KKyAqIEBX
RUJLSVRfRklMRVNZU1RFTV9QRVJNSVNTSU9OX1JFQURfQU5EX1dSSVRFOiBHcmFudCB0aGUgd2Vi
IHByb2Nlc3MgYm90aCByZWFkCisgKiAgIGFuZCB3cml0ZSBhY2Nlc3MgdG8gYSBmaWxlIG9yIGRp
cmVjdG9yeS4KKyAqCisgKiBFbnVtIHZhbHVlcyB1c2VkIHRvIGRlbm90ZSB0aGUgcGVybWlzc2lv
bnMgdGhlIHdlYiBwcm9jZXNzIHNob3VsZCBoYXZlIGZvciBhCisgKiBmaWxlIG9yIGRpcmVjdG9y
eS4KKyAqCisgKiBTaW5jZTogMi44CisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX0ZJ
TEVTWVNURU1fUEVSTUlTU0lPTl9SRUFELAorICAgIFdFQktJVF9GSUxFU1lTVEVNX1BFUk1JU1NJ
T05fV1JJVEUsCisgICAgV0VCS0lUX0ZJTEVTWVNURU1fUEVSTUlTU0lPTl9SRUFEX0FORF9XUklU
RQorfSBXZWJLaXRGaWxlc3lzdGVtUGVybWlzc2lvbjsKKworLyoqCisgKiBXZWJLaXRGaWxlc3lz
dGVtUGVybWlzc2lvblR5cGU6CisgKiBAV0VCS0lUX0ZJTEVTWVNURU1fUEVSTUlTU0lPTl9UWVBF
X0RJUkVDVE9SWTogR3JhbnQgdGhlIHdlYiBwcm9jZXNzIGFjY2VzcyB0bworICogICBhbiBlbnRp
cmUgZGlyZWN0b3J5LCBpbmNsdWRpbmcgYWxsIHN1YmRpcmVjdG9yaWVzLgorICogQFdFQktJVF9G
SUxFU1lTVEVNX1BFUk1JU1NJT05fVFlQRV9GSUxFOiBHcmFudCB0aGUgd2ViIHByb2Nlc3MgYWNj
ZXNzIHRvIGEKKyAqICAgc2luZ2xlIGZpbGUuIFRoZSBmaWxlIG11c3QgYWxyZWFkeSBleGlzdC4K
KyAqCisgKiBFbnVtIHZhbHVlcyB1c2VkIHRvIHByb3ZpZGUgdGhlIHdlYiBwcm9jZXNzIHdpdGgg
YWNjZXNzIHRvIHRoZSBmaWxlc3lzdGVtLgorICoKKyAqIFNpbmNlOiAyLjgKKyAqLwordHlwZWRl
ZiBlbnVtIHsKKyAgV0VCS0lUX0ZJTEVTWVNURU1fUEVSTUlTU0lPTl9UWVBFX0RJUkVDVE9SWSwK
KyAgV0VCS0lUX0ZJTEVTWVNURU1fUEVSTUlTU0lPTl9UWVBFX0ZJTEUKK30gV2ViS2l0RmlsZXN5
c3RlbVBlcm1pc3Npb25UeXBlOworCisvKioKICAqIFdlYktpdFByb2Nlc3NNb2RlbDoKICAqIEBX
RUJLSVRfUFJPQ0VTU19NT0RFTF9TSEFSRURfU0VDT05EQVJZX1BST0NFU1M6IFVzZSBhIHNpbmds
ZSBwcm9jZXNzIHRvCiAgKiAgIHBlcmZvcm0gY29udGVudCByZW5kZXJpbmcuIFRoZSBwcm9jZXNz
IGlzIHNoYXJlZCBhbW9uZyBhbGwgdGhlCkBAIC0yMzEsNiArMjY5LDEyIEBAIHdlYmtpdF93ZWJf
Y29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfaW5pdGlhbGl6YXRpb25fdXNlcl9kYXRhCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdWYXJpYW50
ICAgICAgICAgICAgICAgICAgICAgICp1c2VyX2RhdGEpOwogCiBXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF93ZWJfY29udGV4dF9hZGRfZmlsZXN5c3RlbV9zYW5kYm94X2V4dGVuc2lvbiAoV2ViS2l0
V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAg
ICAgICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRGaWxlc3lzdGVtUGVybWlzc2lvbiAgICAgcGVybWlzc2lvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Rmls
ZXN5c3RlbVBlcm1pc3Npb25UeXBlIHBlcm1pc3Npb25fdHlwZSk7CisKK1dFQktJVF9BUEkgdm9p
ZAogd2Via2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAg
ICAgICAgICAgKmhvc3RuYW1lKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggZjM2
NmQwYS4uMDA1MWMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC0yNSw2ICsyNSw4
IEBAIFdFQktJVF9ERVBSRUNBVEVEX0ZPUgogPFRJVExFPldlYktpdFdlYkNvbnRleHQ8L1RJVExF
PgogV2ViS2l0V2ViQ29udGV4dAogV2ViS2l0Q2FjaGVNb2RlbAorV2ViS2l0RmlsZXN5c3RlbVBl
cm1pc3Npb24KK1dlYktpdEZpbGVzeXN0ZW1QZXJtaXNzaW9uVHlwZQogV2ViS2l0UHJvY2Vzc01v
ZGVsCiBXZWJLaXRUTFNFcnJvcnNQb2xpY3kKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVs
dApAQCAtNTAsNiArNTIsNyBAQCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Rsc19lcnJvcnNfcG9s
aWN5CiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3Rsc19lcnJvcnNfcG9saWN5CiB3ZWJraXRfd2Vi
X2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeQogd2Via2l0X3dlYl9jb250ZXh0
X3NldF93ZWJfZXh0ZW5zaW9uc19pbml0aWFsaXphdGlvbl91c2VyX2RhdGEKK3dlYmtpdF93ZWJf
Y29udGV4dF9hZGRfZmlsZXN5c3RlbV9zYW5kYm94X2V4dGVuc2lvbgogd2Via2l0X3dlYl9jb250
ZXh0X3ByZWZldGNoX2Rucwogd2Via2l0X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVj
dG9yeQogd2Via2l0X3dlYl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCmluZGV4IDM2NjQzOTIuLjQ4Yjlk
N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKQEAgLTcwNiw2ICs3
MDYsMTcgQEAgV2ViUHJvY2Vzc1Byb3h5JiBXZWJDb250ZXh0OjpjcmVhdGVOZXdXZWJQcm9jZXNz
KCkKICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IGluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25V
c2VyRGF0YSA9IG1faW5qZWN0ZWRCdW5kbGVDbGllbnQuZ2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFs
aXphdGlvblVzZXJEYXRhKHRoaXMpOwogICAgIGlmICghaW5qZWN0ZWRCdW5kbGVJbml0aWFsaXph
dGlvblVzZXJEYXRhKQogICAgICAgICBpbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRh
dGEgPSBtX2luamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YTsKKworI2lmIEVOQUJM
RShTRUNDT01QX0ZJTFRFUlMpCisgICAgLy8gVGhlc2UgbWF5IGJlIHNldCBhcyBsYXRlIGFzIGR1
cmluZyB0aGUgY2FsbCB0byBtX2luamVjdGVkQnVuZGxlQ2xpZW50LmdldEluamVjdGVkQnVuZGxl
SW5pdGlhbGl6YXRpb25Vc2VyRGF0YSgpLgorICAgIHBhcmFtZXRlcnMuZXh0cmFEaXJlY3RvcnlS
ZWFkUGVybWlzc2lvbnMgPSBtX2V4dHJhRGlyZWN0b3J5UmVhZFBlcm1pc3Npb25zOworICAgIHBh
cmFtZXRlcnMuZXh0cmFEaXJlY3RvcnlXcml0ZVBlcm1pc3Npb25zID0gbV9leHRyYURpcmVjdG9y
eVdyaXRlUGVybWlzc2lvbnM7CisgICAgcGFyYW1ldGVycy5leHRyYURpcmVjdG9yeVJlYWRBbmRX
cml0ZVBlcm1pc3Npb25zID0gbV9leHRyYURpcmVjdG9yeVJlYWRBbmRXcml0ZVBlcm1pc3Npb25z
OworICAgIHBhcmFtZXRlcnMuZXh0cmFGaWxlUmVhZFBlcm1pc3Npb25zID0gbV9leHRyYUZpbGVS
ZWFkUGVybWlzc2lvbnM7CisgICAgcGFyYW1ldGVycy5leHRyYUZpbGVXcml0ZVBlcm1pc3Npb25z
ID0gbV9leHRyYUZpbGVXcml0ZVBlcm1pc3Npb25zOworICAgIHBhcmFtZXRlcnMuZXh0cmFGaWxl
UmVhZEFuZFdyaXRlUGVybWlzc2lvbnMgPSBtX2V4dHJhRmlsZVJlYWRBbmRXcml0ZVBlcm1pc3Np
b25zOworI2VuZGlmCisKICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpJ
bml0aWFsaXplV2ViUHJvY2VzcyhwYXJhbWV0ZXJzLCBXZWJDb250ZXh0VXNlck1lc3NhZ2VFbmNv
ZGVyKGluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YS5nZXQoKSwgcHJvY2Vzcykp
LCAwKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMTQ5Myw0ICsxNTA0LDM2IEBAIHZvaWQg
V2ViQ29udGV4dDo6c2V0TWVtb3J5Q2FjaGVEaXNhYmxlZChib29sIGRpc2FibGVkKQogICAgIHNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0TWVtb3J5Q2FjaGVEaXNh
YmxlZChkaXNhYmxlZCkpOwogfQogCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKK3ZvaWQg
V2ViQ29udGV4dDo6YWRkRXh0cmFEaXJlY3RvcnlSZWFkUGVybWlzc2lvbihjb25zdCBjaGFyKiBw
YXRoKQoreworICAgIG1fZXh0cmFEaXJlY3RvcnlSZWFkUGVybWlzc2lvbnMuYXBwZW5kKFN0cmlu
Zzo6ZnJvbVVURjgocGF0aCkpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OmFkZEV4dHJhRGlyZWN0
b3J5V3JpdGVQZXJtaXNzaW9uKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgbV9leHRyYURpcmVj
dG9yeVdyaXRlUGVybWlzc2lvbnMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgocGF0aCkpOworfQor
Cit2b2lkIFdlYkNvbnRleHQ6OmFkZEV4dHJhRGlyZWN0b3J5UmVhZEFuZFdyaXRlUGVybWlzc2lv
bihjb25zdCBjaGFyKiBwYXRoKQoreworICAgIG1fZXh0cmFEaXJlY3RvcnlSZWFkQW5kV3JpdGVQ
ZXJtaXNzaW9ucy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChwYXRoKSk7Cit9CisKK3ZvaWQgV2Vi
Q29udGV4dDo6YWRkRXh0cmFGaWxlUmVhZFBlcm1pc3Npb24oY29uc3QgY2hhciogcGF0aCkKK3sK
KyAgICBtX2V4dHJhRmlsZVJlYWRQZXJtaXNzaW9ucy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChw
YXRoKSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6YWRkRXh0cmFGaWxlV3JpdGVQZXJtaXNzaW9u
KGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgbV9leHRyYUZpbGVXcml0ZVBlcm1pc3Npb25zLmFw
cGVuZChTdHJpbmc6OmZyb21VVEY4KHBhdGgpKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjphZGRF
eHRyYUZpbGVSZWFkQW5kV3JpdGVQZXJtaXNzaW9uKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAg
bV9leHRyYUZpbGVSZWFkQW5kV3JpdGVQZXJtaXNzaW9ucy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRG
OChwYXRoKSk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkNvbnRleHQuaAppbmRleCAzMjlmOThlLi40YmU3ZTNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKQEAgLTM2NSw2ICszNjUsMTUgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVy
LnRva2VuPFByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW5UeXBlPigpOwogICAgIH0KIAor
I2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisgICAgdm9pZCBhZGRFeHRyYURpcmVjdG9yeVJl
YWRQZXJtaXNzaW9uKGNvbnN0IGNoYXIqIHBhdGgpOworICAgIHZvaWQgYWRkRXh0cmFEaXJlY3Rv
cnlXcml0ZVBlcm1pc3Npb24oY29uc3QgY2hhciogcGF0aCk7CisgICAgdm9pZCBhZGRFeHRyYURp
cmVjdG9yeVJlYWRBbmRXcml0ZVBlcm1pc3Npb24oY29uc3QgY2hhciogcGF0aCk7CisgICAgdm9p
ZCBhZGRFeHRyYUZpbGVSZWFkUGVybWlzc2lvbihjb25zdCBjaGFyKiBwYXRoKTsKKyAgICB2b2lk
IGFkZEV4dHJhRmlsZVdyaXRlUGVybWlzc2lvbihjb25zdCBjaGFyKiBwYXRoKTsKKyAgICB2b2lk
IGFkZEV4dHJhRmlsZVJlYWRBbmRXcml0ZVBlcm1pc3Npb24oY29uc3QgY2hhciogcGF0aCk7Cisj
ZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01
MjcsNiArNTM2LDE1IEBAIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBtX2lu
aXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0VDQ09N
UF9GSUxURVJTKQorICAgIFZlY3RvcjxTdHJpbmc+IG1fZXh0cmFEaXJlY3RvcnlSZWFkUGVybWlz
c2lvbnM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9leHRyYURpcmVjdG9yeVdyaXRlUGVybWlzc2lv
bnM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9leHRyYURpcmVjdG9yeVJlYWRBbmRXcml0ZVBlcm1p
c3Npb25zOworICAgIFZlY3RvcjxTdHJpbmc+IG1fZXh0cmFGaWxlUmVhZFBlcm1pc3Npb25zOwor
ICAgIFZlY3RvcjxTdHJpbmc+IG1fZXh0cmFGaWxlV3JpdGVQZXJtaXNzaW9uczsKKyAgICBWZWN0
b3I8U3RyaW5nPiBtX2V4dHJhRmlsZVJlYWRBbmRXcml0ZVBlcm1pc3Npb25zOworI2VuZGlmCisK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgUmV0YWluUHRyPE5TT2JqZWN0PiBtX2VuaGFuY2VkQWNj
ZXNzaWJpbGl0eU9ic2VydmVyOwogICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9hdXRvbWF0aWNU
ZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25PYnNlcnZlcjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjMDc2OTZmLi5jNWQwZWQwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDAg
QEAKIDIwMTUtMDEtMDQgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEFkZCBBUEkgZm9yIHdlYiBwcm9jZXNzIGZpbGVzeXN0ZW0gc2Fu
ZGJveCBleHRlbnNpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDAwNzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOZXcgdGVzdHMKKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFNhbmRib3hFeHRlbnNpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChjbGVhckFu
ZERlbGV0ZUZpbGUpOgorICAgICAgICAoZGVsZXRlRmlsZUlmUHJlc2VudCk6CisgICAgICAgIChk
ZWxldGVGaWxlKToKKyAgICAgICAgKGNyZWF0ZUZpbGVGcm9tQ3VycmVudFByb2Nlc3MpOgorICAg
ICAgICAoY3JlYXRlRmlsZUZyb21XZWJQcm9jZXNzKToKKyAgICAgICAgKGVuc3VyZVdlYlByb2Nl
c3NGaWxlQ3JlYXRpb25TdWNjZWVkcyk6CisgICAgICAgIChlbnN1cmVXZWJQcm9jZXNzRmlsZUNy
ZWF0aW9uRmFpbHMpOgorICAgICAgICAob3BlbkZpbGVGcm9tV2ViUHJvY2Vzcyk6CisgICAgICAg
IChlbnN1cmVXZWJQcm9jZXNzRmlsZU9wZW5TdWNjZWVkcyk6CisgICAgICAgIChlbnN1cmVXZWJQ
cm9jZXNzRmlsZU9wZW5GYWlscyk6CisgICAgICAgIChjcmVhdGVXZWJFeHRlbnNpb25Qcm94eSk6
CisgICAgICAgICh0ZXN0UmVhZE9ubHlEaXJlY3RvcnlTYW5kYm94RXh0ZW5zaW9uKToKKyAgICAg
ICAgKHRlc3RXcml0ZU9ubHlEaXJlY3RvcnlTYW5kYm94RXh0ZW5zaW9uKToKKyAgICAgICAgKHRl
c3RSZWFkQW5kV3JpdGVEaXJlY3RvcnlTYW5kYm94RXh0ZW5zaW9uKToKKyAgICAgICAgKHRlc3RS
ZWFkT25seUZpbGVTYW5kYm94RXh0ZW5zaW9uKToKKyAgICAgICAgKHRlc3RXcml0ZU9ubHlGaWxl
U2FuZGJveEV4dGVuc2lvbik6CisgICAgICAgICh0ZXN0UmVhZEFuZFdyaXRlRmlsZVNhbmRib3hF
eHRlbnNpb24pOgorICAgICAgICAodGVzdEZpbGVTYW5kYm94RXh0ZW5zaW9uV2l0aFRyYWlsaW5n
U2xhc2gpOgorICAgICAgICAodGVzdEZpbGVTYW5kYm94RXh0ZW5zaW9uRm9yTm9uZXhpc3RlbnRG
aWxlKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYkV4dGVuc2lvblRlc3QuY3BwOgor
ICAgICAgICAobWV0aG9kQ2FsbENhbGxiYWNrKToKKworMjAxNS0wMS0wNCAgTWljaGFlbCBDYXRh
bnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gRW5hYmxlIHNl
Y2NvbXAgZmlsdGVycyBieSBkZWZhdWx0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDAwNzIKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL0NNYWtlTGlzdHMudHh0CmluZGV4IDcyZWQ0NWQuLjc2NTY0NmYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQ01ha2VMaXN0
cy50eHQKQEAgLTExNyw2ICsxMTcsMTAgQEAgQUREX1dLMl9URVNUKFRlc3RXZWJLaXRXZWJDb250
ZXh0IFRlc3RXZWJLaXRXZWJDb250ZXh0LmNwcCkKIEFERF9XSzJfVEVTVChUZXN0V2ViS2l0V2Vi
VmlldyBUZXN0V2ViS2l0V2ViVmlldy5jcHApCiBBRERfV0syX1RFU1QoVGVzdFdlYktpdFVzZXJD
b250ZW50TWFuYWdlciBUZXN0V2ViS2l0VXNlckNvbnRlbnRNYW5hZ2VyLmNwcCkKIAoraWYgKEVO
QUJMRV9TRUNDT01QX0ZJTFRFUlMpCisgICAgQUREX1dLMl9URVNUKFRlc3RTYW5kYm94RXh0ZW5z
aW9ucyBUZXN0U2FuZGJveEV4dGVuc2lvbnMuY3BwKQorZW5kaWYgKCkKKwogaWYgKEFUU1BJX0ZP
VU5EKQogICAgIEFERF9XSzJfVEVTVChBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciBBY2Nlc3NpYmls
aXR5VGVzdFNlcnZlci5jcHApCiAgICAgQUREX1dLMl9URVNUKFRlc3RXZWJLaXRBY2Nlc3NpYmls
aXR5IFRlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0U2FuZGJveEV4dGVuc2lvbnMuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTYW5kYm94RXh0ZW5zaW9ucy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1OTZkMgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0U2FuZGJv
eEV4dGVuc2lvbnMuY3BwCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIs
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJLaXRU
ZXN0QnVzLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDxmY250bC5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIFdlYktpdFRlc3RCdXMq
IGJ1czsKKworc3RhdGljIHZvaWQgY2xlYXJBbmREZWxldGVGaWxlKEdGaWxlKiBmaWxlKQorewor
ICAgIGlmICghZmlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19maWxlX2RlbGV0ZShmaWxl
LCBudWxscHRyLCBudWxscHRyKTsKKyAgICBnX29iamVjdF91bnJlZihmaWxlKTsKK30KKworY2xh
c3MgU2VjY29tcEZpbHRlcnNUZXN0OiBwdWJsaWMgVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShTZWNjb21wRmlsdGVyc1Rlc3QpOworCisgICAgU2VjY29tcEZpbHRl
cnNUZXN0KCkKKyAgICAgICAgOiBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldyhudWxscHRyLCBU
UlVFKSkKKyAgICAgICAgLCBtX3dlYlZpZXcoV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X3JlZl9z
aW5rKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0KG1fd2ViQ29udGV4dC5nZXQoKSkp
KSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+U2VjY29tcEZpbHRlcnNUZXN0KCkKKyAg
ICB7CisgICAgICAgIGNsZWFyQW5kRGVsZXRlRmlsZShtX3JlYWRPbmx5RmlsZSk7CisgICAgICAg
IGNsZWFyQW5kRGVsZXRlRmlsZShtX3dyaXRlT25seUZpbGUpOworICAgICAgICBjbGVhckFuZERl
bGV0ZUZpbGUobV9yZWFkQW5kV3JpdGVGaWxlKTsKKyAgICAgICAgY2xlYXJBbmREZWxldGVGaWxl
KG1faW5pdGlhbGx5Tm9uZXhpc3RlbnRGaWxlKTsKKworICAgICAgICBjbGVhckFuZERlbGV0ZUZp
bGUobV9yZWFkT25seURpcmVjdG9yeSk7CisgICAgICAgIGNsZWFyQW5kRGVsZXRlRmlsZShtX3dy
aXRlT25seURpcmVjdG9yeSk7CisgICAgICAgIGNsZWFyQW5kRGVsZXRlRmlsZShtX3JlYWRBbmRX
cml0ZURpcmVjdG9yeSk7CisgICAgICAgIGNsZWFyQW5kRGVsZXRlRmlsZShtX3Vud2hpdGVsaXN0
ZWREaXJlY3RvcnkpOworCisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViVmlldyk7CisgICAg
ICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIC8vIFByb2hp
Yml0IG92ZXJyaWRlcyBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIHdlYiB2aWV3IGlz
IGNyZWF0ZWQKKyAgICAvLyBpbiBvdXIgY29uc3RydWN0b3IsIGJlZm9yZSBhIGRlcml2ZWQgY2xh
c3MncyB2dGFibGUgaXMgcmVhZHkuCisgICAgdm9pZCBpbml0aWFsaXplV2ViRXh0ZW5zaW9ucygp
IG92ZXJyaWRlIGZpbmFsCisgICAgeworICAgICAgICAvLyBDYW4ndCB1c2UgYSB0bXAgZGlyZWN0
b3J5IHNpbmNlIGl0IHdvdWxkIGJlIHdoaXRlbGlzdGVkLgorICAgICAgICBHVW5pcXVlUHRyPGNo
YXI+IHVud2hpdGVsaXN0ZWREaXJlY3RvcnlQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNl
cl9kYXRhX2RpcigpLCAid2Via2l0Z3RrIiwgIlNlY2NvbXBGaWx0ZXJzVGVzdCIsIG51bGxwdHIp
KTsKKyAgICAgICAgbV91bndoaXRlbGlzdGVkRGlyZWN0b3J5ID0gZ19maWxlX25ld19mb3JfcGF0
aCh1bndoaXRlbGlzdGVkRGlyZWN0b3J5UGF0aC5nZXQoKSk7CisgICAgICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgZ19maWxlX21ha2VfZGlyZWN0b3J5X3dpdGhfcGFy
ZW50cyhtX3Vud2hpdGVsaXN0ZWREaXJlY3RvcnksIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSk7
CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIGdfYXNzZXJ0KGdfZXJyb3JfbWF0Y2hl
cyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9FWElTVFMpKTsKKworICAgICAg
ICBHVW5pcXVlUHRyPGNoYXI+IHJlYWRPbmx5RGlyZWN0b3J5UGF0aChnX2J1aWxkX2ZpbGVuYW1l
KHVud2hpdGVsaXN0ZWREaXJlY3RvcnlQYXRoLmdldCgpLCAiUmVhZE9ubHlEaXJlY3RvcnkiLCBu
dWxscHRyKSk7CisgICAgICAgIG1fcmVhZE9ubHlEaXJlY3RvcnkgPSBnX2ZpbGVfbmV3X2Zvcl9w
YXRoKHJlYWRPbmx5RGlyZWN0b3J5UGF0aC5nZXQoKSk7CisgICAgICAgIGdfZmlsZV9tYWtlX2Rp
cmVjdG9yeV93aXRoX3BhcmVudHMobV9yZWFkT25seURpcmVjdG9yeSwgbnVsbHB0ciwgJmVycm9y
Lm91dFB0cigpKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZ19hc3NlcnQoZ19l
cnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0VYSVNUUykp
OworCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gd3JpdGVPbmx5RGlyZWN0b3J5UGF0aChnX2J1
aWxkX2ZpbGVuYW1lKHVud2hpdGVsaXN0ZWREaXJlY3RvcnlQYXRoLmdldCgpLCAiV3JpdGVPbmx5
RGlyZWN0b3J5IiwgbnVsbHB0cikpOworICAgICAgICBtX3dyaXRlT25seURpcmVjdG9yeSA9IGdf
ZmlsZV9uZXdfZm9yX3BhdGgod3JpdGVPbmx5RGlyZWN0b3J5UGF0aC5nZXQoKSk7CisgICAgICAg
IGdfZmlsZV9tYWtlX2RpcmVjdG9yeV93aXRoX3BhcmVudHMobV93cml0ZU9ubHlEaXJlY3Rvcnks
IG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAg
ICAgIGdfYXNzZXJ0KGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19J
T19FUlJPUl9FWElTVFMpKTsKKworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHRtcChnX2J1aWxk
X2ZpbGVuYW1lKHVud2hpdGVsaXN0ZWREaXJlY3RvcnlQYXRoLmdldCgpLCAiUmVhZEFuZFdyaXRl
RGlyZWN0b3J5IiwgbnVsbHB0cikpOworICAgICAgICAvLyBNYWtlIHN1cmUgYSB0cmFpbGluZyBz
bGFzaCBpcyBpZ25vcmVkLgorICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHJlYWRBbmRXcml0ZURp
cmVjdG9yeVBhdGgoZ19zdHJkdXBfcHJpbnRmKCIlcyIgR19ESVJfU0VQQVJBVE9SX1MsIHRtcC5n
ZXQoKSkpOworICAgICAgICBtX3JlYWRBbmRXcml0ZURpcmVjdG9yeSA9IGdfZmlsZV9uZXdfZm9y
X3BhdGgocmVhZEFuZFdyaXRlRGlyZWN0b3J5UGF0aC5nZXQoKSk7CisgICAgICAgIGdfZmlsZV9t
YWtlX2RpcmVjdG9yeV93aXRoX3BhcmVudHMobV9yZWFkQW5kV3JpdGVEaXJlY3RvcnksIG51bGxw
dHIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIGdf
YXNzZXJ0KGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJP
Ul9FWElTVFMpKTsKKworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHJlYWRPbmx5RmlsZVBhdGgo
Z19idWlsZF9maWxlbmFtZSh1bndoaXRlbGlzdGVkRGlyZWN0b3J5UGF0aC5nZXQoKSwgIlJlYWRP
bmx5RmlsZSIsIG51bGxwdHIpKTsKKyAgICAgICAgbV9yZWFkT25seUZpbGUgPSBnX2ZpbGVfbmV3
X2Zvcl9wYXRoKHJlYWRPbmx5RmlsZVBhdGguZ2V0KCkpOworICAgICAgICBnX2ZpbGVfY3JlYXRl
KG1fcmVhZE9ubHlGaWxlLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxwdHIsICZlcnJvci5vdXRQ
dHIoKSk7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIGdfYXNzZXJ0KGdfZXJyb3Jf
bWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9FWElTVFMpKTsKKwor
ICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHdyaXRlT25seUZpbGVQYXRoKGdfYnVpbGRfZmlsZW5h
bWUodW53aGl0ZWxpc3RlZERpcmVjdG9yeVBhdGguZ2V0KCksICJXcml0ZU9ubHlGaWxlIiwgbnVs
bHB0cikpOworICAgICAgICBtX3dyaXRlT25seUZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKHdy
aXRlT25seUZpbGVQYXRoLmdldCgpKTsKKyAgICAgICAgZ19maWxlX2NyZWF0ZShtX3dyaXRlT25s
eUZpbGUsIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKTsKKyAg
ICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVy
cm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0VYSVNUUykpOworCisgICAgICAgIEdV
bmlxdWVQdHI8Y2hhcj4gcmVhZEFuZFdyaXRlRmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZSh1bndo
aXRlbGlzdGVkRGlyZWN0b3J5UGF0aC5nZXQoKSwgIlJlYWRBbmRXcml0ZUZpbGUiLCBudWxscHRy
KSk7CisgICAgICAgIG1fcmVhZEFuZFdyaXRlRmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgocmVh
ZEFuZFdyaXRlRmlsZVBhdGguZ2V0KCkpOworICAgICAgICBnX2ZpbGVfY3JlYXRlKG1fcmVhZEFu
ZFdyaXRlRmlsZSwgR19GSUxFX0NSRUFURV9OT05FLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkp
OworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBnX2Fzc2VydChnX2Vycm9yX21hdGNo
ZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfRVhJU1RTKSk7CisKKyAgICAg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBpbml0aWFsbHlOb25leGlzdGVudEZpbGVQYXRoKGdfYnVpbGRf
ZmlsZW5hbWUodW53aGl0ZWxpc3RlZERpcmVjdG9yeVBhdGguZ2V0KCksICJOb25leGlzdGVudEZp
bGUiLCBudWxscHRyKSk7CisgICAgICAgIG1faW5pdGlhbGx5Tm9uZXhpc3RlbnRGaWxlID0gZ19m
aWxlX25ld19mb3JfcGF0aChpbml0aWFsbHlOb25leGlzdGVudEZpbGVQYXRoLmdldCgpKTsKKwor
ICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfYWRkX2ZpbGVzeXN0ZW1fc2FuZGJveF9leHRlbnNp
b24obV93ZWJDb250ZXh0LmdldCgpLCByZWFkT25seURpcmVjdG9yeVBhdGguZ2V0KCksCisgICAg
ICAgICAgICBXRUJLSVRfRklMRVNZU1RFTV9QRVJNSVNTSU9OX1JFQUQsIFdFQktJVF9GSUxFU1lT
VEVNX1BFUk1JU1NJT05fVFlQRV9ESVJFQ1RPUlkpOworICAgICAgICB3ZWJraXRfd2ViX2NvbnRl
eHRfYWRkX2ZpbGVzeXN0ZW1fc2FuZGJveF9leHRlbnNpb24obV93ZWJDb250ZXh0LmdldCgpLCB3
cml0ZU9ubHlEaXJlY3RvcnlQYXRoLmdldCgpLAorICAgICAgICAgICAgV0VCS0lUX0ZJTEVTWVNU
RU1fUEVSTUlTU0lPTl9XUklURSwgV0VCS0lUX0ZJTEVTWVNURU1fUEVSTUlTU0lPTl9UWVBFX0RJ
UkVDVE9SWSk7CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9hZGRfZmlsZXN5c3RlbV9zYW5k
Ym94X2V4dGVuc2lvbihtX3dlYkNvbnRleHQuZ2V0KCksIHJlYWRBbmRXcml0ZURpcmVjdG9yeVBh
dGguZ2V0KCksCisgICAgICAgICAgICBXRUJLSVRfRklMRVNZU1RFTV9QRVJNSVNTSU9OX1JFQURf
QU5EX1dSSVRFLCBXRUJLSVRfRklMRVNZU1RFTV9QRVJNSVNTSU9OX1RZUEVfRElSRUNUT1JZKTsK
KyAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X2FkZF9maWxlc3lzdGVtX3NhbmRib3hfZXh0ZW5z
aW9uKG1fd2ViQ29udGV4dC5nZXQoKSwgcmVhZE9ubHlGaWxlUGF0aC5nZXQoKSwKKyAgICAgICAg
ICAgIFdFQktJVF9GSUxFU1lTVEVNX1BFUk1JU1NJT05fUkVBRCwgV0VCS0lUX0ZJTEVTWVNURU1f
UEVSTUlTU0lPTl9UWVBFX0ZJTEUpOworICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfYWRkX2Zp
bGVzeXN0ZW1fc2FuZGJveF9leHRlbnNpb24obV93ZWJDb250ZXh0LmdldCgpLCB3cml0ZU9ubHlG
aWxlUGF0aC5nZXQoKSwKKyAgICAgICAgICAgIFdFQktJVF9GSUxFU1lTVEVNX1BFUk1JU1NJT05f
V1JJVEUsIFdFQktJVF9GSUxFU1lTVEVNX1BFUk1JU1NJT05fVFlQRV9GSUxFKTsKKyAgICAgICAg
d2Via2l0X3dlYl9jb250ZXh0X2FkZF9maWxlc3lzdGVtX3NhbmRib3hfZXh0ZW5zaW9uKG1fd2Vi
Q29udGV4dC5nZXQoKSwgcmVhZEFuZFdyaXRlRmlsZVBhdGguZ2V0KCksCisgICAgICAgICAgICBX
RUJLSVRfRklMRVNZU1RFTV9QRVJNSVNTSU9OX1JFQURfQU5EX1dSSVRFLCBXRUJLSVRfRklMRVNZ
U1RFTV9QRVJNSVNTSU9OX1RZUEVfRklMRSk7CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9h
ZGRfZmlsZXN5c3RlbV9zYW5kYm94X2V4dGVuc2lvbihtX3dlYkNvbnRleHQuZ2V0KCksIGluaXRp
YWxseU5vbmV4aXN0ZW50RmlsZVBhdGguZ2V0KCksCisgICAgICAgICAgICBXRUJLSVRfRklMRVNZ
U1RFTV9QRVJNSVNTSU9OX1JFQURfQU5EX1dSSVRFLCBXRUJLSVRfRklMRVNZU1RFTV9QRVJNSVNT
SU9OX1RZUEVfRklMRSk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIGEgZmlsZSBwZXJtaXNzaW9u
IGhhcyBubyBlZmZlY3Qgb24gYSBkaXJlY3RvcnkuCisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4
dF9hZGRfZmlsZXN5c3RlbV9zYW5kYm94X2V4dGVuc2lvbihtX3dlYkNvbnRleHQuZ2V0KCksIHJl
YWRPbmx5RGlyZWN0b3J5UGF0aC5nZXQoKSwKKyAgICAgICAgICAgIFdFQktJVF9GSUxFU1lTVEVN
X1BFUk1JU1NJT05fV1JJVEUsIFdFQktJVF9GSUxFU1lTVEVNX1BFUk1JU1NJT05fVFlQRV9GSUxF
KTsKKworICAgICAgICBUZXN0Ojppbml0aWFsaXplV2ViRXh0ZW5zaW9ucygpOworICAgIH0KKwor
ICAgIEdGaWxlKiBtX3Vud2hpdGVsaXN0ZWREaXJlY3RvcnkgPSBudWxscHRyOworICAgIEdGaWxl
KiBtX3JlYWRPbmx5RGlyZWN0b3J5ID0gbnVsbHB0cjsKKyAgICBHRmlsZSogbV93cml0ZU9ubHlE
aXJlY3RvcnkgPSBudWxscHRyOworICAgIEdGaWxlKiBtX3JlYWRBbmRXcml0ZURpcmVjdG9yeSA9
IG51bGxwdHI7CisKKyAgICBHRmlsZSogbV9yZWFkT25seUZpbGUgPSBudWxscHRyOworICAgIEdG
aWxlKiBtX3dyaXRlT25seUZpbGUgPSBudWxscHRyOworICAgIEdGaWxlKiBtX3JlYWRBbmRXcml0
ZUZpbGUgPSBudWxscHRyOworICAgIEdGaWxlKiBtX2luaXRpYWxseU5vbmV4aXN0ZW50RmlsZSA9
IG51bGxwdHI7CisKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CisgICAgV2ViS2l0V2ViVmll
dyogbV93ZWJWaWV3OworfTsKKworc3RhdGljIHZvaWQgZGVsZXRlRmlsZUlmUHJlc2VudChHRmls
ZSogZmlsZSkKK3sKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZ19maWxl
X2RlbGV0ZShmaWxlLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikK
KyAgICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9S
LCBHX0lPX0VSUk9SX05PVF9GT1VORCkpOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVGaWxlKEdG
aWxlKiBmaWxlKQoreworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBnX2Zp
bGVfZGVsZXRlKGZpbGUsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQo
IWVycm9yKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlRmlsZUZyb21DdXJyZW50UHJvY2VzcyhH
RmlsZSogZmlsZSkKK3sKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZ19m
aWxlX2NyZWF0ZShmaWxlLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxwdHIsICZlcnJvci5vdXRQ
dHIoKSk7CisgICAgZ19hc3NlcnQoIWVycm9yKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlRmls
ZUZyb21XZWJQcm9jZXNzKEdGaWxlKiBmaWxlLCBHREJ1c1Byb3h5KiBwcm94eSkKK3sKKyAgICBj
b25zdCBjaGFyKiBwYXRoID0gZ19maWxlX2dldF9wYXRoKGZpbGUpOworICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1bHQgPSBhZG9wdEdS
ZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYygKKyAgICAgICAgcHJveHksCisgICAgICAgICJDcmVh
dGVGaWxlIiwKKyAgICAgICAgZ192YXJpYW50X25ldygiKHMpIiwgcGF0aCksCisgICAgICAgIEdf
REJVU19DQUxMX0ZMQUdTX05PTkUsCisgICAgICAgIC0xLCAwLCAmZXJyb3Iub3V0UHRyKCkpKTsK
KyAgICBnX2Fzc2VydCghZXJyb3IpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7Cit9CisKK3N0YXRp
YyB2b2lkIGVuc3VyZVdlYlByb2Nlc3NGaWxlQ3JlYXRpb25TdWNjZWVkcyhHRmlsZSogZmlsZSwg
R0RCdXNQcm94eSogcHJveHkpCit7CisgICAgY3JlYXRlRmlsZUZyb21XZWJQcm9jZXNzKGZpbGUs
IHByb3h5KTsKKyAgICBnX2Fzc2VydChnX2ZpbGVfcXVlcnlfZXhpc3RzKGZpbGUsIG51bGxwdHIp
KTsKK30KKworc3RhdGljIHZvaWQgZW5zdXJlV2ViUHJvY2Vzc0ZpbGVDcmVhdGlvbkZhaWxzKEdG
aWxlKiBmaWxlLCBHREJ1c1Byb3h5KiBwcm94eSkKK3sKKyAgICBjcmVhdGVGaWxlRnJvbVdlYlBy
b2Nlc3MoZmlsZSwgcHJveHkpOworICAgIGdfYXNzZXJ0KCFnX2ZpbGVfcXVlcnlfZXhpc3RzKGZp
bGUsIG51bGxwdHIpKTsKK30KKworc3RhdGljIGludCBvcGVuRmlsZUZyb21XZWJQcm9jZXNzKEdG
aWxlKiBmaWxlLCBpbnQgZmxhZ3MsIEdEQnVzUHJveHkqIHByb3h5KQoreworICAgIGNvbnN0IGNo
YXIqIHBhdGggPSBnX2ZpbGVfZ2V0X3BhdGgoZmlsZSk7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJy
b3I+IGVycm9yOworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX2Ri
dXNfcHJveHlfY2FsbF9zeW5jKAorICAgICAgICBwcm94eSwKKyAgICAgICAgIk9wZW5GaWxlIiwK
KyAgICAgICAgZ192YXJpYW50X25ldygiKHNpKSIsIHBhdGgsIGZsYWdzKSwKKyAgICAgICAgR19E
QlVTX0NBTExfRkxBR1NfTk9ORSwKKyAgICAgICAgLTEsIDAsICZlcnJvci5vdXRQdHIoKSkpOwor
ICAgIGdfYXNzZXJ0KCFlcnJvcik7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKworICAgIGludCBy
ZXQ7CisgICAgZ192YXJpYW50X2dldChyZXN1bHQuZ2V0KCksICIoaSkiLCAmcmV0KTsKKyAgICBy
ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBlbnN1cmVXZWJQcm9jZXNzRmlsZU9wZW5TdWNj
ZWVkcyhHRmlsZSogZmlsZSwgaW50IGZsYWdzLCBHREJ1c1Byb3h5KiBwcm94eSkKK3sKKyAgICBn
X2Fzc2VydF9jbXBpbnQob3BlbkZpbGVGcm9tV2ViUHJvY2VzcyhmaWxlLCBmbGFncywgcHJveHkp
LCA+PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGVuc3VyZVdlYlByb2Nlc3NGaWxlT3BlbkZhaWxz
KEdGaWxlKiBmaWxlLCBpbnQgZmxhZ3MsIEdEQnVzUHJveHkqIHByb3h5KQoreworICAgIGdfYXNz
ZXJ0X2NtcGludChvcGVuRmlsZUZyb21XZWJQcm9jZXNzKGZpbGUsIGZsYWdzLCBwcm94eSksID09
LCAtMSk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdEQnVzUHJveHk+IGNyZWF0ZVdlYkV4dGVuc2lv
blByb3h5KFNlY2NvbXBGaWx0ZXJzVGVzdCogdGVzdCkKK3sKKyAgICBHVW5pcXVlUHRyPGNoYXI+
IGV4dGVuc2lvbkJ1c05hbWUoZ19zdHJkdXBfcHJpbnRmKCJvcmcud2Via2l0Lmd0ay5XZWJFeHRl
bnNpb25UZXN0JXUiLCBUZXN0OjpzX3dlYkV4dGVuc2lvbklEKSk7CisgICAgcmV0dXJuIGFkb3B0
R1JlZihidXMtPmNyZWF0ZVByb3h5KGV4dGVuc2lvbkJ1c05hbWUuZ2V0KCksCisgICAgICAgICIv
b3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRl
bnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0UmVh
ZE9ubHlEaXJlY3RvcnlTYW5kYm94RXh0ZW5zaW9uKFNlY2NvbXBGaWx0ZXJzVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gY3JlYXRl
V2ViRXh0ZW5zaW9uUHJveHkodGVzdCk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHJlYWRPbmx5
RGlyZWN0b3J5UGF0aChnX2ZpbGVfZ2V0X3BhdGgodGVzdC0+bV9yZWFkT25seURpcmVjdG9yeSkp
OworICAgIEdVbmlxdWVQdHI8Y2hhcj4gZmlsZUluUmVhZE9ubHlEaXJlY3RvcnlQYXRoKGdfYnVp
bGRfZmlsZW5hbWUocmVhZE9ubHlEaXJlY3RvcnlQYXRoLmdldCgpLCAiZmlsZSIsIG51bGxwdHIp
KTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlSW5SZWFkT25seURpcmVjdG9yeSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVJblJlYWRPbmx5RGlyZWN0b3J5UGF0aC5nZXQoKSkp
OworCisgICAgZGVsZXRlRmlsZUlmUHJlc2VudChmaWxlSW5SZWFkT25seURpcmVjdG9yeS5nZXQo
KSk7CisKKyAgICBlbnN1cmVXZWJQcm9jZXNzRmlsZUNyZWF0aW9uRmFpbHMoZmlsZUluUmVhZE9u
bHlEaXJlY3RvcnkuZ2V0KCksIHByb3h5LmdldCgpKTsKKyAgICBjcmVhdGVGaWxlRnJvbUN1cnJl
bnRQcm9jZXNzKGZpbGVJblJlYWRPbmx5RGlyZWN0b3J5LmdldCgpKTsKKworICAgIGVuc3VyZVdl
YlByb2Nlc3NGaWxlT3BlblN1Y2NlZWRzKGZpbGVJblJlYWRPbmx5RGlyZWN0b3J5LmdldCgpLCBP
X1JET05MWSwgcHJveHkuZ2V0KCkpOworICAgIGVuc3VyZVdlYlByb2Nlc3NGaWxlT3BlbkZhaWxz
KGZpbGVJblJlYWRPbmx5RGlyZWN0b3J5LmdldCgpLCBPX1dST05MWSwgcHJveHkuZ2V0KCkpOwor
ICAgIGVuc3VyZVdlYlByb2Nlc3NGaWxlT3BlbkZhaWxzKGZpbGVJblJlYWRPbmx5RGlyZWN0b3J5
LmdldCgpLCBPX1JEV1IsIHByb3h5LmdldCgpKTsKKworICAgIGRlbGV0ZUZpbGUoZmlsZUluUmVh
ZE9ubHlEaXJlY3RvcnkuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V3JpdGVPbmx5RGly
ZWN0b3J5U2FuZGJveEV4dGVuc2lvbihTZWNjb21wRmlsdGVyc1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGNyZWF0ZVdlYkV4dGVu
c2lvblByb3h5KHRlc3QpOworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiB3cml0ZU9ubHlEaXJlY3Rv
cnlQYXRoKGdfZmlsZV9nZXRfcGF0aCh0ZXN0LT5tX3dyaXRlT25seURpcmVjdG9yeSkpOworICAg
IEdVbmlxdWVQdHI8Y2hhcj4gZmlsZUluV3JpdGVPbmx5RGlyZWN0b3J5UGF0aChnX2J1aWxkX2Zp
bGVuYW1lKHdyaXRlT25seURpcmVjdG9yeVBhdGguZ2V0KCksICJmaWxlIiwgbnVsbHB0cikpOwor
ICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGVJbldyaXRlT25seURpcmVjdG9yeSA9IGFkb3B0R1JlZihn
X2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVJbldyaXRlT25seURpcmVjdG9yeVBhdGguZ2V0KCkpKTsK
KworICAgIGRlbGV0ZUZpbGVJZlByZXNlbnQoZmlsZUluV3JpdGVPbmx5RGlyZWN0b3J5LmdldCgp
KTsKKworICAgIGVuc3VyZVdlYlByb2Nlc3NGaWxlQ3JlYXRpb25TdWNjZWVkcyhmaWxlSW5Xcml0
ZU9ubHlEaXJlY3RvcnkuZ2V0KCksIHByb3h5LmdldCgpKTsKKyAgICBlbnN1cmVXZWJQcm9jZXNz
RmlsZU9wZW5GYWlscyhmaWxlSW5Xcml0ZU9ubHlEaXJlY3RvcnkuZ2V0KCksIE9fUkRPTkxZLCBw
cm94eS5nZXQoKSk7CisgICAgZW5zdXJlV2ViUHJvY2Vzc0ZpbGVPcGVuU3VjY2VlZHMoZmlsZUlu
V3JpdGVPbmx5RGlyZWN0b3J5LmdldCgpLCBPX1dST05MWSwgcHJveHkuZ2V0KCkpOworICAgIGVu
c3VyZVdlYlByb2Nlc3NGaWxlT3BlbkZhaWxzKGZpbGVJbldyaXRlT25seURpcmVjdG9yeS5nZXQo
KSwgT19SRFdSLCBwcm94eS5nZXQoKSk7CisKKyAgICBkZWxldGVGaWxlKGZpbGVJbldyaXRlT25s
eURpcmVjdG9yeS5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RSZWFkQW5kV3JpdGVEaXJl
Y3RvcnlTYW5kYm94RXh0ZW5zaW9uKFNlY2NvbXBGaWx0ZXJzVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gY3JlYXRlV2ViRXh0ZW5z
aW9uUHJveHkodGVzdCk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHJlYWRBbmRXcml0ZURpcmVj
dG9yeVBhdGgoZ19maWxlX2dldF9wYXRoKHRlc3QtPm1fcmVhZEFuZFdyaXRlRGlyZWN0b3J5KSk7
CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBmaWxlSW5SZWFkQW5kV3JpdGVEaXJlY3RvcnlQYXRoKGdf
YnVpbGRfZmlsZW5hbWUocmVhZEFuZFdyaXRlRGlyZWN0b3J5UGF0aC5nZXQoKSwgImZpbGUiLCBu
dWxscHRyKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZUluUmVhZEFuZFdyaXRlRGlyZWN0b3J5
ID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZUluUmVhZEFuZFdyaXRlRGlyZWN0
b3J5UGF0aC5nZXQoKSkpOworCisgICAgZGVsZXRlRmlsZUlmUHJlc2VudChmaWxlSW5SZWFkQW5k
V3JpdGVEaXJlY3RvcnkuZ2V0KCkpOworCisgICAgZW5zdXJlV2ViUHJvY2Vzc0ZpbGVDcmVhdGlv
blN1Y2NlZWRzKGZpbGVJblJlYWRBbmRXcml0ZURpcmVjdG9yeS5nZXQoKSwgcHJveHkuZ2V0KCkp
OworICAgIGVuc3VyZVdlYlByb2Nlc3NGaWxlT3BlblN1Y2NlZWRzKGZpbGVJblJlYWRBbmRXcml0
ZURpcmVjdG9yeS5nZXQoKSwgT19SRE9OTFksIHByb3h5LmdldCgpKTsKKyAgICBlbnN1cmVXZWJQ
cm9jZXNzRmlsZU9wZW5TdWNjZWVkcyhmaWxlSW5SZWFkQW5kV3JpdGVEaXJlY3RvcnkuZ2V0KCks
IE9fV1JPTkxZLCBwcm94eS5nZXQoKSk7CisgICAgZW5zdXJlV2ViUHJvY2Vzc0ZpbGVPcGVuU3Vj
Y2VlZHMoZmlsZUluUmVhZEFuZFdyaXRlRGlyZWN0b3J5LmdldCgpLCBPX1JEV1IsIHByb3h5Lmdl
dCgpKTsKKworICAgIGRlbGV0ZUZpbGUoZmlsZUluUmVhZEFuZFdyaXRlRGlyZWN0b3J5LmdldCgp
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFJlYWRPbmx5RmlsZVNhbmRib3hFeHRlbnNpb24oU2Vj
Y29tcEZpbHRlcnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8R0RC
dXNQcm94eT4gcHJveHkgPSBjcmVhdGVXZWJFeHRlbnNpb25Qcm94eSh0ZXN0KTsKKworICAgIGVu
c3VyZVdlYlByb2Nlc3NGaWxlT3BlblN1Y2NlZWRzKHRlc3QtPm1fcmVhZE9ubHlGaWxlLCBPX1JE
T05MWSwgcHJveHkuZ2V0KCkpOworICAgIGVuc3VyZVdlYlByb2Nlc3NGaWxlT3BlbkZhaWxzKHRl
c3QtPm1fcmVhZE9ubHlGaWxlLCBPX1dST05MWSwgcHJveHkuZ2V0KCkpOworICAgIGVuc3VyZVdl
YlByb2Nlc3NGaWxlT3BlbkZhaWxzKHRlc3QtPm1fcmVhZE9ubHlGaWxlLCBPX1JEV1IsIHByb3h5
LmdldCgpKTsKKworICAgIGRlbGV0ZUZpbGUodGVzdC0+bV9yZWFkT25seUZpbGUpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0V3JpdGVPbmx5RmlsZVNhbmRib3hFeHRlbnNpb24oU2VjY29tcEZpbHRl
cnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8R0RCdXNQcm94eT4g
cHJveHkgPSBjcmVhdGVXZWJFeHRlbnNpb25Qcm94eSh0ZXN0KTsKKworICAgIGVuc3VyZVdlYlBy
b2Nlc3NGaWxlT3BlbkZhaWxzKHRlc3QtPm1fd3JpdGVPbmx5RmlsZSwgT19SRE9OTFksIHByb3h5
LmdldCgpKTsKKyAgICBlbnN1cmVXZWJQcm9jZXNzRmlsZU9wZW5TdWNjZWVkcyh0ZXN0LT5tX3dy
aXRlT25seUZpbGUsIE9fV1JPTkxZLCBwcm94eS5nZXQoKSk7CisgICAgZW5zdXJlV2ViUHJvY2Vz
c0ZpbGVPcGVuRmFpbHModGVzdC0+bV93cml0ZU9ubHlGaWxlLCBPX1JEV1IsIHByb3h5LmdldCgp
KTsKKworICAgIGRlbGV0ZUZpbGUodGVzdC0+bV93cml0ZU9ubHlGaWxlKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdFJlYWRBbmRXcml0ZUZpbGVTYW5kYm94RXh0ZW5zaW9uKFNlY2NvbXBGaWx0ZXJz
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHBy
b3h5ID0gY3JlYXRlV2ViRXh0ZW5zaW9uUHJveHkodGVzdCk7CisKKyAgICBlbnN1cmVXZWJQcm9j
ZXNzRmlsZU9wZW5TdWNjZWVkcyh0ZXN0LT5tX3JlYWRBbmRXcml0ZUZpbGUsIE9fUkRPTkxZLCBw
cm94eS5nZXQoKSk7CisgICAgZW5zdXJlV2ViUHJvY2Vzc0ZpbGVPcGVuU3VjY2VlZHModGVzdC0+
bV9yZWFkQW5kV3JpdGVGaWxlLCBPX1dST05MWSwgcHJveHkuZ2V0KCkpOworICAgIGVuc3VyZVdl
YlByb2Nlc3NGaWxlT3BlblN1Y2NlZWRzKHRlc3QtPm1fcmVhZEFuZFdyaXRlRmlsZSwgT19SRFdS
LCBwcm94eS5nZXQoKSk7CisKKyAgICBkZWxldGVGaWxlKHRlc3QtPm1fcmVhZEFuZFdyaXRlRmls
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaWxlU2FuZGJveEV4dGVuc2lvbldpdGhUcmFpbGlu
Z1NsYXNoKFNlY2NvbXBGaWx0ZXJzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBp
ZiAoZ190ZXN0X3N1YnByb2Nlc3MoKSkgeworICAgICAgICAvLyBUaGlzIHNob3VsZCBlbWl0IGEg
d2FybmluZywgZmFpbGluZyB0aGUgdGVzdC4KKyAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X2Fk
ZF9maWxlc3lzdGVtX3NhbmRib3hfZXh0ZW5zaW9uKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSwg
ImZhaWwiIEdfRElSX1NFUEFSQVRPUl9TLAorICAgICAgICAgICAgV0VCS0lUX0ZJTEVTWVNURU1f
UEVSTUlTU0lPTl9SRUFEX0FORF9XUklURSwgV0VCS0lUX0ZJTEVTWVNURU1fUEVSTUlTU0lPTl9U
WVBFX0ZJTEUpOworICAgIH0KKworICAgIGdfdGVzdF90cmFwX3N1YnByb2Nlc3MobnVsbHB0ciwg
MCwgc3RhdGljX2Nhc3Q8R1Rlc3RTdWJwcm9jZXNzRmxhZ3M+KDApKTsKKyAgICBnX3Rlc3RfdHJh
cF9hc3NlcnRfZmFpbGVkKCk7CisgICAgZ190ZXN0X3RyYXBfYXNzZXJ0X3N0ZGVycigiKkZpbGUg
ZmlsdGVyIGZhaWwiIEdfRElSX1NFUEFSQVRPUl9TICIgc2hvdWxkIG5vdCBlbmQgd2l0aCBhIGRp
cmVjdG9yeSBzZXBhcmF0b3IqIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaWxlU2FuZGJveEV4
dGVuc2lvbkZvck5vbmV4aXN0ZW50RmlsZShTZWNjb21wRmlsdGVyc1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGNyZWF0ZVdlYkV4
dGVuc2lvblByb3h5KHRlc3QpOworCisgICAgZGVsZXRlRmlsZUlmUHJlc2VudCh0ZXN0LT5tX2lu
aXRpYWxseU5vbmV4aXN0ZW50RmlsZSk7CisgICAgZW5zdXJlV2ViUHJvY2Vzc0ZpbGVPcGVuRmFp
bHModGVzdC0+bV9pbml0aWFsbHlOb25leGlzdGVudEZpbGUsIE9fUkRXUiwgcHJveHkuZ2V0KCkp
OworCisgICAgLy8gRm9yIHdoYXRldmVyIHJlYXNvbiwgYSBmaWxlIHNhbmRib3ggZXh0ZW5zaW9u
IHdpbGwgbmV2ZXIgYWxsb3cgYWNjZXNzIHRvCisgICAgLy8gYSBmaWxlIHRoYXQgZG9lcyBub3Qg
YWxyZWFkeSBleGlzdC4gV2UgbWF5IG9yIG1heSBub3Qgd2FudCB0byBjaGFuZ2UKKyAgICAvLyB0
aGlzLiBUZXN0IGl0IHRvIGVuc3VyZSB0aGUgYmVoYXZpb3IgZG9lc24ndCBjaGFuZ2Ugb24gdXMg
dW5leHBlY3RlZGx5LgorICAgIGVuc3VyZVdlYlByb2Nlc3NGaWxlQ3JlYXRpb25GYWlscyh0ZXN0
LT5tX2luaXRpYWxseU5vbmV4aXN0ZW50RmlsZSwgcHJveHkuZ2V0KCkpOworCisgICAgY3JlYXRl
RmlsZUZyb21DdXJyZW50UHJvY2Vzcyh0ZXN0LT5tX2luaXRpYWxseU5vbmV4aXN0ZW50RmlsZSk7
CisgICAgZW5zdXJlV2ViUHJvY2Vzc0ZpbGVPcGVuU3VjY2VlZHModGVzdC0+bV9pbml0aWFsbHlO
b25leGlzdGVudEZpbGUsIE9fUkRXUiwgcHJveHkuZ2V0KCkpOworCisgICAgZGVsZXRlRmlsZSh0
ZXN0LT5tX2luaXRpYWxseU5vbmV4aXN0ZW50RmlsZSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkK
K3sKKyAgICBidXMgPSBuZXcgV2ViS2l0VGVzdEJ1cygpOworICAgIGlmICghYnVzLT5ydW4oKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU2VjY29tcEZpbHRlcnNUZXN0OjphZGQoIldlYktpdFdl
YkNvbnRleHQiLCAiZGlyZWN0b3J5LXNhbmRib3gtZXh0ZW5zaW9uLXIiLCB0ZXN0UmVhZE9ubHlE
aXJlY3RvcnlTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBTZWNjb21wRmlsdGVyc1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViQ29udGV4dCIsICJkaXJlY3Rvcnktc2FuZGJveC1leHRlbnNpb24tdyIsIHRlc3RX
cml0ZU9ubHlEaXJlY3RvcnlTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBTZWNjb21wRmlsdGVyc1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJkaXJlY3Rvcnktc2FuZGJveC1leHRlbnNpb24t
cnciLCB0ZXN0UmVhZEFuZFdyaXRlRGlyZWN0b3J5U2FuZGJveEV4dGVuc2lvbik7CisgICAgU2Vj
Y29tcEZpbHRlcnNUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZmlsZS1zYW5kYm94LWV4
dGVuc2lvbi1yIiwgdGVzdFJlYWRPbmx5RmlsZVNhbmRib3hFeHRlbnNpb24pOworICAgIFNlY2Nv
bXBGaWx0ZXJzVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImZpbGUtc2FuZGJveC1leHRl
bnNpb24tdyIsIHRlc3RXcml0ZU9ubHlGaWxlU2FuZGJveEV4dGVuc2lvbik7CisgICAgU2VjY29t
cEZpbHRlcnNUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZmlsZS1zYW5kYm94LWV4dGVu
c2lvbi1ydyIsIHRlc3RSZWFkQW5kV3JpdGVGaWxlU2FuZGJveEV4dGVuc2lvbik7CisgICAgU2Vj
Y29tcEZpbHRlcnNUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZmlsZS1zYW5kYm94LWV4
dGVuc2lvbi10cmFpbGluZy1zbGFzaCIsIHRlc3RGaWxlU2FuZGJveEV4dGVuc2lvbldpdGhUcmFp
bGluZ1NsYXNoKTsKKyAgICBTZWNjb21wRmlsdGVyc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4
dCIsICJmaWxlLXNhbmRib3gtZXh0ZW5zaW9uLW5vbmV4aXN0ZW50LWZpbGUiLCB0ZXN0RmlsZVNh
bmRib3hFeHRlbnNpb25Gb3JOb25leGlzdGVudEZpbGUpOworfQorCit2b2lkIGFmdGVyQWxsKCkK
K3sKKyAgICBkZWxldGUgYnVzOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1dlYkV4dGVuc2lvblRlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1dlYkV4dGVuc2lvblRlc3QuY3BwCmluZGV4IGZkMDk1OTYuLjc5
MTlhOTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9X
ZWJFeHRlbnNpb25UZXN0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvV2ViRXh0ZW5zaW9uVGVzdC5jcHAKQEAgLTIxLDcgKzIxLDkgQEAKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxnaW8vZ2lvLmg+
CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRl
IDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+CkBA
IC01NCw2ICs1NiwxNCBAQCBzdGF0aWMgY29uc3QgY2hhciBpbnRyb3NwZWN0aW9uWE1MW10gPQog
ICAgICIgIDxtZXRob2QgbmFtZT0nR2V0UHJvY2Vzc0lkZW50aWZpZXInPiIKICAgICAiICAgPGFy
ZyB0eXBlPSd1JyBuYW1lPSdpZGVudGlmaWVyJyBkaXJlY3Rpb249J291dCcvPiIKICAgICAiICA8
L21ldGhvZD4iCisgICAgIiAgPG1ldGhvZCBuYW1lPSdDcmVhdGVGaWxlJz4iCisgICAgIiAgIDxh
cmcgdHlwZT0ncycgbmFtZT0ncGF0aCcgZGlyZWN0aW9uPSdpbicvPiIKKyAgICAiICA8L21ldGhv
ZD4iCisgICAgIiAgPG1ldGhvZCBuYW1lPSdPcGVuRmlsZSc+IgorICAgICIgICAgPGFyZyB0eXBl
PSdzJyBuYW1lPSdwYXRobmFtZScgZGlyZWN0aW9uPSdpbicvPiIKKyAgICAiICAgIDxhcmcgdHlw
ZT0naScgbmFtZT0nZmxhZ3MnIGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgICA8YXJnIHR5cGU9
J2knIG5hbWU9J3Jlc3VsdCcgZGlyZWN0aW9uPSdvdXQnLz4iCisgICAgIiAgPC9tZXRob2Q+Igog
ICAgICIgIDxzaWduYWwgbmFtZT0nRG9jdW1lbnRMb2FkZWQnLz4iCiAgICAgIiAgPHNpZ25hbCBu
YW1lPSdVUklDaGFuZ2VkJz4iCiAgICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0ndXJpJyBkaXJl
Y3Rpb249J291dCcvPiIKQEAgLTMwMyw2ICszMTMsMjYgQEAgc3RhdGljIHZvaWQgbWV0aG9kQ2Fs
bENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgY2hhciogc2VuZGVy
LAogICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0UHJvY2Vzc0lkZW50
aWZpZXIiKSkgewogICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVl
KGludm9jYXRpb24sCiAgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3KCIodSkiLCBzdGF0aWNfY2Fz
dDxndWludDMyPihnZXRDdXJyZW50UHJvY2Vzc0lEKCkpKSk7CisgICAgfSBlbHNlIGlmICghZ19z
dHJjbXAwKG1ldGhvZE5hbWUsICJDcmVhdGVGaWxlIikpIHsKKyAgICAgICAgY29uc3QgY2hhciog
cGF0aDsKKyAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKCZzKSIsICZwYXRoKTsK
KyAgICAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9w
YXRoKHBhdGgpKTsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAg
ICBnX2ZpbGVfY3JlYXRlKGZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwg
JmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZ19hc3Nl
cnQoIWdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9F
WElTVFMpKTsKKyAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShp
bnZvY2F0aW9uLCBudWxscHRyKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFt
ZSwgIk9wZW5GaWxlIikpIHsKKyAgICAgICAgY29uc3QgY2hhciogcGF0aG5hbWU7CisgICAgICAg
IGludCBmbGFnczsKKyAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKCZzaSkiLCAm
cGF0aG5hbWUsICZmbGFncyk7CisgICAgICAgIGludCByZXQgPSBnX29wZW4ocGF0aG5hbWUsIGZs
YWdzLCAwKTsKKyAgICAgICAgaWYgKHJldCA+PSAwKSB7CisgICAgICAgICAgICBHVW5pcXVlT3V0
UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAgICBnX2Nsb3NlKHJldCwgJmVycm9yLm91dFB0
cigpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisgICAgICAgIH0KKyAgICAgICAg
Z19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3Zhcmlh
bnRfbmV3KCIoaSkiLCByZXQpKTsKICAgICB9CiB9CiAKLS0gCjIuMS4wCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>