<?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>194213</bug_id>
          
          <creation_ts>2019-02-03 23:00:07 -0800</creation_ts>
          <short_desc>[GLib] Stop URI-escaping file system representations</short_desc>
          <delta_ts>2019-02-05 02:50:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>pgriffis</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1501752</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2019-02-03 23:00:07 -0800</bug_when>
    <thetext>URI-escaping when creating strings from filesystem representations (and unescaping when creating FS representations from strings) is currently breaking the IndexedDB database size calculation. It&apos;s also different behavior than what is done in POSIX and CF implementations of FileSystem::stringFromFileSystemRepresentation() and FileSystem::fileSystemRepresentation().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501757</commentid>
    <comment_count>1</comment_count>
      <attachid>361041</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2019-02-03 23:18:40 -0800</bug_when>
    <thetext>Created attachment 361041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501772</commentid>
    <comment_count>2</comment_count>
      <attachid>361041</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-04 00:26:47 -0800</bug_when>
    <thetext>Comment on attachment 361041
Patch

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

&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:66
&gt; +    GUniquePtr&lt;gchar&gt; utf8(g_convert(representation, representationLength,
&gt; +        &quot;UTF-8&quot;, filenameCharsets[0], nullptr, &amp;utf8Length, nullptr));
&gt; +    if (!utf8)
&gt; +        return { };

An error here would be difficult to catch, I think, I would get the error and show a message with WTFLogAlways.

&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:88
&gt; +    GUniquePtr&lt;gchar&gt; representation(g_convert(utf8.data(), utf8.length(),
&gt; +        filenameCharsets[0], &quot;UTF-8&quot;, nullptr, &amp;representationLength, nullptr));
&gt; +    if (!representation)
&gt; +        return { };

Ditto.

&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:96
&gt; +    auto* data = representation.data();
&gt; +    return !!data &amp;&amp; data[0] != &apos;\0&apos;;

I think CString should have an isEmpty() method, but anyway, why don&apos;t we just ensure we return a null CString in case of invalid representation? Then we can simply use isNull() instead of this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501796</commentid>
    <comment_count>3</comment_count>
      <attachid>361041</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2019-02-04 05:37:12 -0800</bug_when>
    <thetext>Comment on attachment 361041
Patch

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

&gt;&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:66
&gt;&gt; +        return { };
&gt; 
&gt; An error here would be difficult to catch, I think, I would get the error and show a message with WTFLogAlways.

OK.

&gt;&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:88
&gt;&gt; +        return { };
&gt; 
&gt; Ditto.

OK.

&gt;&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:96
&gt;&gt; +    return !!data &amp;&amp; data[0] != &apos;\0&apos;;
&gt; 
&gt; I think CString should have an isEmpty() method, but anyway, why don&apos;t we just ensure we return a null CString in case of invalid representation? Then we can simply use isNull() instead of this

It&apos;s simpler here to check whether a CString is acceptable for passing to system APIs (i.e. it contains data and the first byte is not zero, meaning it&apos;s not a zero-length string) than to test what fileSystemRepresentation() might have produced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501813</commentid>
    <comment_count>4</comment_count>
      <attachid>361041</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-02-04 07:32:15 -0800</bug_when>
    <thetext>Comment on attachment 361041
Patch

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

Good!

&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:59
&gt; +    // If the returned charset is UTF-8, go directly to String creation.
&gt; +    const gchar** filenameCharsets = nullptr;
&gt; +    if (g_get_filename_charsets(&amp;filenameCharsets))
&gt; +        return String::fromUTF8(representation, representationLength);

This is right, but it looks like a bug, because a reasonable programmer would not expect g_get_filename_charsets() to return TRUE if it&apos;s UTF-8. You might adjust the comment to indicate that the function is weird so somebody doesn&apos;t waste time adding a check for UTF-8 here in the future.

&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:65
&gt; +    ASSERT(filenameCharsets);
&gt; +    size_t utf8Length = 0;
&gt; +    GUniquePtr&lt;gchar&gt; utf8(g_convert(representation, representationLength,
&gt; +        &quot;UTF-8&quot;, filenameCharsets[0], nullptr, &amp;utf8Length, nullptr));
&gt; +    if (!utf8)

Hm, this looks harder and no better than using g_filename_to_utf8(), which could of course be the easiest solution. I thought you were doing all this extra effort to have a fast path, to convert straight from filesystem representation to UTF-16. It doesn&apos;t make much sense to manually convert it to UTF-8 and then immediately convert to UTF-16, right? I think you should directly convert to UTF-16 instead, then the string can be constructed directly instead of using fromUTF8(). Otherwise, as long as you&apos;re doing the extra step through UTF-8, might as well just use simpler g_filename_utf8().

&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:86
&gt; +    GUniquePtr&lt;gchar&gt; representation(g_convert(utf8.data(), utf8.length(),
&gt; +        filenameCharsets[0], &quot;UTF-8&quot;, nullptr, &amp;representationLength, nullptr));

Though I guess in this case, we already have the UTF-8 for the fast path above, so converting from UTF-16 here wouldn&apos;t save any effort. But it would parallel my suggested changes to the function above. So both ways kinda make sense here. Anyway, up to you. Think about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502285</commentid>
    <comment_count>5</comment_count>
      <attachid>361041</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2019-02-04 23:58:18 -0800</bug_when>
    <thetext>Comment on attachment 361041
Patch

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

&gt;&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:65
&gt;&gt; +    if (!utf8)
&gt; 
&gt; Hm, this looks harder and no better than using g_filename_to_utf8(), which could of course be the easiest solution. I thought you were doing all this extra effort to have a fast path, to convert straight from filesystem representation to UTF-16. It doesn&apos;t make much sense to manually convert it to UTF-8 and then immediately convert to UTF-16, right? I think you should directly convert to UTF-16 instead, then the string can be constructed directly instead of using fromUTF8(). Otherwise, as long as you&apos;re doing the extra step through UTF-8, might as well just use simpler g_filename_utf8().

Using g_filename_to_utf8() would unnecessarily g_strdup() the string contents when the filename charset is UTF-8. That&apos;s why that info is retrieved manually.

WTF::String doesn&apos;t provide a way to construct objects from UTF-16 data that&apos;s contained in sequential array of 8-bit values, and I can&apos;t currently commit more time to finding out whether g_convert() can, when converting from/to UTF-16, properly consume/produce UTF-16 data in sequential 8-bit representation that can be just reinterpret_casted to UChar on our side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502318</commentid>
    <comment_count>6</comment_count>
      <attachid>361179</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2019-02-05 02:48:11 -0800</bug_when>
    <thetext>Created attachment 361179
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502319</commentid>
    <comment_count>7</comment_count>
      <attachid>361179</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2019-02-05 02:49:14 -0800</bug_when>
    <thetext>Comment on attachment 361179
Patch for landing

Clearing flags on attachment: 361179

Committed r240969: &lt;https://trac.webkit.org/changeset/240969&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502320</commentid>
    <comment_count>8</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2019-02-05 02:49:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502321</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-05 02:50:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/47813632&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361041</attachid>
            <date>2019-02-03 23:18:40 -0800</date>
            <delta_ts>2019-02-05 02:48:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194213-20190204081839.patch</filename>
            <type>text/plain</type>
            <size>16697</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwOTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDEzY2E5MjIxZmQ5ZTFlMjAzOGZlNDI0
YjlmNjEzY2FhZjA4NDVlMzEuLjQ2ZmNmOTk4YWUxMDMwYjc3ODc1MDg1ZWY2ZjQ5MjZmNWE2MzNm
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTktMDItMDMgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHTGliXSBTdG9wIFVSSS1lc2NhcGluZyBmaWxl
IHN5c3RlbSByZXByZXNlbnRhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5NDIxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFN0b3AgVVJJLWVzY2FwaW5nIG9mIGZpbGUgcmVwcmVzZW50YXRpb24g
c3RyaW5ncyBpbgorICAgICAgICBGaWxlU3lzdGVtOjpzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKCksIGFuZCBVUkktdW5lc2NhcGluZworICAgICAgICBvZiBzdHJpbmdzIGluIEZp
bGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbigpLgorCisgICAgICAgIFRoaXMgYmVo
YXZpb3IgZGV2aWF0ZXMgZnJvbSBQT1NJWCBhbmQgQ0YgaW1wbGVtZW50YXRpb25zIGFuZCBpcwor
ICAgICAgICBjdXJyZW50bHkgYnJlYWtpbmcgSW5kZXhlZERCLXNwZWNpZmljIGNhbGN1bGF0aW9u
IG9mIGRhdGFiYXNlIHNpemVzIGR1ZQorICAgICAgICB0byBkaXJlY3RvcnkgY29tcG9uZW50cyB1
c2VkIGluIHRoYXQgcHJvY2VzcyB0aGF0IGFyZSBVUkwtYmFzZWQgYW5kIGFyZQorICAgICAgICBh
cyBzdWNoIFVSSS1lc2NhcGVkLiBXaGVuIHVuZXNjYXBlZCwgdGhvc2Ugc2luZ2xlIGRpcmVjdG9y
eSBjb21wb25lbnRzCisgICAgICAgIGV4cGxvZGUgaW50byBtdWx0aXBsZSBkaXJlY3RvcnkgY29t
cG9uZW50cywgbGVhZGluZyB0byBpbmNvcnJlY3QgdG90YWwKKyAgICAgICAgZGF0YWJhc2Ugc2l6
ZSBjYWxjdWxhdGlvbiB3aGVuIGl0ZXJhdGluZyB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5LgorCisg
ICAgICAgIEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oKSBu
b3cgcmV0cmlldmVzIEdMaWIncworICAgICAgICBmaWxlbmFtZSBjaGFyc2V0cyBhbmQgaW4gd29y
c3QgY2FzZSBjb252ZXJ0cyB0aGUgZmlsZXN5c3RlbQorICAgICAgICByZXByZXNlbnRhdGlvbiB0
byBVVEYtOCBiZWZvcmUgU3RyaW5nOjpmcm9tVVRGOCgpIGlzIHVzZWQuCisgICAgICAgIEZpbGVT
eXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbigpIHJldmVyc2VzIHRoYXQgcHJvY2Vzcywg
dGFraW5nCisgICAgICAgIFN0cmluZydzIFVURi04IGRhdGEgYW5kIGNvbnZlcnRpbmcgaXQgdG8g
dGFyZ2V0IGNoYXJzZXQgaWYgbmVjZXNzYXJ5LgorCisgICAgICAgIE90aGVyIEZpbGVTeXN0ZW0g
ZnVuY3Rpb25zIGFyZSBhZGp1c3RlZCB0byBjb252ZXJ0IHBhc3NlZC1pbiBTdHJpbmcKKyAgICAg
ICAgb2JqZWN0cyB0byBmaWxlc3lzdGVtIHJlcHJlc2VudGF0aW9ucy4KKworICAgICAgICAqIHd0
Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV1RGOjpGaWxl
U3lzdGVtSW1wbDo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdURjo6Rmls
ZVN5c3RlbUltcGw6OnZhbGlkUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV1RGOjpGaWxlU3lz
dGVtSW1wbDo6ZmlsZW5hbWVGb3JEaXNwbGF5KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6OmZpbGVFeGlzdHMpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZGVsZXRlRmls
ZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpnZXRGaWxlU3RhdCk6CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjpnZXRGaWxlTFN0YXQpOgorICAgICAgICAoV1RGOjpGaWxlU3lz
dGVtSW1wbDo6bWFrZUFsbERpcmVjdG9yaWVzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6OmNyZWF0ZVN5bWJvbGljTGluayk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpw
YXRoR2V0RmlsZU5hbWUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6Z2V0Vm9sdW1l
RnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmRpcmVjdG9yeU5hbWUp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6bGlzdERpcmVjdG9yeSk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpvcGVuRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0
ZW1JbXBsOjptb3ZlRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpoYXJkTGlu
a09yQ29weUZpbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6Z2V0RmlsZURldmlj
ZUlkKTogQWxpZ24gd2l0aCBQT1NJWCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQgdHJlYXQg
aW5wdXQgQ1N0cmluZyBhcyBhbiBleGlzdGluZyBmaWxlc3lzdGVtIHJlcHJlc2VudGF0aW9uLgor
ICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5lc2NhcGVkRmlsZW5hbWUpOiBEZWxldGVk
LgorCiAyMDE5LTAyLTAzICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQwODk2LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9n
bGliL0ZpbGVTeXN0ZW1HbGliLmNwcAppbmRleCBjM2VjOTlhM2QxYjQ5MWViMTk2MzFlMDA1OGE0
MWQxYTc1MTZmZTVjLi5hNzIzMTQyOTQ0ODM3NWY5OGEwYmQzM2M0YzU1YjYzZTI4YzM2NjhjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcApAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgPHd0Zi9nbGliL0dMaWJVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9H
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgpAQCAtNDIsNDIgKzQzLDU3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBuYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwgewogCi0vKiBPbiBsaW51eCBmaWxlIG5hbWVzIGFyZSBqdXN0IHJh
dyBieXRlcywgc28gYWxzbyBzdHJpbmdzIHRoYXQgY2Fubm90IGJlIGVuY29kZWQgaW4gYW55IHdh
eQotICogYXJlIHZhbGlkIGZpbGUgbmFtZXMuIFRoaXMgbWVhbiB0aGF0IHdlIGNhbm5vdCBqdXN0
IHN0b3JlIGEgZmlsZSBuYW1lIGFzLWlzIGluIGEgU3RyaW5nCi0gKiBidXQgd2UgaGF2ZSB0byBl
c2NhcGUgaXQuCi0gKiBPbiBXaW5kb3dzIHRoZSBHTGliIGZpbGUgbmFtZSBlbmNvZGluZyBpcyBh
bHdheXMgVVRGLTggc28gd2UgY2FuIG9wdGltaXplIHRoaXMgY2FzZS4gKi8KLVN0cmluZyBzdHJp
bmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IGNoYXIqIGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbikKK1N0cmluZyBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNv
bnN0IGNoYXIqIHJlcHJlc2VudGF0aW9uKQogewotICAgIGlmICghZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCFyZXByZXNlbnRhdGlv
bikKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKTsKLSNlbHNlCi0gICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gZXNjYXBlZFN0cmluZyhnX3VyaV9lc2NhcGVfc3RyaW5nKGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbiwgIi86IiwgRkFMU0UpKTsKLSAgICByZXR1cm4gZXNjYXBlZFN0cmlu
Zy5nZXQoKTsKLSNlbmRpZgorICAgIC8vIFNob3J0LWN1dCB0byBTdHJpbmcgY3JlYXRpb24gd2hl
biBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMgYXJlIHVzZWQuCisgICAgc2l6ZV90IHJlcHJlc2VudGF0
aW9uTGVuZ3RoID0gc3RybGVuKHJlcHJlc2VudGF0aW9uKTsKKyAgICBpZiAoY2hhcmFjdGVyc0Fy
ZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihyZXByZXNlbnRhdGlvbiks
IHJlcHJlc2VudGF0aW9uTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhyZXByZXNlbnRh
dGlvbiwgcmVwcmVzZW50YXRpb25MZW5ndGgpOworCisgICAgLy8gSWYgdGhlIHJldHVybmVkIGNo
YXJzZXQgaXMgVVRGLTgsIGdvIGRpcmVjdGx5IHRvIFN0cmluZyBjcmVhdGlvbi4KKyAgICBjb25z
dCBnY2hhcioqIGZpbGVuYW1lQ2hhcnNldHMgPSBudWxscHRyOworICAgIGlmIChnX2dldF9maWxl
bmFtZV9jaGFyc2V0cygmZmlsZW5hbWVDaGFyc2V0cykpCisgICAgICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KHJlcHJlc2VudGF0aW9uLCByZXByZXNlbnRhdGlvbkxlbmd0aCk7CisKKyAgICBB
U1NFUlQoZmlsZW5hbWVDaGFyc2V0cyk7CisgICAgc2l6ZV90IHV0ZjhMZW5ndGggPSAwOworICAg
IEdVbmlxdWVQdHI8Z2NoYXI+IHV0ZjgoZ19jb252ZXJ0KHJlcHJlc2VudGF0aW9uLCByZXByZXNl
bnRhdGlvbkxlbmd0aCwKKyAgICAgICAgIlVURi04IiwgZmlsZW5hbWVDaGFyc2V0c1swXSwgbnVs
bHB0ciwgJnV0ZjhMZW5ndGgsIG51bGxwdHIpKTsKKyAgICBpZiAoIXV0ZjgpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh1dGY4LmdldCgpLCB1dGY4
TGVuZ3RoKTsKIH0KIAotc3RhdGljIEdVbmlxdWVQdHI8Y2hhcj4gdW5lc2NhcGVkRmlsZW5hbWUo
Y29uc3QgU3RyaW5nJiBwYXRoKQorQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29u
c3QgU3RyaW5nJiBwYXRoKQogewogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0jaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gR1VuaXF1ZVB0cjxjaGFy
PihnX3N0cmR1cChwYXRoLnV0ZjgoKS5kYXRhKCkpKTsKLSNlbHNlCi0gICAgcmV0dXJuIEdVbmlx
dWVQdHI8Y2hhcj4oZ191cmlfdW5lc2NhcGVfc3RyaW5nKHBhdGgudXRmOCgpLmRhdGEoKSwgbnVs
bHB0cikpOwotI2VuZGlmCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBDU3RyaW5nIHV0Zjgg
PSBwYXRoLnV0ZjgoKTsKKworICAgIC8vIElmIHRoZSByZXR1cm5lZCBjaGFyc2V0IGlzIFVURi04
LCBzaW1wbHkgcmV0dXJuIHRoZSBDU3RyaW5nIG9iamVjdC4KKyAgICBjb25zdCBnY2hhcioqIGZp
bGVuYW1lQ2hhcnNldHMgPSBudWxscHRyOworICAgIGlmIChnX2dldF9maWxlbmFtZV9jaGFyc2V0
cygmZmlsZW5hbWVDaGFyc2V0cykpCisgICAgICAgIHJldHVybiB1dGY4OworCisgICAgQVNTRVJU
KGZpbGVuYW1lQ2hhcnNldHMpOworICAgIHNpemVfdCByZXByZXNlbnRhdGlvbkxlbmd0aCA9IDA7
CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gcmVwcmVzZW50YXRpb24oZ19jb252ZXJ0KHV0ZjguZGF0
YSgpLCB1dGY4Lmxlbmd0aCgpLAorICAgICAgICBmaWxlbmFtZUNoYXJzZXRzWzBdLCAiVVRGLTgi
LCBudWxscHRyLCAmcmVwcmVzZW50YXRpb25MZW5ndGgsIG51bGxwdHIpKTsKKyAgICBpZiAoIXJl
cHJlc2VudGF0aW9uKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIENTdHJpbmco
cmVwcmVzZW50YXRpb24uZ2V0KCksIHJlcHJlc2VudGF0aW9uTGVuZ3RoKTsKIH0KIAotQ1N0cmlu
ZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQorYm9vbCB2YWxp
ZFJlcHJlc2VudGF0aW9uKGNvbnN0IENTdHJpbmcmIHJlcHJlc2VudGF0aW9uKQogewotI2lmIE9T
KFdJTkRPV1MpCi0gICAgcmV0dXJuIHBhdGgudXRmOCgpOwotI2Vsc2UKLSAgICBHVW5pcXVlUHRy
PGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIHJldHVybiBm
aWxlbmFtZS5nZXQoKTsKLSNlbmRpZgorICAgIGF1dG8qIGRhdGEgPSByZXByZXNlbnRhdGlvbi5k
YXRhKCk7CisgICAgcmV0dXJuICEhZGF0YSAmJiBkYXRhWzBdICE9ICdcMCc7CiB9CiAKIC8vIENv
bnZlcnRzIGEgc3RyaW5nIHRvIHNvbWV0aGluZyBzdWl0YWJsZSB0byBiZSBkaXNwbGF5ZWQgdG8g
dGhlIHVzZXIuCkBAIC04Niw1MiArMTAyLDUxIEBAIFN0cmluZyBmaWxlbmFtZUZvckRpc3BsYXko
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCiAjaWYgT1MoV0lORE9XUykKICAgICByZXR1cm4gc3RyaW5n
OwogI2Vsc2UKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVu
YW1lKHN0cmluZyk7Ci0gICAgaWYgKCFmaWxlbmFtZSkKKyAgICBhdXRvIGZpbGVuYW1lID0gZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHN0cmluZyk7CisgICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0
aW9uKGZpbGVuYW1lKSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKIAotICAgIEdVbmlxdWVQdHI8
Z2NoYXI+IGRpc3BsYXkoZ19maWxlbmFtZV90b191dGY4KGZpbGVuYW1lLmdldCgpLCAtMSwgbnVs
bHB0ciwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGRpc3BsYXko
Z19maWxlbmFtZV9kaXNwbGF5X25hbWUoZmlsZW5hbWUuZGF0YSgpKSk7CiAgICAgaWYgKCFkaXNw
bGF5KQogICAgICAgICByZXR1cm4gc3RyaW5nOwotCiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoZGlzcGxheS5nZXQoKSk7CiAjZW5kaWYKIH0KIAogYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBl
ZEZpbGVuYW1lKHBhdGgpOwotICAgIHJldHVybiBmaWxlbmFtZSA/IGdfZmlsZV90ZXN0KGZpbGVu
YW1lLmdldCgpLCBHX0ZJTEVfVEVTVF9FWElTVFMpIDogZmFsc2U7CisgICAgYXV0byBmaWxlbmFt
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICByZXR1cm4gdmFsaWRSZXBy
ZXNlbnRhdGlvbihmaWxlbmFtZSkgPyBnX2ZpbGVfdGVzdChmaWxlbmFtZS5kYXRhKCksIEdfRklM
RV9URVNUX0VYSVNUUykgOiBmYWxzZTsKIH0KIAogYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZp
bGVuYW1lKHBhdGgpOwotICAgIHJldHVybiBmaWxlbmFtZSA/IGdfcmVtb3ZlKGZpbGVuYW1lLmdl
dCgpKSAhPSAtMSA6IGZhbHNlOworICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24ocGF0aCk7CisgICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUp
ID8gZ19yZW1vdmUoZmlsZW5hbWUuZGF0YSgpKSAhPSAtMSA6IGZhbHNlOwogfQogCiBib29sIGRl
bGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBHVW5pcXVlUHRy
PGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIHJldHVybiBm
aWxlbmFtZSA/IGdfcm1kaXIoZmlsZW5hbWUuZ2V0KCkpICE9IC0xIDogZmFsc2U7CisgICAgYXV0
byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICByZXR1cm4g
dmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkgPyBnX3JtZGlyKGZpbGVuYW1lLmRhdGEoKSkg
IT0gLTEgOiBmYWxzZTsKIH0KIAogc3RhdGljIGJvb2wgZ2V0RmlsZVN0YXQoY29uc3QgU3RyaW5n
JiBwYXRoLCBHU3RhdEJ1Ziogc3RhdEJ1ZmZlcikKIHsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBm
aWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIGlmICghZmlsZW5hbWUpCisg
ICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBp
ZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gZ19zdGF0KGZpbGVuYW1lLmdldCgpLCBzdGF0QnVmZmVyKSAhPSAtMTsK
KyAgICByZXR1cm4gZ19zdGF0KGZpbGVuYW1lLmRhdGEoKSwgc3RhdEJ1ZmZlcikgIT0gLTE7CiB9
CiAKIHN0YXRpYyBib29sIGdldEZpbGVMU3RhdChjb25zdCBTdHJpbmcmIHBhdGgsIEdTdGF0QnVm
KiBzdGF0QnVmZmVyKQogewotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1lID0gdW5lc2Nh
cGVkRmlsZW5hbWUocGF0aCk7Ci0gICAgaWYgKCFmaWxlbmFtZSkKKyAgICBhdXRvIGZpbGVuYW1l
ID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlmICghdmFsaWRSZXByZXNl
bnRhdGlvbihmaWxlbmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBn
X2xzdGF0KGZpbGVuYW1lLmdldCgpLCBzdGF0QnVmZmVyKSAhPSAtMTsKKyAgICByZXR1cm4gZ19s
c3RhdChmaWxlbmFtZS5kYXRhKCksIHN0YXRCdWZmZXIpICE9IC0xOwogfQogCiBib29sIGdldEZp
bGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHRTaXplKQpAQCAtMjI1
LDggKzI0MCw4IEBAIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKFN0cmluZ1ZpZXcg
cGF0aCwgY29uc3QgVmVjdG9yPFN0cmluZ1ZpZXc+JiBjb21wCiAKIGJvb2wgbWFrZUFsbERpcmVj
dG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxl
bmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIHJldHVybiBmaWxlbmFtZSA/IGdf
bWtkaXJfd2l0aF9wYXJlbnRzKGZpbGVuYW1lLmdldCgpLCBTX0lSV1hVKSAhPSAtMSA6IGZhbHNl
OworICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Cisg
ICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19ta2Rpcl93aXRoX3Bh
cmVudHMoZmlsZW5hbWUuZGF0YSgpLCBTX0lSV1hVKSAhPSAtMSA6IGZhbHNlOwogfQogCiBTdHJp
bmcgaG9tZURpcmVjdG9yeVBhdGgoKQpAQCAtMjM3LDMzICsyNTIsMzMgQEAgU3RyaW5nIGhvbWVE
aXJlY3RvcnlQYXRoKCkKIGJvb2wgY3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0cmluZyYgdGFy
Z2V0UGF0aCwgY29uc3QgU3RyaW5nJiBzeW1ib2xpY0xpbmtQYXRoKQogewogICAgIENTdHJpbmcg
dGFyZ2V0UGF0aEZTUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHRhcmdldFBhdGgpOwot
ICAgIGlmICghdGFyZ2V0UGF0aEZTUmVwLmRhdGEoKSB8fCB0YXJnZXRQYXRoRlNSZXAuZGF0YSgp
WzBdID09ICdcMCcpCisgICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHRhcmdldFBhdGhGU1Jl
cCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIENTdHJpbmcgc3ltYm9saWNMaW5rUGF0
aEZTUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHN5bWJvbGljTGlua1BhdGgpOwotICAg
IGlmICghc3ltYm9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKSB8fCBzeW1ib2xpY0xpbmtQYXRoRlNS
ZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHN5bWJv
bGljTGlua1BhdGhGU1JlcCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAh
c3ltbGluayh0YXJnZXRQYXRoRlNSZXAuZGF0YSgpLCBzeW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0
YSgpKTsKIH0KIAotU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGhOYW1l
KQorU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gdG1wRmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoTmFtZSk7
Ci0gICAgaWYgKCF0bXBGaWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIHBhdGhOYW1lOworICAgIGF1
dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYgKCF2
YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuIHBhdGg7CiAKLSAg
ICBHVW5pcXVlUHRyPGdjaGFyPiBiYXNlTmFtZShnX3BhdGhfZ2V0X2Jhc2VuYW1lKHRtcEZpbGVu
YW1lLmdldCgpKSk7CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gYmFzZU5hbWUoZ19wYXRoX2dldF9i
YXNlbmFtZShmaWxlbmFtZS5kYXRhKCkpKTsKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChi
YXNlTmFtZS5nZXQoKSk7CiB9CiAKIGJvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKIHsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBm
aWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIGlmICghZmlsZW5hbWUpCisg
ICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBp
ZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgoZmlsZW5hbWUuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVm
KGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUuZGF0YSgpKSk7CiAgICAgR1JlZlB0cjxHRmls
ZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9maWxlc3lzdGVtX2luZm8o
ZmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUsIDAsIDApKTsKICAg
ICBpZiAoIWZpbGVJbmZvKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzQsMTEgKzI4OSwx
MSBAQCBib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90
JiBmcmVlU3BhY2UpCiAKIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkK
IHsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBh
dGgpOwotICAgIGlmICghZmlsZW5hbWUpCisgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5h
bWUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBHVW5pcXVlUHRyPGNoYXI+IGRp
cm5hbWUoZ19wYXRoX2dldF9kaXJuYW1lKGZpbGVuYW1lLmdldCgpKSk7CisgICAgR1VuaXF1ZVB0
cjxjaGFyPiBkaXJuYW1lKGdfcGF0aF9nZXRfZGlybmFtZShmaWxlbmFtZS5kYXRhKCkpKTsKICAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXJuYW1lLmdldCgpKTsKIH0KIApAQCAtMjg2LDEx
ICszMDEsMTEgQEAgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQogewogICAgIFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7
CiAKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBh
dGgpOwotICAgIGlmICghZmlsZW5hbWUpCisgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5h
bWUpKQogICAgICAgICByZXR1cm4gZW50cmllczsKIAotICAgIEdVbmlxdWVQdHI8R0Rpcj4gZGly
KGdfZGlyX29wZW4oZmlsZW5hbWUuZ2V0KCksIDAsIG51bGxwdHIpKTsKKyAgICBHVW5pcXVlUHRy
PEdEaXI+IGRpcihnX2Rpcl9vcGVuKGZpbGVuYW1lLmRhdGEoKSwgMCwgbnVsbHB0cikpOwogICAg
IGlmICghZGlyKQogICAgICAgICByZXR1cm4gZW50cmllczsKIApAQCAtMjk5LDcgKzMxNCw3IEBA
IFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBT
dHJpbmcmIGZpbHRlcikKICAgICAgICAgaWYgKCFnX3BhdHRlcm5fbWF0Y2hfc3RyaW5nKHBzcGVj
LmdldCgpLCBuYW1lKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEdVbmlxdWVQ
dHI8Z2NoYXI+IGVudHJ5KGdfYnVpbGRfZmlsZW5hbWUoZmlsZW5hbWUuZ2V0KCksIG5hbWUsIG51
bGxwdHIpKTsKKyAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZW50cnkoZ19idWlsZF9maWxlbmFt
ZShmaWxlbmFtZS5kYXRhKCksIG5hbWUsIG51bGxwdHIpKTsKICAgICAgICAgZW50cmllcy5hcHBl
bmQoc3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihlbnRyeS5nZXQoKSkpOwogICAg
IH0KIApAQCAtMzIwLDE2ICszMzUsMTYgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0
IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKIAogUGxhdGZvcm1G
aWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUp
CiB7Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShw
YXRoKTsKLSAgICBpZiAoIWZpbGVuYW1lKQorICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVu
YW1lKSkKICAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CiAKLSAgICBH
UmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5h
bWUuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9u
ZXdfZm9yX3BhdGgoZmlsZW5hbWUuZGF0YSgpKSk7CiAgICAgR0ZpbGVJT1N0cmVhbSogaW9TdHJl
YW0gPSAwOwogICAgIGlmIChtb2RlID09IEZpbGVPcGVuTW9kZTo6UmVhZCkKICAgICAgICAgaW9T
dHJlYW0gPSBnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgMCwgMCk7CiAgICAgZWxz
ZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlKSB7Ci0gICAgICAgIGlmIChnX2ZpbGVf
dGVzdChmaWxlbmFtZS5nZXQoKSwgc3RhdGljX2Nhc3Q8R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9F
WElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkpCisgICAgICAgIGlmIChnX2ZpbGVfdGVz
dChmaWxlbmFtZS5kYXRhKCksIHN0YXRpY19jYXN0PEdGaWxlVGVzdD4oR19GSUxFX1RFU1RfRVhJ
U1RTIHwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUikpKQogICAgICAgICAgICAgaW9TdHJlYW0gPSBn
X2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgMCwgMCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwg
R19GSUxFX0NSRUFURV9OT05FLCAwLCAwKTsKQEAgLTM5NSwxNiArNDEwLDE2IEBAIGludCByZWFk
RnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0
aCkKIAogYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYg
bmV3UGF0aCkKIHsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBvbGRGaWxlbmFtZSA9IHVuZXNjYXBl
ZEZpbGVuYW1lKG9sZFBhdGgpOwotICAgIGlmICghb2xkRmlsZW5hbWUpCisgICAgYXV0byBvbGRG
aWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsKKyAgICBpZiAoIXZh
bGlkUmVwcmVzZW50YXRpb24ob2xkRmlsZW5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBHVW5pcXVlUHRyPGdjaGFyPiBuZXdGaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKG5l
d1BhdGgpOwotICAgIGlmICghbmV3RmlsZW5hbWUpCisgICAgYXV0byBuZXdGaWxlbmFtZSA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKKyAgICBpZiAoIXZhbGlkUmVwcmVzZW50
YXRpb24obmV3RmlsZW5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHUmVmUHRy
PEdGaWxlPiBvbGRGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgob2xkRmlsZW5h
bWUuZ2V0KCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlPiBuZXdGaWxlID0gYWRvcHRHUmVmKGdfZmls
ZV9uZXdfZm9yX3BhdGgobmV3RmlsZW5hbWUuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBv
bGRGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgob2xkRmlsZW5hbWUuZGF0YSgp
KSk7CisgICAgR1JlZlB0cjxHRmlsZT4gbmV3RmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zv
cl9wYXRoKG5ld0ZpbGVuYW1lLmRhdGEoKSkpOwogCiAgICAgcmV0dXJuIGdfZmlsZV9tb3ZlKG9s
ZEZpbGUuZ2V0KCksIG5ld0ZpbGUuZ2V0KCksIEdfRklMRV9DT1BZX09WRVJXUklURSwgbnVsbHB0
ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CiB9CkBAIC00MTQsMzEgKzQyOSwyNyBAQCBi
b29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBkZXN0aW5hdGlvbikKICNpZiBPUyhXSU5ET1dTKQogICAgIHJldHVybiAhITo6Q29weUZpbGUo
c291cmNlLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBkZXN0aW5hdGlv
bi5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgVFJVRSk7CiAjZWxzZQot
ICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHNvdXJjZUZpbGVuYW1lID0gdW5lc2NhcGVkRmlsZW5hbWUo
c291cmNlKTsKLSAgICBpZiAoIXNvdXJjZUZpbGVuYW1lKQorICAgIGF1dG8gc291cmNlRmlsZW5h
bWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsKKyAgICBpZiAoIXZhbGlkUmVw
cmVzZW50YXRpb24oc291cmNlRmlsZW5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBHVW5pcXVlUHRyPGdjaGFyPiBkZXN0aW5hdGlvbkZpbGVuYW1lID0gdW5lc2NhcGVkRmlsZW5h
bWUoZGVzdGluYXRpb24pOwotICAgIGlmICghZGVzdGluYXRpb25GaWxlbmFtZSkKKyAgICBhdXRv
IGRlc3RpbmF0aW9uRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGVzdGluYXRp
b24pOworICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbkZpbGVuYW1lKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFsaW5rKHNvdXJjZUZpbGVuYW1lLmdl
dCgpLCBkZXN0aW5hdGlvbkZpbGVuYW1lLmdldCgpKSkKKyAgICBpZiAoIWxpbmsoc291cmNlRmls
ZW5hbWUuZGF0YSgpLCBkZXN0aW5hdGlvbkZpbGVuYW1lLmRhdGEoKSkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgLy8gSGFyZCBsaW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVh
ZC4KLSAgICBHUmVmUHRyPEdGaWxlPiBzb3VyY2VGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdf
Zm9yX3BhdGgoc291cmNlRmlsZW5hbWUuZ2V0KCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlPiBkZXN0
aW5hdGlvbkZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChkZXN0aW5hdGlvbkZp
bGVuYW1lLmdldCgpKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gc291cmNlRmlsZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHNvdXJjZUZpbGVuYW1lLmRhdGEoKSkpOworICAgIEdSZWZQ
dHI8R0ZpbGU+IGRlc3RpbmF0aW9uRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRo
KGRlc3RpbmF0aW9uRmlsZW5hbWUuZGF0YSgpKSk7CiAgICAgcmV0dXJuIGdfZmlsZV9jb3B5KHNv
dXJjZUZpbGUuZ2V0KCksIGRlc3RpbmF0aW9uRmlsZS5nZXQoKSwgR19GSUxFX0NPUFlfTk9ORSwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CiAjZW5kaWYKIH0KIAogT3B0aW9u
YWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJpbmcmIGZzRmlsZSkKIHsKLSAg
ICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKGZzRmlsZS5k
YXRhKCkpOwotICAgIGlmICghZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgoZmlsZW5hbWUuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVm
KGdfZmlsZV9uZXdfZm9yX3BhdGgoZnNGaWxlLmRhdGEoKSkpOwogICAgIEdSZWZQdHI8R0ZpbGVJ
bmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfZmlsZXN5c3RlbV9pbmZvKGZp
bGUuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfVU5JWF9ERVZJQ0UsIG51bGxwdHIsIG51bGxwdHIp
KTsKICAgICBpZiAoIWZpbGVJbmZvKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361179</attachid>
            <date>2019-02-05 02:48:11 -0800</date>
            <delta_ts>2019-02-05 02:48:11 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-194213-20190205114810.patch</filename>
            <type>text/plain</type>
            <size>17063</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwOTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhmMGY1ZDM0MDUzOTVkZDMxNDFlNTZm
MWZiODI4NTBkODMxZmYzM2QuLmFlOTlkODVjODBlYzQ5MDMzNGM2NGZjOWU3YWMxNzE0ZDI2YWMw
OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTktMDItMDQgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHTGliXSBTdG9wIFVSSS1lc2NhcGluZyBmaWxl
IHN5c3RlbSByZXByZXNlbnRhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5NDIxMworCisgICAgICAgIFJldmlld2VkIGJ5IENhcmxvcyBHYXJj
aWEgQ2FtcG9zLgorCisgICAgICAgIFN0b3AgVVJJLWVzY2FwaW5nIG9mIGZpbGUgcmVwcmVzZW50
YXRpb24gc3RyaW5ncyBpbgorICAgICAgICBGaWxlU3lzdGVtOjpzdHJpbmdGcm9tRmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKCksIGFuZCBVUkktdW5lc2NhcGluZworICAgICAgICBvZiBzdHJpbmdz
IGluIEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbigpLgorCisgICAgICAgIFRo
aXMgYmVoYXZpb3IgZGV2aWF0ZXMgZnJvbSBQT1NJWCBhbmQgQ0YgaW1wbGVtZW50YXRpb25zIGFu
ZCBpcworICAgICAgICBjdXJyZW50bHkgYnJlYWtpbmcgSW5kZXhlZERCLXNwZWNpZmljIGNhbGN1
bGF0aW9uIG9mIGRhdGFiYXNlIHNpemVzIGR1ZQorICAgICAgICB0byBkaXJlY3RvcnkgY29tcG9u
ZW50cyB1c2VkIGluIHRoYXQgcHJvY2VzcyB0aGF0IGFyZSBVUkwtYmFzZWQgYW5kIGFyZQorICAg
ICAgICBhcyBzdWNoIFVSSS1lc2NhcGVkLiBXaGVuIHVuZXNjYXBlZCwgdGhvc2Ugc2luZ2xlIGRp
cmVjdG9yeSBjb21wb25lbnRzCisgICAgICAgIGV4cGxvZGUgaW50byBtdWx0aXBsZSBkaXJlY3Rv
cnkgY29tcG9uZW50cywgbGVhZGluZyB0byBpbmNvcnJlY3QgdG90YWwKKyAgICAgICAgZGF0YWJh
c2Ugc2l6ZSBjYWxjdWxhdGlvbiB3aGVuIGl0ZXJhdGluZyB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5
LgorCisgICAgICAgIEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24oKSBub3cgcmV0cmlldmVzIEdMaWIncworICAgICAgICBmaWxlbmFtZSBjaGFyc2V0cyBhbmQg
aW4gd29yc3QgY2FzZSBjb252ZXJ0cyB0aGUgZmlsZXN5c3RlbQorICAgICAgICByZXByZXNlbnRh
dGlvbiB0byBVVEYtOCBiZWZvcmUgU3RyaW5nOjpmcm9tVVRGOCgpIGlzIHVzZWQuCisgICAgICAg
IEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbigpIHJldmVyc2VzIHRoYXQgcHJv
Y2VzcywgdGFraW5nCisgICAgICAgIFN0cmluZydzIFVURi04IGRhdGEgYW5kIGNvbnZlcnRpbmcg
aXQgdG8gdGFyZ2V0IGNoYXJzZXQgaWYgbmVjZXNzYXJ5LgorCisgICAgICAgIE90aGVyIEZpbGVT
eXN0ZW0gZnVuY3Rpb25zIGFyZSBhZGp1c3RlZCB0byBjb252ZXJ0IHBhc3NlZC1pbiBTdHJpbmcK
KyAgICAgICAgb2JqZWN0cyB0byBmaWxlc3lzdGVtIHJlcHJlc2VudGF0aW9ucy4KKworICAgICAg
ICAqIHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV1RG
OjpGaWxlU3lzdGVtSW1wbDo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdU
Rjo6RmlsZVN5c3RlbUltcGw6OnZhbGlkUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV1RGOjpG
aWxlU3lzdGVtSW1wbDo6ZmlsZW5hbWVGb3JEaXNwbGF5KToKKyAgICAgICAgKFdURjo6RmlsZVN5
c3RlbUltcGw6OmZpbGVFeGlzdHMpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZGVs
ZXRlRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVFbXB0eURpcmVj
dG9yeSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpnZXRGaWxlU3RhdCk6CisgICAg
ICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpnZXRGaWxlTFN0YXQpOgorICAgICAgICAoV1RGOjpG
aWxlU3lzdGVtSW1wbDo6bWFrZUFsbERpcmVjdG9yaWVzKToKKyAgICAgICAgKFdURjo6RmlsZVN5
c3RlbUltcGw6OmNyZWF0ZVN5bWJvbGljTGluayk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1J
bXBsOjpwYXRoR2V0RmlsZU5hbWUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6Z2V0
Vm9sdW1lRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmRpcmVjdG9y
eU5hbWUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6bGlzdERpcmVjdG9yeSk6Cisg
ICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpvcGVuRmlsZSk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjptb3ZlRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpo
YXJkTGlua09yQ29weUZpbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6Z2V0Rmls
ZURldmljZUlkKTogQWxpZ24gd2l0aCBQT1NJWCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQg
dHJlYXQgaW5wdXQgQ1N0cmluZyBhcyBhbiBleGlzdGluZyBmaWxlc3lzdGVtIHJlcHJlc2VudGF0
aW9uLgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6dW5lc2NhcGVkRmlsZW5hbWUpOiBE
ZWxldGVkLgorCiAyMDE5LTAyLTA0ICBNczJnZXIgIDxNczJnZXJAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR1RLXVtXUEVdIE5lZWQgYSBmdW5jdGlvbiB0byBjb252ZXJ0IGludGVybmFsIFVSSSB0
byBkaXNwbGF5ICgicHJldHR5IikgVVJJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGli
L0ZpbGVTeXN0ZW1HbGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIu
Y3BwCmluZGV4IGMzZWM5OWEzZDFiNDkxZWIxOTYzMWUwMDU4YTQxZDFhNzUxNmZlNWMuLjBiZjEy
YjBjOWRiMjc1ZDIwZmVlZjIwOGUwNjA4YTM3NDgwNjE0NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIv
RmlsZVN5c3RlbUdsaWIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL2dsaWIv
R0xpYlV0aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQVNDSUlGYXN0UGF0
aC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00Miw0
MiArNDMsNjIgQEAgbmFtZXNwYWNlIFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7
CiAKLS8qIE9uIGxpbnV4IGZpbGUgbmFtZXMgYXJlIGp1c3QgcmF3IGJ5dGVzLCBzbyBhbHNvIHN0
cmluZ3MgdGhhdCBjYW5ub3QgYmUgZW5jb2RlZCBpbiBhbnkgd2F5Ci0gKiBhcmUgdmFsaWQgZmls
ZSBuYW1lcy4gVGhpcyBtZWFuIHRoYXQgd2UgY2Fubm90IGp1c3Qgc3RvcmUgYSBmaWxlIG5hbWUg
YXMtaXMgaW4gYSBTdHJpbmcKLSAqIGJ1dCB3ZSBoYXZlIHRvIGVzY2FwZSBpdC4KLSAqIE9uIFdp
bmRvd3MgdGhlIEdMaWIgZmlsZSBuYW1lIGVuY29kaW5nIGlzIGFsd2F5cyBVVEYtOCBzbyB3ZSBj
YW4gb3B0aW1pemUgdGhpcyBjYXNlLiAqLwotU3RyaW5nIHN0cmluZ0Zyb21GaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oY29uc3QgY2hhciogZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKQorU3RyaW5n
IHN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgY2hhciogcmVwcmVzZW50
YXRpb24pCiB7Ci0gICAgaWYgKCFmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24pCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIXJlcHJlc2VudGF0aW9uKQorICAgICAgICByZXR1cm4g
eyB9OwogCi0jaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24pOwotI2Vsc2UKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBlc2Nh
cGVkU3RyaW5nKGdfdXJpX2VzY2FwZV9zdHJpbmcoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uLCAi
LzoiLCBGQUxTRSkpOwotICAgIHJldHVybiBlc2NhcGVkU3RyaW5nLmdldCgpOwotI2VuZGlmCisg
ICAgLy8gU2hvcnQtY3V0IHRvIFN0cmluZyBjcmVhdGlvbiB3aGVuIG9ubHkgQVNDSUkgY2hhcmFj
dGVycyBhcmUgdXNlZC4KKyAgICBzaXplX3QgcmVwcmVzZW50YXRpb25MZW5ndGggPSBzdHJsZW4o
cmVwcmVzZW50YXRpb24pOworICAgIGlmIChjaGFyYWN0ZXJzQXJlQWxsQVNDSUkocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KHJlcHJlc2VudGF0aW9uKSwgcmVwcmVzZW50YXRpb25MZW5n
dGgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKHJlcHJlc2VudGF0aW9uLCByZXByZXNlbnRhdGlv
bkxlbmd0aCk7CisKKyAgICAvLyBJZiB0aGUgcmV0dXJuZWQgY2hhcnNldCBpcyBVVEYtOCAoaS5l
LiBnX2dldF9maWxlbmFtZV9jaGFyc2V0cygpIHJldHVybnMgdHJ1ZSksCisgICAgLy8gZ28gZGly
ZWN0bHkgdG8gU3RyaW5nIGNyZWF0aW9uLgorICAgIGNvbnN0IGdjaGFyKiogZmlsZW5hbWVDaGFy
c2V0cyA9IG51bGxwdHI7CisgICAgaWYgKGdfZ2V0X2ZpbGVuYW1lX2NoYXJzZXRzKCZmaWxlbmFt
ZUNoYXJzZXRzKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgocmVwcmVzZW50YXRp
b24sIHJlcHJlc2VudGF0aW9uTGVuZ3RoKTsKKworICAgIEFTU0VSVChmaWxlbmFtZUNoYXJzZXRz
KTsKKyAgICAvLyBGSVhNRTogSWYgcG9zc2libGUsIHdlJ2Qgd2FudCB0byBjb252ZXJ0IGRpcmVj
dGx5IHRvIFVURi0xNiBhbmQgY29uc3RydWN0CisgICAgLy8gV1RGOjpTdHJpbmcgb2JqZWN0IHdp
dGggcmVzdWx0aW5nIGRhdGEuCisgICAgc2l6ZV90IHV0ZjhMZW5ndGggPSAwOworICAgIEdVbmlx
dWVQdHI8Z2NoYXI+IHV0ZjgoZ19jb252ZXJ0KHJlcHJlc2VudGF0aW9uLCByZXByZXNlbnRhdGlv
bkxlbmd0aCwKKyAgICAgICAgIlVURi04IiwgZmlsZW5hbWVDaGFyc2V0c1swXSwgbnVsbHB0ciwg
JnV0ZjhMZW5ndGgsIG51bGxwdHIpKTsKKyAgICBpZiAoIXV0ZjgpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh1dGY4LmdldCgpLCB1dGY4TGVuZ3Ro
KTsKIH0KIAotc3RhdGljIEdVbmlxdWVQdHI8Y2hhcj4gdW5lc2NhcGVkRmlsZW5hbWUoY29uc3Qg
U3RyaW5nJiBwYXRoKQorQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3Ry
aW5nJiBwYXRoKQogewogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0jaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gR1VuaXF1ZVB0cjxjaGFyPihnX3N0
cmR1cChwYXRoLnV0ZjgoKS5kYXRhKCkpKTsKLSNlbHNlCi0gICAgcmV0dXJuIEdVbmlxdWVQdHI8
Y2hhcj4oZ191cmlfdW5lc2NhcGVfc3RyaW5nKHBhdGgudXRmOCgpLmRhdGEoKSwgbnVsbHB0cikp
OwotI2VuZGlmCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBDU3RyaW5nIHV0ZjggPSBwYXRo
LnV0ZjgoKTsKKworICAgIC8vIElmIHRoZSByZXR1cm5lZCBjaGFyc2V0IGlzIFVURi04IChpLmUu
IGdfZ2V0X2ZpbGVuYW1lX2NoYXJzZXRzKCkgcmV0dXJucyB0cnVlKSwKKyAgICAvLyBzaW1wbHkg
cmV0dXJuIHRoZSBDU3RyaW5nIG9iamVjdC4KKyAgICBjb25zdCBnY2hhcioqIGZpbGVuYW1lQ2hh
cnNldHMgPSBudWxscHRyOworICAgIGlmIChnX2dldF9maWxlbmFtZV9jaGFyc2V0cygmZmlsZW5h
bWVDaGFyc2V0cykpCisgICAgICAgIHJldHVybiB1dGY4OworCisgICAgQVNTRVJUKGZpbGVuYW1l
Q2hhcnNldHMpOworICAgIC8vIEZJWE1FOiBJZiBwb3NzaWJsZSwgd2UnZCB3YW50IHRvIGNvbnZl
cnQgZGlyZWN0bHkgZnJvbSBXVEY6OlN0cmluZydzIFVURi0xNiBkYXRhLgorICAgIHNpemVfdCBy
ZXByZXNlbnRhdGlvbkxlbmd0aCA9IDA7CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gcmVwcmVzZW50
YXRpb24oZ19jb252ZXJ0KHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0aCgpLAorICAgICAgICBmaWxl
bmFtZUNoYXJzZXRzWzBdLCAiVVRGLTgiLCBudWxscHRyLCAmcmVwcmVzZW50YXRpb25MZW5ndGgs
IG51bGxwdHIpKTsKKyAgICBpZiAoIXJlcHJlc2VudGF0aW9uKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgcmV0dXJuIENTdHJpbmcocmVwcmVzZW50YXRpb24uZ2V0KCksIHJlcHJlc2VudGF0
aW9uTGVuZ3RoKTsKIH0KIAotQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiBwYXRoKQorYm9vbCB2YWxpZFJlcHJlc2VudGF0aW9uKGNvbnN0IENTdHJpbmcmIHJl
cHJlc2VudGF0aW9uKQogewotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIHBhdGgudXRmOCgp
OwotI2Vsc2UKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVu
YW1lKHBhdGgpOwotICAgIHJldHVybiBmaWxlbmFtZS5nZXQoKTsKLSNlbmRpZgorICAgIGF1dG8q
IGRhdGEgPSByZXByZXNlbnRhdGlvbi5kYXRhKCk7CisgICAgcmV0dXJuICEhZGF0YSAmJiBkYXRh
WzBdICE9ICdcMCc7CiB9CiAKIC8vIENvbnZlcnRzIGEgc3RyaW5nIHRvIHNvbWV0aGluZyBzdWl0
YWJsZSB0byBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuCkBAIC04Niw1MiArMTA3LDUxIEBAIFN0
cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAjaWYgT1MoV0lO
RE9XUykKICAgICByZXR1cm4gc3RyaW5nOwogI2Vsc2UKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBm
aWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHN0cmluZyk7Ci0gICAgaWYgKCFmaWxlbmFtZSkK
KyAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHN0cmluZyk7Cisg
ICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSkKICAgICAgICAgcmV0dXJuIHN0
cmluZzsKIAotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGRpc3BsYXkoZ19maWxlbmFtZV90b191dGY4
KGZpbGVuYW1lLmdldCgpLCAtMSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIEdV
bmlxdWVQdHI8Z2NoYXI+IGRpc3BsYXkoZ19maWxlbmFtZV9kaXNwbGF5X25hbWUoZmlsZW5hbWUu
ZGF0YSgpKSk7CiAgICAgaWYgKCFkaXNwbGF5KQogICAgICAgICByZXR1cm4gc3RyaW5nOwotCiAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZGlzcGxheS5nZXQoKSk7CiAjZW5kaWYKIH0KIAog
Ym9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBHVW5pcXVlUHRyPGdj
aGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIHJldHVybiBmaWxl
bmFtZSA/IGdfZmlsZV90ZXN0KGZpbGVuYW1lLmdldCgpLCBHX0ZJTEVfVEVTVF9FWElTVFMpIDog
ZmFsc2U7CisgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRo
KTsKKyAgICByZXR1cm4gdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkgPyBnX2ZpbGVfdGVz
dChmaWxlbmFtZS5kYXRhKCksIEdfRklMRV9URVNUX0VYSVNUUykgOiBmYWxzZTsKIH0KIAogYm9v
bCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBHVW5pcXVlUHRyPGdjaGFy
PiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIHJldHVybiBmaWxlbmFt
ZSA/IGdfcmVtb3ZlKGZpbGVuYW1lLmdldCgpKSAhPSAtMSA6IGZhbHNlOworICAgIGF1dG8gZmls
ZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgcmV0dXJuIHZhbGlk
UmVwcmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19yZW1vdmUoZmlsZW5hbWUuZGF0YSgpKSAhPSAt
MSA6IGZhbHNlOwogfQogCiBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
cGF0aCkKIHsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVu
YW1lKHBhdGgpOwotICAgIHJldHVybiBmaWxlbmFtZSA/IGdfcm1kaXIoZmlsZW5hbWUuZ2V0KCkp
ICE9IC0xIDogZmFsc2U7CisgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihwYXRoKTsKKyAgICByZXR1cm4gdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkgPyBn
X3JtZGlyKGZpbGVuYW1lLmRhdGEoKSkgIT0gLTEgOiBmYWxzZTsKIH0KIAogc3RhdGljIGJvb2wg
Z2V0RmlsZVN0YXQoY29uc3QgU3RyaW5nJiBwYXRoLCBHU3RhdEJ1Ziogc3RhdEJ1ZmZlcikKIHsK
LSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgp
OwotICAgIGlmICghZmlsZW5hbWUpCisgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZ19zdGF0KGZpbGVuYW1lLmdl
dCgpLCBzdGF0QnVmZmVyKSAhPSAtMTsKKyAgICByZXR1cm4gZ19zdGF0KGZpbGVuYW1lLmRhdGEo
KSwgc3RhdEJ1ZmZlcikgIT0gLTE7CiB9CiAKIHN0YXRpYyBib29sIGdldEZpbGVMU3RhdChjb25z
dCBTdHJpbmcmIHBhdGgsIEdTdGF0QnVmKiBzdGF0QnVmZmVyKQogewotICAgIEdVbmlxdWVQdHI8
Z2NoYXI+IGZpbGVuYW1lID0gdW5lc2NhcGVkRmlsZW5hbWUocGF0aCk7Ci0gICAgaWYgKCFmaWxl
bmFtZSkKKyAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
OworICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBnX2xzdGF0KGZpbGVuYW1lLmdldCgpLCBzdGF0QnVmZmVy
KSAhPSAtMTsKKyAgICByZXR1cm4gZ19sc3RhdChmaWxlbmFtZS5kYXRhKCksIHN0YXRCdWZmZXIp
ICE9IC0xOwogfQogCiBib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBs
b25nJiByZXN1bHRTaXplKQpAQCAtMjI1LDggKzI0NSw4IEBAIFN0cmluZyBwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnRzKFN0cmluZ1ZpZXcgcGF0aCwgY29uc3QgVmVjdG9yPFN0cmluZ1ZpZXc+JiBj
b21wCiAKIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAg
ICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwot
ICAgIHJldHVybiBmaWxlbmFtZSA/IGdfbWtkaXJfd2l0aF9wYXJlbnRzKGZpbGVuYW1lLmdldCgp
LCBTX0lSV1hVKSAhPSAtMSA6IGZhbHNlOworICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmls
ZW5hbWUpID8gZ19ta2Rpcl93aXRoX3BhcmVudHMoZmlsZW5hbWUuZGF0YSgpLCBTX0lSV1hVKSAh
PSAtMSA6IGZhbHNlOwogfQogCiBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQpAQCAtMjM3LDMz
ICsyNTcsMzMgQEAgU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKIGJvb2wgY3JlYXRlU3ltYm9s
aWNMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBzeW1ib2xpY0xp
bmtQYXRoKQogewogICAgIENTdHJpbmcgdGFyZ2V0UGF0aEZTUmVwID0gZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHRhcmdldFBhdGgpOwotICAgIGlmICghdGFyZ2V0UGF0aEZTUmVwLmRhdGEoKSB8
fCB0YXJnZXRQYXRoRlNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgaWYgKCF2YWxpZFJlcHJl
c2VudGF0aW9uKHRhcmdldFBhdGhGU1JlcCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IENTdHJpbmcgc3ltYm9saWNMaW5rUGF0aEZTUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHN5bWJvbGljTGlua1BhdGgpOwotICAgIGlmICghc3ltYm9saWNMaW5rUGF0aEZTUmVwLmRhdGEo
KSB8fCBzeW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgaWYgKCF2
YWxpZFJlcHJlc2VudGF0aW9uKHN5bWJvbGljTGlua1BhdGhGU1JlcCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHJldHVybiAhc3ltbGluayh0YXJnZXRQYXRoRlNSZXAuZGF0YSgpLCBz
eW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpKTsKIH0KIAotU3RyaW5nIHBhdGhHZXRGaWxlTmFt
ZShjb25zdCBTdHJpbmcmIHBhdGhOYW1lKQorU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBT
dHJpbmcmIHBhdGgpCiB7Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gdG1wRmlsZW5hbWUgPSB1bmVz
Y2FwZWRGaWxlbmFtZShwYXRoTmFtZSk7Ci0gICAgaWYgKCF0bXBGaWxlbmFtZSkKLSAgICAgICAg
cmV0dXJuIHBhdGhOYW1lOworICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24ocGF0aCk7CisgICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIHBhdGg7CiAKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBiYXNlTmFtZShnX3Bh
dGhfZ2V0X2Jhc2VuYW1lKHRtcEZpbGVuYW1lLmdldCgpKSk7CisgICAgR1VuaXF1ZVB0cjxnY2hh
cj4gYmFzZU5hbWUoZ19wYXRoX2dldF9iYXNlbmFtZShmaWxlbmFtZS5kYXRhKCkpKTsKICAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChiYXNlTmFtZS5nZXQoKSk7CiB9CiAKIGJvb2wgZ2V0Vm9s
dW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKIHsK
LSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgp
OwotICAgIGlmICghZmlsZW5hbWUpCisgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRv
cHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUuZ2V0KCkpKTsKKyAgICBHUmVmUHRy
PEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUuZGF0
YSgpKSk7CiAgICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmls
ZV9xdWVyeV9maWxlc3lzdGVtX2luZm8oZmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9GSUxF
U1lTVEVNX0ZSRUUsIDAsIDApKTsKICAgICBpZiAoIWZpbGVJbmZvKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0yNzQsMTEgKzI5NCwxMSBAQCBib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25z
dCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCiAKIFN0cmluZyBkaXJlY3RvcnlO
YW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFt
ZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIGlmICghZmlsZW5hbWUpCisgICAgYXV0
byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoIXZh
bGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
LSAgICBHVW5pcXVlUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRoX2dldF9kaXJuYW1lKGZpbGVuYW1l
LmdldCgpKSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkaXJuYW1lKGdfcGF0aF9nZXRfZGlybmFt
ZShmaWxlbmFtZS5kYXRhKCkpKTsKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXJuYW1l
LmdldCgpKTsKIH0KIApAQCAtMjg2LDExICszMDYsMTEgQEAgVmVjdG9yPFN0cmluZz4gbGlzdERp
cmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQogewogICAg
IFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7CiAKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFt
ZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIGlmICghZmlsZW5hbWUpCisgICAgYXV0
byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoIXZh
bGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpKQogICAgICAgICByZXR1cm4gZW50cmllczsKIAot
ICAgIEdVbmlxdWVQdHI8R0Rpcj4gZGlyKGdfZGlyX29wZW4oZmlsZW5hbWUuZ2V0KCksIDAsIG51
bGxwdHIpKTsKKyAgICBHVW5pcXVlUHRyPEdEaXI+IGRpcihnX2Rpcl9vcGVuKGZpbGVuYW1lLmRh
dGEoKSwgMCwgbnVsbHB0cikpOwogICAgIGlmICghZGlyKQogICAgICAgICByZXR1cm4gZW50cmll
czsKIApAQCAtMjk5LDcgKzMxOSw3IEBAIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcikKICAgICAgICAgaWYgKCFnX3Bh
dHRlcm5fbWF0Y2hfc3RyaW5nKHBzcGVjLmdldCgpLCBuYW1lKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGVudHJ5KGdfYnVpbGRfZmlsZW5hbWUo
ZmlsZW5hbWUuZ2V0KCksIG5hbWUsIG51bGxwdHIpKTsKKyAgICAgICAgR1VuaXF1ZVB0cjxnY2hh
cj4gZW50cnkoZ19idWlsZF9maWxlbmFtZShmaWxlbmFtZS5kYXRhKCksIG5hbWUsIG51bGxwdHIp
KTsKICAgICAgICAgZW50cmllcy5hcHBlbmQoc3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihlbnRyeS5nZXQoKSkpOwogICAgIH0KIApAQCAtMzIwLDE2ICszNDAsMTYgQEAgU3RyaW5n
IG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5k
bGUmIGhhbmRsZSkKIAogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYg
cGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiB7Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5h
bWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoKTsKLSAgICBpZiAoIWZpbGVuYW1lKQorICAgIGF1
dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYgKCF2
YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSkKICAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGU7CiAKLSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdf
ZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBm
aWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUuZGF0YSgpKSk7CiAg
ICAgR0ZpbGVJT1N0cmVhbSogaW9TdHJlYW0gPSAwOwogICAgIGlmIChtb2RlID09IEZpbGVPcGVu
TW9kZTo6UmVhZCkKICAgICAgICAgaW9TdHJlYW0gPSBnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmls
ZS5nZXQoKSwgMCwgMCk7CiAgICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRl
KSB7Ci0gICAgICAgIGlmIChnX2ZpbGVfdGVzdChmaWxlbmFtZS5nZXQoKSwgc3RhdGljX2Nhc3Q8
R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkp
CisgICAgICAgIGlmIChnX2ZpbGVfdGVzdChmaWxlbmFtZS5kYXRhKCksIHN0YXRpY19jYXN0PEdG
aWxlVGVzdD4oR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUikpKQog
ICAgICAgICAgICAgaW9TdHJlYW0gPSBnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwg
MCwgMCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX2NyZWF0
ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAwKTsKQEAgLTM5
NSwxNiArNDE1LDE2IEBAIGludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRs
ZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIAogYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcm
IG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKIHsKLSAgICBHVW5pcXVlUHRyPGdjaGFy
PiBvbGRGaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKG9sZFBhdGgpOwotICAgIGlmICghb2xk
RmlsZW5hbWUpCisgICAgYXV0byBvbGRGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihvbGRQYXRoKTsKKyAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24ob2xkRmlsZW5hbWUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBuZXdGaWxlbmFt
ZSA9IHVuZXNjYXBlZEZpbGVuYW1lKG5ld1BhdGgpOwotICAgIGlmICghbmV3RmlsZW5hbWUpCisg
ICAgYXV0byBuZXdGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsK
KyAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24obmV3RmlsZW5hbWUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBHUmVmUHRyPEdGaWxlPiBvbGRGaWxlID0gYWRvcHRHUmVmKGdfZmls
ZV9uZXdfZm9yX3BhdGgob2xkRmlsZW5hbWUuZ2V0KCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlPiBu
ZXdGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgobmV3RmlsZW5hbWUuZ2V0KCkp
KTsKKyAgICBHUmVmUHRyPEdGaWxlPiBvbGRGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9y
X3BhdGgob2xkRmlsZW5hbWUuZGF0YSgpKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gbmV3RmlsZSA9
IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKG5ld0ZpbGVuYW1lLmRhdGEoKSkpOwogCiAg
ICAgcmV0dXJuIGdfZmlsZV9tb3ZlKG9sZEZpbGUuZ2V0KCksIG5ld0ZpbGUuZ2V0KCksIEdfRklM
RV9DT1BZX09WRVJXUklURSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CiB9
CkBAIC00MTQsMzEgKzQzNCwyNyBAQCBib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJp
bmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKICNpZiBPUyhXSU5ET1dTKQog
ICAgIHJldHVybiAhITo6Q29weUZpbGUoc291cmNlLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkuZGF0YSgpLCBkZXN0aW5hdGlvbi5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LmRhdGEoKSwgVFJVRSk7CiAjZWxzZQotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHNvdXJjZUZpbGVu
YW1lID0gdW5lc2NhcGVkRmlsZW5hbWUoc291cmNlKTsKLSAgICBpZiAoIXNvdXJjZUZpbGVuYW1l
KQorICAgIGF1dG8gc291cmNlRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291
cmNlKTsKKyAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oc291cmNlRmlsZW5hbWUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBkZXN0aW5hdGlvbkZp
bGVuYW1lID0gdW5lc2NhcGVkRmlsZW5hbWUoZGVzdGluYXRpb24pOwotICAgIGlmICghZGVzdGlu
YXRpb25GaWxlbmFtZSkKKyAgICBhdXRvIGRlc3RpbmF0aW9uRmlsZW5hbWUgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24oZGVzdGluYXRpb24pOworICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlv
bihkZXN0aW5hdGlvbkZpbGVuYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KCFsaW5rKHNvdXJjZUZpbGVuYW1lLmdldCgpLCBkZXN0aW5hdGlvbkZpbGVuYW1lLmdldCgpKSkK
KyAgICBpZiAoIWxpbmsoc291cmNlRmlsZW5hbWUuZGF0YSgpLCBkZXN0aW5hdGlvbkZpbGVuYW1l
LmRhdGEoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSGFyZCBsaW5rIGZhaWxl
ZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVhZC4KLSAgICBHUmVmUHRyPEdGaWxlPiBzb3VyY2VGaWxl
ID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291cmNlRmlsZW5hbWUuZ2V0KCkpKTsK
LSAgICBHUmVmUHRyPEdGaWxlPiBkZXN0aW5hdGlvbkZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25l
d19mb3JfcGF0aChkZXN0aW5hdGlvbkZpbGVuYW1lLmdldCgpKSk7CisgICAgR1JlZlB0cjxHRmls
ZT4gc291cmNlRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHNvdXJjZUZpbGVu
YW1lLmRhdGEoKSkpOworICAgIEdSZWZQdHI8R0ZpbGU+IGRlc3RpbmF0aW9uRmlsZSA9IGFkb3B0
R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGRlc3RpbmF0aW9uRmlsZW5hbWUuZGF0YSgpKSk7CiAg
ICAgcmV0dXJuIGdfZmlsZV9jb3B5KHNvdXJjZUZpbGUuZ2V0KCksIGRlc3RpbmF0aW9uRmlsZS5n
ZXQoKSwgR19GSUxFX0NPUFlfTk9ORSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
cik7CiAjZW5kaWYKIH0KIAogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0
IENTdHJpbmcmIGZzRmlsZSkKIHsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVu
ZXNjYXBlZEZpbGVuYW1lKGZzRmlsZS5kYXRhKCkpOwotICAgIGlmICghZmlsZW5hbWUpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRv
cHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUuZ2V0KCkpKTsKKyAgICBHUmVmUHRy
PEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZnNGaWxlLmRhdGEo
KSkpOwogICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVf
cXVlcnlfZmlsZXN5c3RlbV9pbmZvKGZpbGUuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfVU5JWF9E
RVZJQ0UsIG51bGxwdHIsIG51bGxwdHIpKTsKICAgICBpZiAoIWZpbGVJbmZvKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>