<?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>76551</bug_id>
          
          <creation_ts>2012-01-18 09:37:45 -0800</creation_ts>
          <short_desc>Cleanup: Move chrome-specific filesystem type handling code (for FileSystem API) under chromium directory</short_desc>
          <delta_ts>2012-02-02 01:31:39 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Kinuko Yasuda">kinuko</assigned_to>
          <cc>ericu</cc>
    
    <cc>fishd</cc>
    
    <cc>levin</cc>
    
    <cc>sadrul</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zelidrag</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>537928</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-18 09:37:45 -0800</bug_when>
    <thetext>Move chrome-specific filesystem type handling code (for FileSystem API) under chromium directory.

The FileSystem API [1] draft specifies TEMPORARY and PERSISTENT filesystem types but current FileSystem API code under WebCore/fileapi also has definitions and code for chromium-specific EXTERNAL type.
We should probably move such code under platform/chromium.

[1] http://www.w3.org/TR/file-system-api/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537946</commentid>
    <comment_count>1</comment_count>
      <attachid>122953</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-18 09:53:44 -0800</bug_when>
    <thetext>Created attachment 122953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537948</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 09:55:29 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537972</commentid>
    <comment_count>3</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-18 10:26:59 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.

Note for reviewers: the change in the public API part is only adding one-line comment.  Also all the changes are relatively mechanical as this is a cleanup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538107</commentid>
    <comment_count>4</comment_count>
      <attachid>122953</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-01-18 13:29:10 -0800</bug_when>
    <thetext>Comment on attachment 122953
Patch

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

&gt; Source/WebCore/platform/AsyncFileSystem.h:66
&gt; +    static const char kPersistentPathPrefix[];

I thought it was not WebKit style to use the kFoo naming scheme for constants.  Maybe you should not change it in this patch though as that would probably bloat the patch too much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538485</commentid>
    <comment_count>5</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-18 22:15:35 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 122953 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122953&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/AsyncFileSystem.h:66
&gt; &gt; +    static const char kPersistentPathPrefix[];
&gt; 
&gt; I thought it was not WebKit style to use the kFoo naming scheme for constants.  Maybe you should not change it in this patch though as that would probably bloat the patch too much.

Thanks, I will fix it later separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538561</commentid>
    <comment_count>6</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-19 01:59:05 -0800</bug_when>
    <thetext>Committed r105395: &lt;http://trac.webkit.org/changeset/105395&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539526</commentid>
    <comment_count>7</comment_count>
    <who name="Sadrul Habib Chowdhury">sadrul</who>
    <bug_when>2012-01-20 08:25:08 -0800</bug_when>
    <thetext>This changeset is causing failure in chromeos (browser_test:FileBrowserTest, and LocalFileSystem) :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540239</commentid>
    <comment_count>8</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-22 04:13:57 -0800</bug_when>
    <thetext>Sorry I have removed too much code for external filesystem.  Allow me to make another shot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540410</commentid>
    <comment_count>9</comment_count>
      <attachid>123526</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-23 00:35:07 -0800</bug_when>
    <thetext>Created attachment 123526
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540412</commentid>
    <comment_count>10</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-23 00:44:55 -0800</bug_when>
    <thetext>Re-created the patch.  Changes from the previous one (that broke the chromeos build) are:

1. not escaping URLs returned by toURL() (as we didn&apos;t use to)
2. returning the URL synthesized by concatenating &apos;filesystem:&apos; + origin + &apos;/external/&apos; + path rather than using the root URL returned by requestFileSystem for external fs, as it does not work for external fs (while I wanted to make this change for other types).

This time I&apos;ve confirmed that this doesn&apos;t break the chromeos tests on trybot:
http://build.chromium.org/p/tryserver.chromium/buildstatus?builder=linux_chromeos&amp;number=4120
(We have other failures but they are unrelated)

Darin, (or other reviewers) sorry for bothering you again but could you PTAL?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541884</commentid>
    <comment_count>11</comment_count>
      <attachid>123526</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-24 17:25:15 -0800</bug_when>
    <thetext>Comment on attachment 123526
Patch

Obsoleting this change for now as this is conflicting with other changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545436</commentid>
    <comment_count>12</comment_count>
      <attachid>124605</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-30 14:51:19 -0800</bug_when>
    <thetext>Created attachment 124605
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545450</commentid>
    <comment_count>13</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-30 15:08:13 -0800</bug_when>
    <thetext>Rebased.  Again this change is relatively mechanical.

I&apos;ve confirmed that this patch runs ok with the ChromeOS build:
http://build.chromium.org/p/tryserver.chromium/buildstatus?builder=linux_chromeos&amp;number=4408</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545548</commentid>
    <comment_count>14</comment_count>
      <attachid>124605</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2012-01-30 16:12:46 -0800</bug_when>
    <thetext>Comment on attachment 124605
Patch

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

Looks ok, but there are a few things I don&apos;t understand. If we could clear those up, then I coudl r+.

&gt; Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp:94
&gt; +    return type == Temporary || type == Persistent || type == static_cast&lt;Type&gt;(WebKit::WebFileSystem::TypeExternal);

How do you know that TypeExternal won&apos;t overlap in value with the other two?

&gt; Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp:117
&gt; +        result.append(fullPath);

This was doing encodeWithURLEscapeSequence(fullPath) before. Why isn&apos;t that needed anymore?

&gt; Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp:123
&gt; +    return virtualPathToFileSystemURL(fullPath);

It looks like virtualPathToFileSystemURL doesn&apos;t do what toURL did before. Why is this change ok?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545616</commentid>
    <comment_count>15</comment_count>
      <attachid>124605</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-30 17:04:51 -0800</bug_when>
    <thetext>Comment on attachment 124605
Patch

Thanks, please find my response inline. Both of the points you asked have some subte point. I can add more comments or update the code if the code itself doesn&apos;t tell much.

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

&gt;&gt; Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp:94
&gt;&gt; +    return type == Temporary || type == Persistent || type == static_cast&lt;Type&gt;(WebKit::WebFileSystem::TypeExternal);
&gt; 
&gt; How do you know that TypeExternal won&apos;t overlap in value with the other two?

Good question.  The only place we have all the types defined is in WebFileSystem after this change and thus WebFileSystem::Type{Temporary, Persistent, External} should have all different values, and we have assertions for the two enums AsyncFileSystem::Type and WebFileSystem::Type* have same values for temporary and persistent.
(I&apos;m a bit afraid if it&apos;s too subtle-- if so maybe we could keep AsyncFileSystem::External defined in non-chromium directories (but no code to handle it in the common code))

&gt;&gt; Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp:117
&gt;&gt; +        result.append(fullPath);
&gt; 
&gt; This was doing encodeWithURLEscapeSequence(fullPath) before. Why isn&apos;t that needed anymore?

Oops, the encodeWithURLEscapeSequence() has been just added last week and this patch needs to be updated as well.  I&apos;ll update this to call it again.

&gt;&gt; Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp:123
&gt;&gt; +    return virtualPathToFileSystemURL(fullPath);
&gt; 
&gt; It looks like virtualPathToFileSystemURL doesn&apos;t do what toURL did before. Why is this change ok?

The previous code was assuming both returns the same URL (since the URLs generated by toURL and virtualPathToFileSystemURL are handled by the same chrome code), so I thought it&apos;d be good just to have the single implementation for them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545630</commentid>
    <comment_count>16</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2012-01-30 17:20:06 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 124605 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124605&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp:94
&gt; &gt;&gt; +    return type == Temporary || type == Persistent || type == static_cast&lt;Type&gt;(WebKit::WebFileSystem::TypeExternal);
&gt; &gt; 
&gt; &gt; How do you know that TypeExternal won&apos;t overlap in value with the other two?
&gt; 
&gt; Good question.  The only place we have all the types defined is in WebFileSystem after this change and thus WebFileSystem::Type{Temporary, Persistent, External} should have all different values, and we have assertions for the two enums AsyncFileSystem::Type and WebFileSystem::Type* have same values for temporary and persistent.

This is ok. Just making sure.

&gt; 
&gt; &gt;&gt; Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp:123
&gt; &gt;&gt; +    return virtualPathToFileSystemURL(fullPath);
&gt; &gt; 
&gt; &gt; It looks like virtualPathToFileSystemURL doesn&apos;t do what toURL did before. Why is this change ok?
&gt; 
&gt; The previous code was assuming both returns the same URL (since the URLs generated by toURL and virtualPathToFileSystemURL are handled by the same chrome code), so I thought it&apos;d be good just to have the single implementation for them.

I wasn&apos;t clear or I don&apos;t understand. Here is the previous code for toURL: 

Look at the code path for Persistent:

64     result.append(&quot;filesystem:&quot;);
65     result.append(originString);
66     result.append(&quot;/&quot;);
67     switch (m_fileSystem-&gt;asyncFileSystem()-&gt;type()) {
68     case AsyncFileSystem::Temporary:
69         result.append(DOMFileSystemBase::kTemporaryPathPrefix);
70         break;
71     case AsyncFileSystem::Persistent:
72         result.append(DOMFileSystemBase::kPersistentPathPrefix);
73         break;
74     case AsyncFileSystem::External:
75         result.append(DOMFileSystemBase::kExternalPathPrefix);
76         break;
77     }
78     result.append(encodeWithURLEscapeSequences(m_fullPath));
79     return result.toString();

I should end up with
filesystem:[originString]/[DOMFileSystemBase::kPersistentPathPrefix][encodeWithURLEscapeSequences(m_fullPath]

With the new code I get,
[m_filesystemRootURL.path()][encodeWithURLEscapeSequences(m_fullPath.substring(1))]

Does m_filesystemRootURL.path() ==  filesystem:[originString]/[DOMFileSystemBase::kPersistentPathPrefix] ?

Seems like it couldn&apos;t because how would the origin string be in there.

Also, the new code lost this 
61       if (originString == &quot;null&quot;)
62         return String();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545659</commentid>
    <comment_count>17</comment_count>
      <attachid>124605</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-30 17:49:49 -0800</bug_when>
    <thetext>Comment on attachment 124605
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp:123
&gt;&gt;&gt;&gt; +    return virtualPathToFileSystemURL(fullPath);
&gt;&gt;&gt; 
&gt;&gt;&gt; It looks like virtualPathToFileSystemURL doesn&apos;t do what toURL did before. Why is this change ok?
&gt;&gt; 
&gt;&gt; The previous code was assuming both returns the same URL (since the URLs generated by toURL and virtualPathToFileSystemURL are handled by the same chrome code), so I thought it&apos;d be good just to have the single implementation for them.
&gt; 
&gt; I wasn&apos;t clear or I don&apos;t understand. Here is the previous code for toURL: 
&gt; 
&gt; Look at the code path for Persistent:
&gt; 
&gt; 64     result.append(&quot;filesystem:&quot;);
&gt; 65     result.append(originString);
&gt; 66     result.append(&quot;/&quot;);
&gt; 67     switch (m_fileSystem-&gt;asyncFileSystem()-&gt;type()) {
&gt; 68     case AsyncFileSystem::Temporary:
&gt; 69         result.append(DOMFileSystemBase::kTemporaryPathPrefix);
&gt; 70         break;
&gt; 71     case AsyncFileSystem::Persistent:
&gt; 72         result.append(DOMFileSystemBase::kPersistentPathPrefix);
&gt; 73         break;
&gt; 74     case AsyncFileSystem::External:
&gt; 75         result.append(DOMFileSystemBase::kExternalPathPrefix);
&gt; 76         break;
&gt; 77     }
&gt; 78     result.append(encodeWithURLEscapeSequences(m_fullPath));
&gt; 79     return result.toString();
&gt; 
&gt; I should end up with
&gt; filesystem:[originString]/[DOMFileSystemBase::kPersistentPathPrefix][encodeWithURLEscapeSequences(m_fullPath]
&gt; 
&gt; With the new code I get,
&gt; [m_filesystemRootURL.path()][encodeWithURLEscapeSequences(m_fullPath.substring(1))]
&gt; 
&gt; Does m_filesystemRootURL.path() ==  filesystem:[originString]/[DOMFileSystemBase::kPersistentPathPrefix] ?
&gt; 
&gt; Seems like it couldn&apos;t because how would the origin string be in there.
&gt; 
&gt; Also, the new code lost this 
&gt; 61       if (originString == &quot;null&quot;)
&gt; 62         return String();

We&apos;re resetting the [m_filesystemRootURL.path()][encodeWithURLEscapeSequences(m_fullPath.substring(1))] as the resulting URL&apos;s path part, so the resulting URL will still have filesystem:[originString] part.

KURL url = m_filesystemRootURL;
url.setPath(...);

As for &apos;originString == &quot;null&quot;&apos; case, thanks for catching it, I&apos;ll update the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545689</commentid>
    <comment_count>18</comment_count>
      <attachid>124650</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-01-30 18:22:51 -0800</bug_when>
    <thetext>Created attachment 124650
Patch

Added origin==null check and encodeWithURLEscapeSequences in toURL().  Also added some more comments in the new toURL().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545749</commentid>
    <comment_count>19</comment_count>
      <attachid>124650</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2012-01-30 20:17:09 -0800</bug_when>
    <thetext>Comment on attachment 124650
Patch

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547732</commentid>
    <comment_count>20</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-02-02 01:31:39 -0800</bug_when>
    <thetext>Committed r106542: &lt;http://trac.webkit.org/changeset/106542&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122953</attachid>
            <date>2012-01-18 09:53:44 -0800</date>
            <delta_ts>2012-01-23 00:35:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76551-20120119025342.patch</filename>
            <type>text/plain</type>
            <size>20501</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FjYzFlNzRjN2QzMjRm
ZTBjNDM1MjVmZWViZTk4ZjZjZDliZWNmMy4uMWVjOTNkMmE0NWY5NWUxZGU0MTkyNmI1MmQzZGQy
YmE2NzNhYzQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTAxLTE4ICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBDbGVhbnVwOiBNb3Zl
IGNocm9tZS1zcGVjaWZpYyBmaWxlc3lzdGVtIHR5cGUgaGFuZGxpbmcgY29kZSAoZm9yIEZpbGVT
eXN0ZW0gQVBJKSB1bmRlciBjaHJvbWl1bSBkaXJlY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGNy
YWNrRmlsZVN5c3RlbVVSTCgpIGFuZCB0b1VSTCgpIGZyb20KKyAgICAgICAgV2ViQ29yZS9maWxl
YXBpL0RPTUZpbGVTeXN0ZW1CYXNlIGludG8gV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0
ZW0KKyAgICAgICAgc28gdGhhdCBlYWNoIHBsYXRmb3JtIGNhbiBleHRlbmQvaW1wbGVtZW50IHRo
ZWlyIGJlaGF2aW9yIGlmIG5lY2Vzc2FyeS4KKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2Ug
dGhpcyBwYXRjaCBoYXMgbm8gZnVuY3Rpb25hbGl0eSBjaGFuZ2VzLiAoRXhpc3RpbmcKKyAgICAg
ICAgdGVzdHMgc2hvdWxkIHBhc3MpCisKKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1C
YXNlLmNwcDogTW92ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIGNyYWNrRmlsZVN5
c3RlbVVSTCgpIHRvIEFzeW5jRmlsZVN5c3RlbQorICAgICAgICAoV2ViQ29yZTo6RE9NRmlsZVN5
c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTCk6CisgICAgICAgICogZmlsZWFwaS9ET01GaWxl
U3lzdGVtQmFzZS5oOgorICAgICAgICAqIGZpbGVhcGkvRW50cnlCYXNlLmNwcDogTW92ZWQgdGhl
IGltcGxlbWVudGF0aW9uIG9mIHRvVVJMKCkgdG8gQXN5bmNGaWxlU3lzdGVtCisgICAgICAgIChX
ZWJDb3JlOjpFbnRyeUJhc2U6OnRvVVJMKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6
IFJlbW92ZWQgY2hyb21lLXNwZWNpZmljIHR5cGUgaGFuZGxpbmcgY29kZS4KKyAgICAgICAgKFdl
YkNvcmU6OkRPTVdpbmRvdzo6d2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0pOgorICAgICAgICAqIHBh
Z2UvRE9NV2luZG93Lmg6IFJlbW92ZWQgY2hyb21lLXNwZWNpZmljIGZpbGVzeXN0ZW0gdHlwZQor
ICAgICAgICAoRVhURVJOQUwpLgorICAgICAgICAqIHBsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5j
cHA6IEFkZGVkIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdG9VUkwoKSBhbmQgY3JhY2tGaWxl
U3lzdGVtVVJMKCkKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6dG9VUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpjcmFja0ZpbGVTeXN0ZW1VUkwpOgor
ICAgICAgICAqIHBsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oOgorICAgICAgICAqIHdvcmtlcnMv
V29ya2VyQ29udGV4dC5jcHA6IFJlbW92ZWQgY2hyb21lLXNwZWNpZmljIHR5cGUgaGFuZGxpbmcg
Y29kZS4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OndlYmtpdFJlcXVlc3RGaWxl
U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OndlYmtpdFJlcXVlc3RG
aWxlU3lzdGVtU3luYyk6CisKIDIwMTItMDEtMTcgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBFbnN1cmUgd2UgZG9uJ3QgY2FuY2VsIHJldmFsaWRhdGlvbiBv
ZiBhIENhY2hlZFJlc291cmNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDkxN2ZlMTJm
YWFlOGRmNGE1YjlhODY5Y2E1NTRhNDUwYzBhYjBjYWMuLmE2ZmQwY2MyODYwNjc0Y2E1MGQ3OTQ2
YmZhMmEwMDkyOTMwMjA1MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTItMDEtMTggIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIENsZWFudXA6IE1vdmUgY2hyb21lLXNwZWNpZmljIGZpbGVzeXN0ZW0gdHlwZSBo
YW5kbGluZyBjb2RlIChmb3IgRmlsZVN5c3RlbSBBUEkpIHVuZGVyIGNocm9taXVtIGRpcmVjdG9y
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1NTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9B
c3NlcnRNYXRjaGluZ0VudW1zLmNwcDogUmVtb3ZlZCBtYXRjaGluZyBhc3NlcnRpb24gZm9yIFR5
cGVFeHRlcm5hbCBhcyBpdCdzIG5vIGxvbmdlciBkZWZpbmVkIHNlcGFyYXRlbHkuCisgICAgICAg
ICogc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcDogQWRkZWQgY3JhY2tGaWxlU3lzdGVt
VVJMKCkgYW5kIHRvVVJMKCkgaW1wbGVtZW50YXRpb24gdGhhdAorICAgICAgICBoYW5kbGUgY2hy
b21lLXNwZWNpZmljIGZpbGVzeXN0ZW0gdHlwZSAoRVhURVJOQUwpIGFzIHdlbGwgYXMgcmVndWxh
ciBURU1QT1JBUlkvUEVSU0lTVEVOVCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmls
ZVN5c3RlbTo6Y3JhY2tGaWxlU3lzdGVtVVJMKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpB
c3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6dG9VUkwpOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0uaDoKKwogMjAxMi0wMS0xNyAgWXVyeSBTZW1pa2hhdHNreSAg
PHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBVcGRhdGUgQ2hyb21p
dW0gZGVwZW5kZW5jeSAxMTc2MTY6MTE3ODgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbUJhc2UuY3BwCmluZGV4IGVjOGVmNzI1YTYxMDMwNDlhNmQ0NGQ4YWZjY2MzOWQ5
NWFhZDNhMzUuLmVmNDRkNzVjZWM0YWE2Yzg4MzQxZDg1NmI4ZjM1ZTkxMGE1NDU3OGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCkBAIC01MCw0MSAr
NTAsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBjaGFyIERPTUZpbGVTeXN0
ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhQcmVmaXhbXSA9ICJwZXJzaXN0ZW50IjsKLWNvbnN0IHNp
emVfdCBET01GaWxlU3lzdGVtQmFzZTo6a1BlcnNpc3RlbnRQYXRoUHJlZml4TGVuZ3RoID0gc2l6
ZW9mKERPTUZpbGVTeXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhQcmVmaXgpIC0gMTsKLWNvbnN0
IGNoYXIgRE9NRmlsZVN5c3RlbUJhc2U6OmtUZW1wb3JhcnlQYXRoUHJlZml4W10gPSAidGVtcG9y
YXJ5IjsKLWNvbnN0IHNpemVfdCBET01GaWxlU3lzdGVtQmFzZTo6a1RlbXBvcmFyeVBhdGhQcmVm
aXhMZW5ndGggPSBzaXplb2YoRE9NRmlsZVN5c3RlbUJhc2U6OmtUZW1wb3JhcnlQYXRoUHJlZml4
KSAtIDE7Ci1jb25zdCBjaGFyIERPTUZpbGVTeXN0ZW1CYXNlOjprRXh0ZXJuYWxQYXRoUHJlZml4
W10gPSAiZXh0ZXJuYWwiOwotY29uc3Qgc2l6ZV90IERPTUZpbGVTeXN0ZW1CYXNlOjprRXh0ZXJu
YWxQYXRoUHJlZml4TGVuZ3RoID0gc2l6ZW9mKERPTUZpbGVTeXN0ZW1CYXNlOjprRXh0ZXJuYWxQ
YXRoUHJlZml4KSAtIDE7Ci0KKy8vIHN0YXRpYwogYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Y3Jh
Y2tGaWxlU3lzdGVtVVJMKGNvbnN0IEtVUkwmIHVybCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlJiB0
eXBlLCBTdHJpbmcmIGZpbGVQYXRoKQogewotICAgIGlmICghdXJsLnByb3RvY29sSXMoImZpbGVz
eXN0ZW0iKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgS1VSTCBvcmlnaW5VUkwoUGFy
c2VkVVJMU3RyaW5nLCB1cmwucGF0aCgpKTsKLSAgICBTdHJpbmcgcGF0aCA9IGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlcyhvcmlnaW5VUkwucGF0aCgpKTsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkg
fHwgcGF0aFswXSAhPSAnLycpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwYXRoID0gcGF0
aC5zdWJzdHJpbmcoMSk7Ci0KLSAgICBpZiAocGF0aC5zdGFydHNXaXRoKGtUZW1wb3JhcnlQYXRo
UHJlZml4KSkgewotICAgICAgICB0eXBlID0gQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3Jhcnk7Ci0g
ICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhrVGVtcG9yYXJ5UGF0aFByZWZpeExlbmd0aCk7
Ci0gICAgfSBlbHNlIGlmIChwYXRoLnN0YXJ0c1dpdGgoa1BlcnNpc3RlbnRQYXRoUHJlZml4KSkg
ewotICAgICAgICB0eXBlID0gQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50OwotICAgICAgICBw
YXRoID0gcGF0aC5zdWJzdHJpbmcoa1BlcnNpc3RlbnRQYXRoUHJlZml4TGVuZ3RoKTsKLSAgICB9
IGVsc2UgaWYgKHBhdGguc3RhcnRzV2l0aChrRXh0ZXJuYWxQYXRoUHJlZml4KSkgewotICAgICAg
ICB0eXBlID0gQXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5hbDsKLSAgICAgICAgcGF0aCA9IHBhdGgu
c3Vic3RyaW5nKGtFeHRlcm5hbFBhdGhQcmVmaXhMZW5ndGgpOwotICAgIH0gZWxzZQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgcGF0aFswXSAhPSAn
LycpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZpbGVQYXRoLnN3YXAocGF0aCk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEFzeW5jRmlsZVN5c3RlbTo6Y3JhY2tGaWxlU3lz
dGVtVVJMKHVybCwgdHlwZSwgZmlsZVBhdGgpOwogfQogCiBET01GaWxlU3lzdGVtQmFzZTo6RE9N
RmlsZVN5c3RlbUJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVtKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oIGIv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oCmluZGV4IDhiYzBiNjU3
OTc3ZWFiMGYxOTA4ZGU3YTBkYWQ5OTZlODUwMTI1NjUuLmIwMjgwODBlODU1MzU2ODU2NTgxMDAx
ZDBjMWViYThjMTczZTY2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbUJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0
ZW1CYXNlLmgKQEAgLTYyLDEyICs2Miw2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+
RE9NRmlsZVN5c3RlbUJhc2UoKTsKIAotICAgIHN0YXRpYyBjb25zdCBjaGFyIGtQZXJzaXN0ZW50
UGF0aFByZWZpeFtdOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga1BlcnNpc3RlbnRQYXRoUHJl
Zml4TGVuZ3RoOwotICAgIHN0YXRpYyBjb25zdCBjaGFyIGtUZW1wb3JhcnlQYXRoUHJlZml4W107
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrVGVtcG9yYXJ5UGF0aFByZWZpeExlbmd0aDsKLSAg
ICBzdGF0aWMgY29uc3QgY2hhciBrRXh0ZXJuYWxQYXRoUHJlZml4W107Ci0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBrRXh0ZXJuYWxQYXRoUHJlZml4TGVuZ3RoOwogICAgIHN0YXRpYyBib29sIGNy
YWNrRmlsZVN5c3RlbVVSTChjb25zdCBLVVJMJiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlJiwgU3Ry
aW5nJiBmaWxlUGF0aCk7CiAKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnlCYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnlCYXNlLmNwcAppbmRleCAzOTQ1M2Y2
MWM2MWMwYzg1YmYyZGNlMmZlYWFmZmQ4NmU0ZmEzMzhhLi44OGY0MmQ1YmVjYzljMGFiNDVlNzdh
ZDAxNmU4YTAxMGIxNDhkMmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Vu
dHJ5QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeUJhc2UuY3BwCkBA
IC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU2
LDI3ICs1NSw3IEBAIEVudHJ5QmFzZTo6fkVudHJ5QmFzZSgpCiAKIFN0cmluZyBFbnRyeUJhc2U6
OnRvVVJMKCkKIHsKLSAgICBTdHJpbmcgb3JpZ2luU3RyaW5nID0gbV9maWxlU3lzdGVtLT5zZWN1
cml0eU9yaWdpbigpLT50b1N0cmluZygpOwotICAgIEFTU0VSVCghb3JpZ2luU3RyaW5nLmlzRW1w
dHkoKSk7Ci0gICAgaWYgKG9yaWdpblN0cmluZyA9PSAibnVsbCIpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKCJm
aWxlc3lzdGVtOiIpOwotICAgIHJlc3VsdC5hcHBlbmQob3JpZ2luU3RyaW5nKTsKLSAgICByZXN1
bHQuYXBwZW5kKCIvIik7Ci0gICAgc3dpdGNoIChtX2ZpbGVTeXN0ZW0tPmFzeW5jRmlsZVN5c3Rl
bSgpLT50eXBlKCkpIHsKLSAgICBjYXNlIEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5OgotICAg
ICAgICByZXN1bHQuYXBwZW5kKERPTUZpbGVTeXN0ZW1CYXNlOjprVGVtcG9yYXJ5UGF0aFByZWZp
eCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50
OgotICAgICAgICByZXN1bHQuYXBwZW5kKERPTUZpbGVTeXN0ZW1CYXNlOjprUGVyc2lzdGVudFBh
dGhQcmVmaXgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFzeW5jRmlsZVN5c3RlbTo6RXh0
ZXJuYWw6Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoRE9NRmlsZVN5c3RlbUJhc2U6OmtFeHRlcm5h
bFBhdGhQcmVmaXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmVzdWx0LmFwcGVuZCht
X2Z1bGxQYXRoKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgcmV0dXJuIG1f
ZmlsZVN5c3RlbS0+YXN5bmNGaWxlU3lzdGVtKCktPnRvVVJMKG1fZmlsZVN5c3RlbS0+c2VjdXJp
dHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9mdWxsUGF0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCAyOWNjZmIxZGVjYTg1YzNk
MGFhMjA2Zjg2ZjUwYzRiZGI4MmQ4NjljLi4zZjI5NjE3NDQ4MzJhZTFlNjE2YTA1YzE3NDA2YWM3
OTI1OGVlYmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC03ODAsNyArNzgwLDcg
QEAgdm9pZCBET01XaW5kb3c6OndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtKGludCB0eXBlLCBsb25n
IGxvbmcgc2l6ZSwgUGFzc1JlZlB0cjxGaWwKICAgICB9CiAKICAgICBBc3luY0ZpbGVTeXN0ZW06
OlR5cGUgZmlsZVN5c3RlbVR5cGUgPSBzdGF0aWNfY2FzdDxBc3luY0ZpbGVTeXN0ZW06OlR5cGU+
KHR5cGUpOwotICAgIGlmIChmaWxlU3lzdGVtVHlwZSAhPSBBc3luY0ZpbGVTeXN0ZW06OlRlbXBv
cmFyeSAmJiBmaWxlU3lzdGVtVHlwZSAhPSBBc3luY0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQgJiYg
ZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5hbCkgeworICAgIGlmIChm
aWxlU3lzdGVtVHlwZSAhPSBBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSAmJiBmaWxlU3lzdGVt
VHlwZSAhPSBBc3luY0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQpIHsKICAgICAgICAgRE9NRmlsZVN5
c3RlbTo6c2NoZWR1bGVDYWxsYmFjayhkb2N1bWVudCwgZXJyb3JDYWxsYmFjaywgRmlsZUVycm9y
OjpjcmVhdGUoRmlsZUVycm9yOjpJTlZBTElEX01PRElGSUNBVElPTl9FUlIpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTgxNCw4ICs4MTQsNiBAQCB2b2lkIERPTVdpbmRvdzo6d2Via2l0
UmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxF
bgogICAgIExvY2FsRmlsZVN5c3RlbTo6bG9jYWxGaWxlU3lzdGVtKCkucmVhZEZpbGVTeXN0ZW0o
ZG9jdW1lbnQsIHR5cGUsIFJlc29sdmVVUklDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJh
Y2ssIGVycm9yQ2FsbGJhY2ssIGRvY3VtZW50LCBmaWxlUGF0aCkpOwogfQogCi1DT01QSUxFX0FT
U0VSVChzdGF0aWNfY2FzdDxpbnQ+KERPTVdpbmRvdzo6RVhURVJOQUwpID09IHN0YXRpY19jYXN0
PGludD4oQXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5hbCksIGVudW1fbWlzbWF0Y2gpOwotCiBDT01Q
SUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KERPTVdpbmRvdzo6VEVNUE9SQVJZKSA9PSBzdGF0
aWNfY2FzdDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5KSwgZW51bV9taXNtYXRjaCk7
CiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KERPTVdpbmRvdzo6UEVSU0lTVEVOVCkg
PT0gc3RhdGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQpLCBlbnVtX21p
c21hdGNoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKaW5kZXggY2MyOTdmNzk3Y2Y3NTJhZjQ5
NDU0OGZjMjJkZTBkYTA3N2VhNDRiYy4uZDEwYmM1MzFkYzQ4MGQ4ZTBlYjU3NzU0M2UwMzUwNDE4
MTIxY2I4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCkBAIC0zNzAsNyArMzcwLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBlbnVtIEZpbGVTeXN0ZW1UeXBlIHsKICAgICAgICAg
ICAgIFRFTVBPUkFSWSwKICAgICAgICAgICAgIFBFUlNJU1RFTlQsCi0gICAgICAgICAgICBFWFRF
Uk5BTCwKICAgICAgICAgfTsKICAgICAgICAgdm9pZCB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShp
bnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQdHI8RmlsZVN5c3RlbUNhbGxiYWNrPiwg
UGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CiAgICAgICAgIHZvaWQgd2Via2l0UmVzb2x2ZUxv
Y2FsRmlsZVN5c3RlbVVSTChjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9B
c3luY0ZpbGVTeXN0ZW0uY3BwCmluZGV4IDQwNGFhYjY3Mzc2ZGUzYjVlYjlkMzY3MmZkMDUyYzBl
NjgwODU5YzkuLmYwNjgzMzU3MWEzMmY0OWUyOTQzM2E2YjY1ODZiZjNlNzk1ZDcyM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApAQCAtMzYsOSArMzYs
MzMgQEAKICNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKICNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgY2hh
ciBBc3luY0ZpbGVTeXN0ZW06OmtQZXJzaXN0ZW50UGF0aFByZWZpeFtdID0gInBlcnNpc3RlbnQi
OworY29uc3Qgc2l6ZV90IEFzeW5jRmlsZVN5c3RlbTo6a1BlcnNpc3RlbnRQYXRoUHJlZml4TGVu
Z3RoID0gc2l6ZW9mKEFzeW5jRmlsZVN5c3RlbTo6a1BlcnNpc3RlbnRQYXRoUHJlZml4KSAtIDE7
Citjb25zdCBjaGFyIEFzeW5jRmlsZVN5c3RlbTo6a1RlbXBvcmFyeVBhdGhQcmVmaXhbXSA9ICJ0
ZW1wb3JhcnkiOworY29uc3Qgc2l6ZV90IEFzeW5jRmlsZVN5c3RlbTo6a1RlbXBvcmFyeVBhdGhQ
cmVmaXhMZW5ndGggPSBzaXplb2YoQXN5bmNGaWxlU3lzdGVtOjprVGVtcG9yYXJ5UGF0aFByZWZp
eCkgLSAxOworCitTdHJpbmcgQXN5bmNGaWxlU3lzdGVtOjp0b1VSTChjb25zdCBTdHJpbmcmIG9y
aWdpblN0cmluZywgY29uc3QgU3RyaW5nJiBmdWxsUGF0aCkKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKCJmaWxlc3lzdGVtOiIpOworICAgIHJlc3VsdC5h
cHBlbmQob3JpZ2luU3RyaW5nKTsKKyAgICByZXN1bHQuYXBwZW5kKCIvIik7CisgICAgc3dpdGNo
ICh0eXBlKCkpIHsKKyAgICBjYXNlIFRlbXBvcmFyeToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChr
VGVtcG9yYXJ5UGF0aFByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGVyc2lzdGVu
dDoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChrUGVyc2lzdGVudFBhdGhQcmVmaXgpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmVzdWx0LmFwcGVuZChmdWxsUGF0aCk7CisgICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOworfQorCiAjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQogYm9vbCBB
c3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKIHsKQEAgLTQ2LDYgKzcwLDMzIEBAIGJvb2wg
QXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiti
b29sIEFzeW5jRmlsZVN5c3RlbTo6Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbnN0IEtVUkwmIHVybCwg
QXN5bmNGaWxlU3lzdGVtOjpUeXBlJiB0eXBlLCBTdHJpbmcmIGZpbGVQYXRoKQoreworICAgIGlm
ICghdXJsLnByb3RvY29sSXMoImZpbGVzeXN0ZW0iKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgS1VSTCBvcmlnaW5VUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwucGF0aCgpKTsKKyAgICBT
dHJpbmcgcGF0aCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhvcmlnaW5VUkwucGF0aCgpKTsK
KyAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgcGF0aFswXSAhPSAnLycpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7CisKKyAgICBpZiAocGF0aC5z
dGFydHNXaXRoKGtUZW1wb3JhcnlQYXRoUHJlZml4KSkgeworICAgICAgICB0eXBlID0gVGVtcG9y
YXJ5OworICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoa1RlbXBvcmFyeVBhdGhQcmVmaXhM
ZW5ndGgpOworICAgIH0gZWxzZSBpZiAocGF0aC5zdGFydHNXaXRoKGtQZXJzaXN0ZW50UGF0aFBy
ZWZpeCkpIHsKKyAgICAgICAgdHlwZSA9IFBlcnNpc3RlbnQ7CisgICAgICAgIHBhdGggPSBwYXRo
LnN1YnN0cmluZyhrUGVyc2lzdGVudFBhdGhQcmVmaXhMZW5ndGgpOworICAgIH0gZWxzZQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgcGF0aFswXSAh
PSAnLycpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZpbGVQYXRoLnN3YXAocGF0aCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBBc3lu
Y0ZpbGVTeXN0ZW06OmNyZWF0ZShUeXBlLCBjb25zdCBTdHJpbmcmKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVT
eXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCmluZGV4
IGMyYzY4NDU0ZjRjY2IyMTk1NjY5OGU2OTM1M2Y0ZWU3MTBiM2IxZjAuLjE1ODhlYzg3ODNlZDFl
Y2YwMGVhYTY3YzVhY2U2NTQzNTk2ZGFhNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Fz
eW5jRmlsZVN5c3RlbS5oCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICBlbnVtIFR5cGUg
ewogICAgICAgICBUZW1wb3JhcnksCiAgICAgICAgIFBlcnNpc3RlbnQsCi0gICAgICAgIEV4dGVy
bmFsLAogICAgIH07CiAKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIHsgfQpAQCAtNjIsNiArNjEs
MTggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKIAorICAgIC8v
IFBhdGggcHJlZml4ZXMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgZmlsZXN5c3RlbSBVUkxzICh0aGF0
IGNhbiBiZSBvYnRhaW5lZCBieSB0b1VSTCgpKS4KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui9maWxlLXN5c3RlbS1hcGkvI3dpZGwtRW50cnktdG9VUkwKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciBrUGVyc2lzdGVudFBhdGhQcmVmaXhbXTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtQZXJz
aXN0ZW50UGF0aFByZWZpeExlbmd0aDsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrVGVtcG9yYXJ5
UGF0aFByZWZpeFtdOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga1RlbXBvcmFyeVBhdGhQcmVm
aXhMZW5ndGg7CisKKyAgICBzdGF0aWMgYm9vbCBjcmFja0ZpbGVTeXN0ZW1VUkwoY29uc3QgS1VS
TCYsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSYsIFN0cmluZyYgZmlsZVBhdGgpOworCisgICAgLy8g
UmV0dXJucyB0aGUgZmlsZXN5c3RlbSBVUkwgZm9yIHRoZSBnaXZlbiBvcmlnaW5TdHJpbmcgYW5k
IGZ1bGxQYXRoLgorICAgIHZpcnR1YWwgU3RyaW5nIHRvVVJMKGNvbnN0IFN0cmluZyYgb3JpZ2lu
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKTsKKwogICAgIC8vIFN1YmNsYXNzIG11c3Qg
aW1wbGVtZW50IHRoaXMgaWYgaXQgc3VwcG9ydHMgc3luY2hyb25vdXMgb3BlcmF0aW9ucy4KICAg
ICAvLyBUaGlzIHNob3VsZCByZXR1cm4gZmFsc2UgaWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgb3Bl
cmF0aW9ucy4KICAgICB2aXJ0dWFsIGJvb2wgd2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSB7
IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAK
aW5kZXggOGYyNDMzMGZmMzkwYTcwNzQ1ZDgyYjEwODQ0NjYyODk4MzBhNjFlZC4uZWQzYjc4NGI2
MTU0ZWM1MWIzNDE4MmFjMzdmNDZkNGRiN2U0ZmRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckNvbnRleHQuY3BwCkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBXb3JrZXJDb250ZXh0
Ojp3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NS
ZWZQdHIKICAgICB9CiAKICAgICBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgZmlsZVN5c3RlbVR5cGUg
PSBzdGF0aWNfY2FzdDxBc3luY0ZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpOwotICAgIGlmIChmaWxl
U3lzdGVtVHlwZSAhPSBBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSAmJiBmaWxlU3lzdGVtVHlw
ZSAhPSBBc3luY0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQgJiYgZmlsZVN5c3RlbVR5cGUgIT0gQXN5
bmNGaWxlU3lzdGVtOjpFeHRlcm5hbCkgeworICAgIGlmIChmaWxlU3lzdGVtVHlwZSAhPSBBc3lu
Y0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSAmJiBmaWxlU3lzdGVtVHlwZSAhPSBBc3luY0ZpbGVTeXN0
ZW06OlBlcnNpc3RlbnQpIHsKICAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFj
ayh0aGlzLCBlcnJvckNhbGxiYWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OklOVkFM
SURfTU9ESUZJQ0FUSU9OX0VSUikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDEyLDcg
KzQxMiw3IEBAIFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbVN5bmM+IFdvcmtlckNvbnRleHQ6Ondl
YmtpdFJlcXVlc3RGaWxlU3lzdGVtU3luYyhpbnQgdHlwCiAgICAgfQogCiAgICAgQXN5bmNGaWxl
U3lzdGVtOjpUeXBlIGZpbGVTeXN0ZW1UeXBlID0gc3RhdGljX2Nhc3Q8QXN5bmNGaWxlU3lzdGVt
OjpUeXBlPih0eXBlKTsKLSAgICBpZiAoZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVt
OjpUZW1wb3JhcnkgJiYgZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0
ZW50ICYmIGZpbGVTeXN0ZW1UeXBlICE9IEFzeW5jRmlsZVN5c3RlbTo6RXh0ZXJuYWwpIHsKKyAg
ICBpZiAoZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3JhcnkgJiYgZmls
ZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50KSB7CiAgICAgICAgIGVj
ID0gRmlsZUV4Y2VwdGlvbjo6SU5WQUxJRF9NT0RJRklDQVRJT05fRVJSOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CkBAIC00NzEsNyArNDcxLDYgQEAgUGFzc1JlZlB0cjxFbnRyeVN5bmM+IFdv
cmtlckNvbnRleHQ6OndlYmtpdFJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJMKGNvbnN0IFMK
IAogQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihXb3JrZXJDb250ZXh0OjpURU1QT1JB
UlkpID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3JhcnkpLCBlbnVt
X21pc21hdGNoKTsKIENPTVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGludD4oV29ya2VyQ29udGV4
dDo6UEVSU0lTVEVOVCkgPT0gc3RhdGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0ZW06OlBlcnNp
c3RlbnQpLCBlbnVtX21pc21hdGNoKTsKLUNPTVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGludD4o
V29ya2VyQ29udGV4dDo6RVhURVJOQUwpID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lz
dGVtOjpFeHRlcm5hbCksIGVudW1fbWlzbWF0Y2gpOwogI2VuZGlmCiAKIFdvcmtlckNvbnRleHQ6
Ok9ic2VydmVyOjpPYnNlcnZlcihXb3JrZXJDb250ZXh0KiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRmlsZVN5c3RlbS5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRmlsZVN5c3RlbS5oCmlu
ZGV4IDU4M2VmZTA3YzI0OGI2NzUwMjI5OTE4ODk3MTIxNThlYjBiMmI5M2MuLmMzYjEyNDdhZGM1
OTRmY2VmZjNmOGZjMDMxZDkyNGQ3NzkzZGY0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGaWxlU3lzdGVtLmgKQEAgLTQ2LDYgKzQ2
LDggQEAgcHVibGljOgogICAgIGVudW0gVHlwZSB7CiAgICAgICAgIFR5cGVUZW1wb3JhcnksCiAg
ICAgICAgIFR5cGVQZXJzaXN0ZW50LAorCisgICAgICAgIC8vIENocm9tZSBzcGVjaWZpYyBmaWxl
c3lzdGVtIHR5cGUgKHVzZWQgYnkgY2hyb21lb3MpLgogICAgICAgICBUeXBlRXh0ZXJuYWwsCiAg
ICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0
Y2hpbmdFbnVtcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGlu
Z0VudW1zLmNwcAppbmRleCA1YTNhZjQzMDFjNThmMGVhMmM5MjU0ZTZmMTM0YWIzYzYyMTdiYjZj
Li40NWE0ZWE0NmU0NGUyMWU0Y2JhN2MxZDBjNDIwYTM5MDJiNDEyYmE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcApAQCAtNDI5
LDcgKzQyOSw2IEBAIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSURCS2V5OjpOdW1i
ZXJUeXBlLCBJREJLZXk6Ok51bWJlclR5cGUpOwogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKIENP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRmlsZVN5c3RlbTo6VHlwZVRlbXBvcmFyeSwg
QXN5bmNGaWxlU3lzdGVtOjpUZW1wb3JhcnkpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJGaWxlU3lzdGVtOjpUeXBlUGVyc2lzdGVudCwgQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0
ZW50KTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRmlsZVN5c3RlbTo6VHlwZUV4
dGVybmFsLCBBc3luY0ZpbGVTeXN0ZW06OkV4dGVybmFsKTsKIENPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViRmlsZUluZm86OlR5cGVVbmtub3duLCBGaWxlTWV0YWRhdGE6OlR5cGVVbmtu
b3duKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRmlsZUluZm86OlR5cGVGaWxl
LCBGaWxlTWV0YWRhdGE6OlR5cGVGaWxlKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViRmlsZUluZm86OlR5cGVEaXJlY3RvcnksIEZpbGVNZXRhZGF0YTo6VHlwZURpcmVjdG9yeSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bS5jcHAKaW5kZXggYzU1YzcxYjc5NTI1YzIzYzU5YWNmYzFmZTk2ZjQ3NWQ1ZWU2OWYw
OS4uZjg1ZDAwYjE3MDE3NTU4ODhhMjdmY2IxMDE3YWNiNmY2YWRiOGMwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNw
cApAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
LmgiCiAjaW5jbHVkZSAiQXN5bmNGaWxlV3JpdGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIldlYkZpbGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViRmls
ZVN5c3RlbUNhbGxiYWNrc0ltcGwuaCIKICNpbmNsdWRlICJXZWJGaWxlV3JpdGVyLmgiCkBAIC00
NCwxMSArNDUsNDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3BhY2UgeworCisv
LyBDaHJvbWUtc3BlY2lmaWMgRmlsZVN5c3RlbSB0eXBlLgorY29uc3QgY2hhciBrRXh0ZXJuYWxQ
YXRoUHJlZml4W10gPSAiZXh0ZXJuYWwiOworY29uc3Qgc2l6ZV90IGtFeHRlcm5hbFBhdGhQcmVm
aXhMZW5ndGggPSBzaXplb2Yoa0V4dGVybmFsUGF0aFByZWZpeCkgLSAxOworCit9CisKIGJvb2wg
QXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgQXN5bmNGaWxlU3lzdGVtOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29uc3QgS1VSTCYgdXJs
LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUmIHR5cGUsIFN0cmluZyYgZmlsZVBhdGgpCit7CisgICAg
aWYgKCF1cmwucHJvdG9jb2xJcygiZmlsZXN5c3RlbSIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBLVVJMIG9yaWdpblVSTChQYXJzZWRVUkxTdHJpbmcsIHVybC5wYXRoKCkpOworICAg
IFN0cmluZyBwYXRoID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG9yaWdpblVSTC5wYXRoKCkp
OworICAgIGlmIChwYXRoLmlzRW1wdHkoKSB8fCBwYXRoWzBdICE9ICcvJykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTsKKworICAgIGlmIChwYXRo
LnN0YXJ0c1dpdGgoa1RlbXBvcmFyeVBhdGhQcmVmaXgpKSB7CisgICAgICAgIHR5cGUgPSBUZW1w
b3Jhcnk7CisgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhrVGVtcG9yYXJ5UGF0aFByZWZp
eExlbmd0aCk7CisgICAgfSBlbHNlIGlmIChwYXRoLnN0YXJ0c1dpdGgoa1BlcnNpc3RlbnRQYXRo
UHJlZml4KSkgeworICAgICAgICB0eXBlID0gUGVyc2lzdGVudDsKKyAgICAgICAgcGF0aCA9IHBh
dGguc3Vic3RyaW5nKGtQZXJzaXN0ZW50UGF0aFByZWZpeExlbmd0aCk7CisgICAgfSBlbHNlIGlm
IChwYXRoLnN0YXJ0c1dpdGgoa0V4dGVybmFsUGF0aFByZWZpeCkpIHsKKyAgICAgICAgdHlwZSA9
IHN0YXRpY19jYXN0PEFzeW5jRmlsZVN5c3RlbTo6VHlwZT4oV2ViS2l0OjpXZWJGaWxlU3lzdGVt
OjpUeXBlRXh0ZXJuYWwpOworICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoa0V4dGVybmFs
UGF0aFByZWZpeExlbmd0aCk7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChwYXRoLmlzRW1wdHkoKSB8fCBwYXRoWzBdICE9ICcvJykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZmlsZVBhdGguc3dhcChwYXRoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtKEFzeW5j
RmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiByb290VVJMKQogICAgIDogQXN5bmNG
aWxlU3lzdGVtKHR5cGUpCiAgICAgLCBtX3dlYkZpbGVTeXN0ZW0oV2ViS2l0Ojp3ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQoKS0+ZmlsZVN5c3RlbSgpKQpAQCAtNjEsNiArMTAwLDE3IEBAIEFzeW5jRmls
ZVN5c3RlbUNocm9taXVtOjp+QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oKQogewogfQogCitTdHJp
bmcgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OnRvVVJMKGNvbnN0IFN0cmluZyYgb3JpZ2luU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKQoreworICAgIEFTU0VSVCghbV9maWxlc3lzdGVt
Um9vdFVSTC5pc0VtcHR5KCkpOworICAgIEFTU0VSVChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1f
ZmlsZXN5c3RlbVJvb3RVUkwpLT50b1N0cmluZygpID09IG9yaWdpblN0cmluZyk7CisKKyAgICBL
VVJMIHVybCA9IG1fZmlsZXN5c3RlbVJvb3RVUkw7CisgICAgLy8gUmVtb3ZlIHRoZSBleHRyYSBs
ZWFkaW5nIHNsYXNoLgorICAgIHVybC5zZXRQYXRoKHVybC5wYXRoKCkgKyBlbmNvZGVXaXRoVVJM
RXNjYXBlU2VxdWVuY2VzKGZ1bGxQYXRoLnN1YnN0cmluZygxKSkpOworICAgIHJldHVybiB1cmw7
Cit9CisKIHZvaWQgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06Om1vdmUoY29uc3QgU3RyaW5nJiBz
b3VyY2VQYXRoLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKICAgICBtX3dlYkZpbGVTeXN0ZW0t
Pm1vdmUodmlydHVhbFBhdGhUb0ZpbGVTeXN0ZW1VUkwoc291cmNlUGF0aCksIHZpcnR1YWxQYXRo
VG9GaWxlU3lzdGVtVVJMKGRlc3RpbmF0aW9uUGF0aCksIG5ldyBXZWJLaXQ6OldlYkZpbGVTeXN0
ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKaW5kZXggMGM1NTBiNWUyNWViZmU3
NGFmM2Y2MWI1ZjQ5NWZmNmQ1ODlmYTczNC4uNDhhZjg4NTcxZjY1NmZhNzk3NmI0OTFhNThiNDkz
NWRkYzU4NmFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3lu
Y0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCkBAIC01NCw2ICs1NCw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgfkFzeW5jRmlsZVN5c3RlbUNocm9taXVtKCk7CiAKKyAgICB2aXJ0dWFsIFN0cmluZyB0
b1VSTChjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgY29uc3QgU3RyaW5nJiBmdWxsUGF0aCk7
CiAgICAgdmlydHVhbCB2b2lkIG1vdmUoY29uc3QgU3RyaW5nJiBzb3VyY2VQYXRoLCBjb25zdCBT
dHJpbmcmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFj
a3M+KTsKICAgICB2aXJ0dWFsIHZvaWQgY29weShjb25zdCBTdHJpbmcmIHNvdXJjZVBhdGgsIGNv
bnN0IFN0cmluZyYgZGVzdGluYXRpb25QYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNh
bGxiYWNrcz4pOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBwYXRoLCBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123526</attachid>
            <date>2012-01-23 00:35:07 -0800</date>
            <delta_ts>2012-01-24 17:25:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76551-20120123173504.patch</filename>
            <type>text/plain</type>
            <size>29052</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk5MDRlYzI4YTFlMTY0
MGRhMjJkZmUzNTViMTI0MWJmNTljMjFkNy4uMmE1NDRhMjBjNDA2OWEyZDQ2ODQyNDQyOWM1ZGE1
ODkxMzg4NWUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTAxLTIzICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBDbGVhbnVwOiBNb3Zl
IGNocm9tZS1zcGVjaWZpYyBmaWxlc3lzdGVtIHR5cGUgaGFuZGxpbmcgY29kZSAoZm9yIEZpbGVT
eXN0ZW0gQVBJKSB1bmRlciBjaHJvbWl1bSBkaXJlY3RvcnkgKHJlLWxhbmRpbmcgcjEwNTM5NSkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTUxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgdGhl
IGltcGxlbWVudGF0aW9uIG9mIGNyYWNrRmlsZVN5c3RlbVVSTCgpIGFuZCB0b1VSTCgpIGZyb20K
KyAgICAgICAgV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlIGludG8gV2ViQ29yZS9w
bGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0KKyAgICAgICAgc28gdGhhdCBlYWNoIHBsYXRmb3JtIGNh
biBleHRlbmQvaW1wbGVtZW50IHRoZWlyIGJlaGF2aW9yIGlmIG5lY2Vzc2FyeS4KKworICAgICAg
ICBUaGlzIGlzIGEgcmVjYXAgb2YgcjEwNTM5NSB0aGF0IGhhcyBicm9rZW4gdGhlIGNocm9tZW9z
IGJ1aWxkLgorICAgICAgICBUaGUgY2hhbmdlcyBmcm9tIHRoZSBwcmV2aW91cyBwYXRjaCBhcmU6
CisgICAgICAgIC0gVGhpcyB2ZXJzaW9uIGRvZXMgbm90IGVzY2FwZSB0aGUgVVJMIHJldHVybmVk
IGJ5IHRvVVJMKCkgKGFzIGV2ZXIpLgorICAgICAgICAtIEkgcmVtb3ZlZCBhbiBhc3NlcnRpb24g
Y29kZSB3aGljaCBjaGVja3MgaWYgdGhlIGZpbGVzeXN0ZW0ncworICAgICAgICAgIHNlY3VyaXR5
T3JpZ2luIGlzIGVxdWFsIHRvIHRoYXQgb2YgdGhlIHJvb3QgVVJMIHJldHVybmVkIGJ5CisgICAg
ICAgICAgcmVxdWVzdEZpbGVTeXN0ZW0sIHdoaWNoIGRvZXMgbm90IHNlZW0gdG8gaG9sZCBpbiBj
aHJvbWVvcy4KKworICAgICAgICBUZXN0czogZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50cnktdG8t
dXJpLmh0bWwKKworICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwOiBNb3Zl
ZCBjcmFja0ZpbGVTeXN0ZW1VUkwoKSB0byBBc3luY0ZpbGVTeXN0ZW0uCisgICAgICAgICogZmls
ZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oOgorICAgICAgICAqIGZpbGVhcGkvRW50cnlCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVudHJ5QmFzZTo6dG9VUkwpOiBNb3ZlZCB0b1VSTCgpIHRv
IEFzeW5jRmlsZVN5c3RlbS4KKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6IE1hZGUgY29y
cmVzcG9uZGluZyBjYWxsc2l0ZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93
Ojp3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6
OndlYmtpdFJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwpOgorICAgICAgICAqIHBsYXRmb3JtL0Fz
eW5jRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW06Omlz
VmFsaWRUeXBlKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmg6
CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDogTWFkZSBjb3JyZXNwb25kaW5n
IGNhbGxzaXRlIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojp3ZWJr
aXRSZXF1ZXN0RmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojp3
ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29u
dGV4dDo6d2Via2l0UmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJDb250ZXh0Ojp3ZWJraXRSZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCk6CisK
IDIwMTItMDEtMjEgIFBhYmxvIEZsb3VyZXQgIDxwYWJsb2ZAbW90b3JvbGEuY29tPgogCiAgICAg
ICAgIEFkZCAudXJsIGF0dHJpYnV0ZSBhbG9uZ3NpZGUgLlVSTCBpbiBFdmVudFNvdXJjZSBhbmQg
V2ViU29ja2V0IHRvIGNvbXBseSB3aXRoIHRoZSBzcGVjcyBidXQgbm90IGJyZWFrIGV4aXN0aW5n
IHVzYWdlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyNWMyNThlNTI1MzBiM2RiMTRm
ZWNlNzk2YjgzMDMxOGUwZjQ4MGI2Li5hMDJiNmY5YmRhZmYzMTdhYTUwYTkwNmUzNmQ1NzcxMDk4
NmZmMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEy
LTAxLTIzICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBD
bGVhbnVwOiBNb3ZlIGNocm9tZS1zcGVjaWZpYyBmaWxlc3lzdGVtIHR5cGUgaGFuZGxpbmcgY29k
ZSAoZm9yIEZpbGVTeXN0ZW0gQVBJKSB1bmRlciBjaHJvbWl1bSBkaXJlY3RvcnkgKHJlLWxhbmRp
bmcgcjEwNTM5NSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHA6IFJlbW92ZWQgdGhlIG1hdGNoaW5nIGFz
c2VydGlvbiBmb3IgQXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5hbCAoYXMgbm93IHdlIGRpcmVjdGx5
IHVzZSBXZWJGaWxlU3lzdGVtOjpUeXBlRXh0ZXJuYWwpLgorICAgICAgICAqIHNyYy9Bc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW06
OmNyYWNrRmlsZVN5c3RlbVVSTCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxl
U3lzdGVtOjppc1ZhbGlkVHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW06OnRvVVJMKTogQWRkZWQuCisgICAgICAgICogc3JjL0FzeW5jRmlsZVN5
c3RlbUNocm9taXVtLmg6CisgICAgICAgICogc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtLmNwcDogTWFkZSBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSBhIHN1YmNsYXNzIG9m
IEFzeW5jRmlsZVN5c3RlbUNocm9taXVtIChpbnN0ZWFkIG9mIEFzeW5jRmlsZVN5c3RlbSkgdG8g
c2hhcmUgdGhlIHRvVVJMIGltcGxlbWVudGF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKToK
KyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaDoKKworCiAyMDEy
LTAxLTIxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTA1NTY0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcAppbmRleCBlYzhlZjcyNWE2MTAzMDQ5YTZkNDRk
OGFmY2NjMzlkOTVhYWQzYTM1Li4yMTM1ZjJiYmM0MjBlNTliZjdjYjQ4YzkxOTQ5ZGE0MDEwODMw
OGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcApA
QCAtNTAsNDMgKzUwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBjaGFyIERP
TUZpbGVTeXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhQcmVmaXhbXSA9ICJwZXJzaXN0ZW50IjsK
LWNvbnN0IHNpemVfdCBET01GaWxlU3lzdGVtQmFzZTo6a1BlcnNpc3RlbnRQYXRoUHJlZml4TGVu
Z3RoID0gc2l6ZW9mKERPTUZpbGVTeXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhQcmVmaXgpIC0g
MTsKLWNvbnN0IGNoYXIgRE9NRmlsZVN5c3RlbUJhc2U6OmtUZW1wb3JhcnlQYXRoUHJlZml4W10g
PSAidGVtcG9yYXJ5IjsKLWNvbnN0IHNpemVfdCBET01GaWxlU3lzdGVtQmFzZTo6a1RlbXBvcmFy
eVBhdGhQcmVmaXhMZW5ndGggPSBzaXplb2YoRE9NRmlsZVN5c3RlbUJhc2U6OmtUZW1wb3JhcnlQ
YXRoUHJlZml4KSAtIDE7Ci1jb25zdCBjaGFyIERPTUZpbGVTeXN0ZW1CYXNlOjprRXh0ZXJuYWxQ
YXRoUHJlZml4W10gPSAiZXh0ZXJuYWwiOwotY29uc3Qgc2l6ZV90IERPTUZpbGVTeXN0ZW1CYXNl
OjprRXh0ZXJuYWxQYXRoUHJlZml4TGVuZ3RoID0gc2l6ZW9mKERPTUZpbGVTeXN0ZW1CYXNlOjpr
RXh0ZXJuYWxQYXRoUHJlZml4KSAtIDE7Ci0KLWJvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNr
RmlsZVN5c3RlbVVSTChjb25zdCBLVVJMJiB1cmwsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSYgdHlw
ZSwgU3RyaW5nJiBmaWxlUGF0aCkKLXsKLSAgICBpZiAoIXVybC5wcm90b2NvbElzKCJmaWxlc3lz
dGVtIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEtVUkwgb3JpZ2luVVJMKFBhcnNl
ZFVSTFN0cmluZywgdXJsLnBhdGgoKSk7Ci0gICAgU3RyaW5nIHBhdGggPSBkZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXMob3JpZ2luVVJMLnBhdGgoKSk7Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpIHx8
IHBhdGhbMF0gIT0gJy8nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcGF0aCA9IHBhdGgu
c3Vic3RyaW5nKDEpOwotCi0gICAgaWYgKHBhdGguc3RhcnRzV2l0aChrVGVtcG9yYXJ5UGF0aFBy
ZWZpeCkpIHsKLSAgICAgICAgdHlwZSA9IEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5OwotICAg
ICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoa1RlbXBvcmFyeVBhdGhQcmVmaXhMZW5ndGgpOwot
ICAgIH0gZWxzZSBpZiAocGF0aC5zdGFydHNXaXRoKGtQZXJzaXN0ZW50UGF0aFByZWZpeCkpIHsK
LSAgICAgICAgdHlwZSA9IEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudDsKLSAgICAgICAgcGF0
aCA9IHBhdGguc3Vic3RyaW5nKGtQZXJzaXN0ZW50UGF0aFByZWZpeExlbmd0aCk7Ci0gICAgfSBl
bHNlIGlmIChwYXRoLnN0YXJ0c1dpdGgoa0V4dGVybmFsUGF0aFByZWZpeCkpIHsKLSAgICAgICAg
dHlwZSA9IEFzeW5jRmlsZVN5c3RlbTo6RXh0ZXJuYWw7Ci0gICAgICAgIHBhdGggPSBwYXRoLnN1
YnN0cmluZyhrRXh0ZXJuYWxQYXRoUHJlZml4TGVuZ3RoKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHBhdGguaXNFbXB0eSgpIHx8IHBhdGhbMF0gIT0gJy8n
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmaWxlUGF0aC5zd2FwKHBhdGgpOwotICAg
IHJldHVybiB0cnVlOwotfQotCiBET01GaWxlU3lzdGVtQmFzZTo6RE9NRmlsZVN5c3RlbUJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
T3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVtKQogICAgIDogbV9jb250ZXh0
KGNvbnRleHQpCiAgICAgLCBtX25hbWUobmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbUJhc2UuaAppbmRleCA4YmMwYjY1Nzk3N2VhYjBmMTkwOGRlN2EwZGFkOTk2ZTg1
MDEyNTY1Li4xOGFlOGQ3NmI3ZjllZmY0YWFjNTU2NzkxOGY0MzZkZTM0ZmVhMmI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oCkBAIC02MiwxNCArNjIsNiBA
QCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfkRPTUZpbGVTeXN0ZW1CYXNlKCk7CiAKLSAg
ICBzdGF0aWMgY29uc3QgY2hhciBrUGVyc2lzdGVudFBhdGhQcmVmaXhbXTsKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGtQZXJzaXN0ZW50UGF0aFByZWZpeExlbmd0aDsKLSAgICBzdGF0aWMgY29u
c3QgY2hhciBrVGVtcG9yYXJ5UGF0aFByZWZpeFtdOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
a1RlbXBvcmFyeVBhdGhQcmVmaXhMZW5ndGg7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIga0V4dGVy
bmFsUGF0aFByZWZpeFtdOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga0V4dGVybmFsUGF0aFBy
ZWZpeExlbmd0aDsKLSAgICBzdGF0aWMgYm9vbCBjcmFja0ZpbGVTeXN0ZW1VUkwoY29uc3QgS1VS
TCYsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSYsIFN0cmluZyYgZmlsZVBhdGgpOwotCiAgICAgY29u
c3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgQXN5bmNGaWxl
U3lzdGVtKiBhc3luY0ZpbGVTeXN0ZW0oKSBjb25zdCB7IHJldHVybiBtX2FzeW5jRmlsZVN5c3Rl
bS5nZXQoKTsgfQogICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeUJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9FbnRyeUJhc2UuY3BwCmluZGV4IDM5NDUzZjYxYzYxYzBjODViZjJk
Y2UyZmVhYWZmZDg2ZTRmYTMzOGEuLjBiMTI1NGI3YWRkYWQ5OTg5Yjk0OWE4OGIzZDllODU3OGE2
ZDQ3MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnlCYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5QmFzZS5jcHAKQEAgLTU2LDI3ICs1Niw3
IEBAIEVudHJ5QmFzZTo6fkVudHJ5QmFzZSgpCiAKIFN0cmluZyBFbnRyeUJhc2U6OnRvVVJMKCkK
IHsKLSAgICBTdHJpbmcgb3JpZ2luU3RyaW5nID0gbV9maWxlU3lzdGVtLT5zZWN1cml0eU9yaWdp
bigpLT50b1N0cmluZygpOwotICAgIEFTU0VSVCghb3JpZ2luU3RyaW5nLmlzRW1wdHkoKSk7Ci0g
ICAgaWYgKG9yaWdpblN0cmluZyA9PSAibnVsbCIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKCJmaWxlc3lzdGVt
OiIpOwotICAgIHJlc3VsdC5hcHBlbmQob3JpZ2luU3RyaW5nKTsKLSAgICByZXN1bHQuYXBwZW5k
KCIvIik7Ci0gICAgc3dpdGNoIChtX2ZpbGVTeXN0ZW0tPmFzeW5jRmlsZVN5c3RlbSgpLT50eXBl
KCkpIHsKLSAgICBjYXNlIEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5OgotICAgICAgICByZXN1
bHQuYXBwZW5kKERPTUZpbGVTeXN0ZW1CYXNlOjprVGVtcG9yYXJ5UGF0aFByZWZpeCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50OgotICAgICAg
ICByZXN1bHQuYXBwZW5kKERPTUZpbGVTeXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhQcmVmaXgp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFzeW5jRmlsZVN5c3RlbTo6RXh0ZXJuYWw6Ci0g
ICAgICAgIHJlc3VsdC5hcHBlbmQoRE9NRmlsZVN5c3RlbUJhc2U6OmtFeHRlcm5hbFBhdGhQcmVm
aXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmVzdWx0LmFwcGVuZChtX2Z1bGxQYXRo
KTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZmlsZVN5c3Rl
bS0+YXN5bmNGaWxlU3lzdGVtKCktPnRvVVJMKG1fZmlsZVN5c3RlbS0+c2VjdXJpdHlPcmlnaW4o
KS0+dG9TdHJpbmcoKSwgbV9mdWxsUGF0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCAxMmEwOTljMWYyZDEwMTY0NjY5NGQwNDBl
MmRmZjE2MGNlOWRhZWZkLi4zNmYwOGU4MjcwZDljNzYzZTBjZmUzZjZmZWVhZjg4NmE3NDAzZTYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC03NzIsNyArNzcyLDcgQEAgdm9pZCBE
T01XaW5kb3c6OndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtKGludCB0eXBlLCBsb25nIGxvbmcgc2l6
ZSwgUGFzc1JlZlB0cjxGaWwKICAgICB9CiAKICAgICBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgZmls
ZVN5c3RlbVR5cGUgPSBzdGF0aWNfY2FzdDxBc3luY0ZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpOwot
ICAgIGlmIChmaWxlU3lzdGVtVHlwZSAhPSBBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSAmJiBm
aWxlU3lzdGVtVHlwZSAhPSBBc3luY0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQgJiYgZmlsZVN5c3Rl
bVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5hbCkgeworICAgIGlmICghQXN5bmNGaWxl
U3lzdGVtOjppc1ZhbGlkVHlwZShmaWxlU3lzdGVtVHlwZSkpIHsKICAgICAgICAgRE9NRmlsZVN5
c3RlbTo6c2NoZWR1bGVDYWxsYmFjayhkb2N1bWVudCwgZXJyb3JDYWxsYmFjaywgRmlsZUVycm9y
OjpjcmVhdGUoRmlsZUVycm9yOjpJTlZBTElEX01PRElGSUNBVElPTl9FUlIpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTc5OCw3ICs3OTgsNyBAQCB2b2lkIERPTVdpbmRvdzo6d2Via2l0
UmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxF
bgogCiAgICAgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGU7CiAgICAgU3RyaW5nIGZpbGVQYXRo
OwotICAgIGlmICghY29tcGxldGVkVVJMLmlzVmFsaWQoKSB8fCAhRE9NRmlsZVN5c3RlbUJhc2U6
OmNyYWNrRmlsZVN5c3RlbVVSTChjb21wbGV0ZWRVUkwsIHR5cGUsIGZpbGVQYXRoKSkgeworICAg
IGlmICghY29tcGxldGVkVVJMLmlzVmFsaWQoKSB8fCAhQXN5bmNGaWxlU3lzdGVtOjpjcmFja0Zp
bGVTeXN0ZW1VUkwoY29tcGxldGVkVVJMLCB0eXBlLCBmaWxlUGF0aCkpIHsKICAgICAgICAgRE9N
RmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayhkb2N1bWVudCwgZXJyb3JDYWxsYmFjaywgRmls
ZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpFTkNPRElOR19FUlIpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTgwNiw4ICs4MDYsNiBAQCB2b2lkIERPTVdpbmRvdzo6d2Via2l0UmVzb2x2
ZUxvY2FsRmlsZVN5c3RlbVVSTChjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxFbgogICAg
IExvY2FsRmlsZVN5c3RlbTo6bG9jYWxGaWxlU3lzdGVtKCkucmVhZEZpbGVTeXN0ZW0oZG9jdW1l
bnQsIHR5cGUsIFJlc29sdmVVUklDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVy
cm9yQ2FsbGJhY2ssIGRvY3VtZW50LCBmaWxlUGF0aCkpOwogfQogCi1DT01QSUxFX0FTU0VSVChz
dGF0aWNfY2FzdDxpbnQ+KERPTVdpbmRvdzo6RVhURVJOQUwpID09IHN0YXRpY19jYXN0PGludD4o
QXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5hbCksIGVudW1fbWlzbWF0Y2gpOwotCiBDT01QSUxFX0FT
U0VSVChzdGF0aWNfY2FzdDxpbnQ+KERPTVdpbmRvdzo6VEVNUE9SQVJZKSA9PSBzdGF0aWNfY2Fz
dDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5KSwgZW51bV9taXNtYXRjaCk7CiBDT01Q
SUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KERPTVdpbmRvdzo6UEVSU0lTVEVOVCkgPT0gc3Rh
dGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQpLCBlbnVtX21pc21hdGNo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKaW5kZXggYjU4NjY4ZTRkMDFiNDkxZjJlNjNiNDMy
YmI2MzViMDQ5MTg4OTg1Yy4uOTZhNThlNTgzYzA3M2Y0MjA0Zjk2YjA2NmVmMWE3ZTViNDMwYjc4
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCkBAIC0zNjYsNyArMzY2LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBlbnVtIEZpbGVTeXN0ZW1UeXBlIHsKICAgICAgICAgICAgIFRF
TVBPUkFSWSwKICAgICAgICAgICAgIFBFUlNJU1RFTlQsCi0gICAgICAgICAgICBFWFRFUk5BTCwK
ICAgICAgICAgfTsKICAgICAgICAgdm9pZCB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShpbnQgdHlw
ZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQdHI8RmlsZVN5c3RlbUNhbGxiYWNrPiwgUGFzc1Jl
ZlB0cjxFcnJvckNhbGxiYWNrPik7CiAgICAgICAgIHZvaWQgd2Via2l0UmVzb2x2ZUxvY2FsRmls
ZVN5c3RlbVVSTChjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNz
UmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0Zp
bGVTeXN0ZW0uY3BwCmluZGV4IDQwNGFhYjY3Mzc2ZGUzYjVlYjlkMzY3MmZkMDUyYzBlNjgwODU5
YzkuLjZkYmI2NzZkODQwMzY3NDQ4ZjcxMjM2ODA4MDRlOTUyZGIzMDQ1OWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApAQCAtMzksNiArMzksMTEgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjb25zdCBjaGFyIEFzeW5jRmlsZVN5c3RlbTo6cGVy
c2lzdGVudFBhdGhQcmVmaXhbXSA9ICJwZXJzaXN0ZW50IjsKK2NvbnN0IHNpemVfdCBBc3luY0Zp
bGVTeXN0ZW06OnBlcnNpc3RlbnRQYXRoUHJlZml4TGVuZ3RoID0gc2l6ZW9mKEFzeW5jRmlsZVN5
c3RlbTo6cGVyc2lzdGVudFBhdGhQcmVmaXgpIC0gMTsKK2NvbnN0IGNoYXIgQXN5bmNGaWxlU3lz
dGVtOjp0ZW1wb3JhcnlQYXRoUHJlZml4W10gPSAidGVtcG9yYXJ5IjsKK2NvbnN0IHNpemVfdCBB
c3luY0ZpbGVTeXN0ZW06OnRlbXBvcmFyeVBhdGhQcmVmaXhMZW5ndGggPSBzaXplb2YoQXN5bmNG
aWxlU3lzdGVtOjp0ZW1wb3JhcnlQYXRoUHJlZml4KSAtIDE7CisKICNpZiAhUExBVEZPUk0oQ0hS
T01JVU0pCiBib29sIEFzeW5jRmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKQogewpAQCAtNDYsNiAr
NTEsMTIgQEAgYm9vbCBBc3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKKy8vIHN0YXRpYworYm9vbCBBc3luY0ZpbGVTeXN0ZW06OmlzVmFsaWRUeXBl
KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBBc3luY0ZpbGVTeXN0ZW06OlRlbXBv
cmFyeSB8fCB0eXBlID09IEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudDsKK30KKwogUGFzc093
blB0cjxBc3luY0ZpbGVTeXN0ZW0+IEFzeW5jRmlsZVN5c3RlbTo6Y3JlYXRlKFR5cGUsIGNvbnN0
IFN0cmluZyYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQXN5bmNGaWxlU3lzdGVtLmgKaW5kZXggYzJjNjg0NTRmNGNjYjIxOTU2Njk4ZTY5MzUzZjRl
ZTcxMGIzYjFmMC4uMjgzZjU5NzZhNDBiOWVlN2VhN2MxNjNhNWQ1NGE5YzY3MTY0YTE5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmgKQEAgLTU0LDcgKzU0LDYg
QEAgcHVibGljOgogICAgIGVudW0gVHlwZSB7CiAgICAgICAgIFRlbXBvcmFyeSwKICAgICAgICAg
UGVyc2lzdGVudCwKLSAgICAgICAgRXh0ZXJuYWwsCiAgICAgfTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKCkgeyB9CkBAIC02Miw2ICs2MSwxMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9v
bCBpc0F2YWlsYWJsZSgpOwogCisgICAgLy8gUGF0aCBwcmVmaXhlcyB0aGF0IGFyZSB1c2VkIGlu
IHRoZSBmaWxlc3lzdGVtIFVSTHMgKHRoYXQgY2FuIGJlIG9idGFpbmVkIGJ5IHRvVVJMKCkpLgor
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2ZpbGUtc3lzdGVtLWFwaS8jd2lkbC1FbnRyeS10
b1VSTAorICAgIHN0YXRpYyBjb25zdCBjaGFyIHBlcnNpc3RlbnRQYXRoUHJlZml4W107CisgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBwZXJzaXN0ZW50UGF0aFByZWZpeExlbmd0aDsKKyAgICBzdGF0
aWMgY29uc3QgY2hhciB0ZW1wb3JhcnlQYXRoUHJlZml4W107CisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCB0ZW1wb3JhcnlQYXRoUHJlZml4TGVuZ3RoOworCiAgICAgLy8gU3ViY2xhc3MgbXVzdCBp
bXBsZW1lbnQgdGhpcyBpZiBpdCBzdXBwb3J0cyBzeW5jaHJvbm91cyBvcGVyYXRpb25zLgogICAg
IC8vIFRoaXMgc2hvdWxkIHJldHVybiBmYWxzZSBpZiB0aGVyZSBhcmUgbm8gcGVuZGluZyBvcGVy
YXRpb25zLgogICAgIHZpcnR1YWwgYm9vbCB3YWl0Rm9yT3BlcmF0aW9uVG9Db21wbGV0ZSgpIHsg
cmV0dXJuIGZhbHNlOyB9CkBAIC02OSw2ICs3NSwxNSBAQCBwdWJsaWM6CiAgICAgLy8gQ3JlYXRl
cyBhbmQgcmV0dXJucyBhIG5ldyBwbGF0Zm9ybS1zcGVjaWZpYyBBc3luY0ZpbGVTeXN0ZW0gaW5z
dGFuY2UgaWYgdGhlIHBsYXRmb3JtIGhhcyBpdHMgb3duIGltcGxlbWVudGF0aW9uLgogICAgIHN0
YXRpYyBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKFR5cGUpOwogCisgICAgLy8g
UmV0dXJucyBpZiB0aGUgZ2l2ZW4gZmlsZXN5c3RlbSB0eXBlIGlzIHZhbGlkLgorICAgIHN0YXRp
YyBib29sIGlzVmFsaWRUeXBlKFR5cGUpOworCisgICAgLy8gQ3JhY2tzIHRoZSBnaXZlbiBmaWxl
c3lzdGVtIFVSTCAod2hpY2ggY2FuIGJlIG9idGFpbmVkIGJ5IHRvVVJMKCkpIGFuZCBwb3B1bGF0
ZXMgdHlwZSBhbmQgZmlsZVBhdGggcGFyYW1ldGVycy4KKyAgICBzdGF0aWMgYm9vbCBjcmFja0Zp
bGVTeXN0ZW1VUkwoY29uc3QgS1VSTCYsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSYsIFN0cmluZyYg
ZmlsZVBhdGgpOworCisgICAgLy8gUmV0dXJucyB0aGUgZmlsZXN5c3RlbSBVUkwgZm9yIHRoZSBn
aXZlbiBvcmlnaW5TdHJpbmcgYW5kIGZ1bGxQYXRoLgorICAgIHZpcnR1YWwgU3RyaW5nIHRvVVJM
KGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKSA9IDA7
CisKICAgICAvLyBPcGVucyBhIG5ldyBmaWxlIHN5c3RlbS4gVGhlIGNyZWF0ZSBwYXJhbWV0ZXIg
c3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSB0aGUgcGF0aCBpZiBpdCBkb2VzIG5v
dCBhbHJlYWR5IGV4aXN0cy4KICAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbShjb25zdCBT
dHJpbmcmIGJhc2VQYXRoLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VJZGVudGlmaWVyLCBUeXBlLCBi
b29sIGNyZWF0ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKaW5kZXggNGFlYzY5ZDE4Y2I4ZTZj
NTc0YWZlNWM4Nzk1Yzg3ZWI2YTI0OGM4OC4uMGQ2OGM0ZDY1OGVjYjM5MTU1MTg4MDQzMjQ0ODA1
NjFhNWNiNjc4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCkBA
IC0zODYsNyArMzg2LDcgQEAgdm9pZCBXb3JrZXJDb250ZXh0Ojp3ZWJraXRSZXF1ZXN0RmlsZVN5
c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQdHIKICAgICB9CiAKICAgICBB
c3luY0ZpbGVTeXN0ZW06OlR5cGUgZmlsZVN5c3RlbVR5cGUgPSBzdGF0aWNfY2FzdDxBc3luY0Zp
bGVTeXN0ZW06OlR5cGU+KHR5cGUpOwotICAgIGlmIChmaWxlU3lzdGVtVHlwZSAhPSBBc3luY0Zp
bGVTeXN0ZW06OlRlbXBvcmFyeSAmJiBmaWxlU3lzdGVtVHlwZSAhPSBBc3luY0ZpbGVTeXN0ZW06
OlBlcnNpc3RlbnQgJiYgZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5h
bCkgeworICAgIGlmICghQXN5bmNGaWxlU3lzdGVtOjppc1ZhbGlkVHlwZShmaWxlU3lzdGVtVHlw
ZSkpIHsKICAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayh0aGlzLCBlcnJv
ckNhbGxiYWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OklOVkFMSURfTU9ESUZJQ0FU
SU9OX0VSUikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDAzLDcgKzQwMyw3IEBAIFBh
c3NSZWZQdHI8RE9NRmlsZVN5c3RlbVN5bmM+IFdvcmtlckNvbnRleHQ6OndlYmtpdFJlcXVlc3RG
aWxlU3lzdGVtU3luYyhpbnQgdHlwCiAgICAgfQogCiAgICAgQXN5bmNGaWxlU3lzdGVtOjpUeXBl
IGZpbGVTeXN0ZW1UeXBlID0gc3RhdGljX2Nhc3Q8QXN5bmNGaWxlU3lzdGVtOjpUeXBlPih0eXBl
KTsKLSAgICBpZiAoZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3Jhcnkg
JiYgZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50ICYmIGZpbGVT
eXN0ZW1UeXBlICE9IEFzeW5jRmlsZVN5c3RlbTo6RXh0ZXJuYWwpIHsKKyAgICBpZiAoIUFzeW5j
RmlsZVN5c3RlbTo6aXNWYWxpZFR5cGUoZmlsZVN5c3RlbVR5cGUpKSB7CiAgICAgICAgIGVjID0g
RmlsZUV4Y2VwdGlvbjo6SU5WQUxJRF9NT0RJRklDQVRJT05fRVJSOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBXb3JrZXJDb250ZXh0Ojp3ZWJraXRS
ZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBQYXNzUmVmUHQKIAog
ICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlOwogICAgIFN0cmluZyBmaWxlUGF0aDsKLSAg
ICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZpbGVTeXN0ZW1CYXNlOjpjcmFj
a0ZpbGVTeXN0ZW1VUkwoY29tcGxldGVkVVJMLCB0eXBlLCBmaWxlUGF0aCkpIHsKKyAgICBpZiAo
IWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIUFzeW5jRmlsZVN5c3RlbTo6Y3JhY2tGaWxlU3lz
dGVtVVJMKGNvbXBsZXRlZFVSTCwgdHlwZSwgZmlsZVBhdGgpKSB7CiAgICAgICAgIERPTUZpbGVT
eXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2sodGhpcywgZXJyb3JDYWxsYmFjaywgRmlsZUVycm9yOjpj
cmVhdGUoRmlsZUVycm9yOjpFTkNPRElOR19FUlIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTQ0Miw3ICs0NDIsNyBAQCBQYXNzUmVmUHRyPEVudHJ5U3luYz4gV29ya2VyQ29udGV4dDo6
d2Via2l0UmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkwoY29uc3QgUwogCiAgICAgQXN5bmNG
aWxlU3lzdGVtOjpUeXBlIHR5cGU7CiAgICAgU3RyaW5nIGZpbGVQYXRoOwotICAgIGlmICghY29t
cGxldGVkVVJMLmlzVmFsaWQoKSB8fCAhRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3Rl
bVVSTChjb21wbGV0ZWRVUkwsIHR5cGUsIGZpbGVQYXRoKSkgeworICAgIGlmICghY29tcGxldGVk
VVJMLmlzVmFsaWQoKSB8fCAhQXN5bmNGaWxlU3lzdGVtOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29t
cGxldGVkVVJMLCB0eXBlLCBmaWxlUGF0aCkpIHsKICAgICAgICAgZWMgPSBGaWxlRXhjZXB0aW9u
OjpFTkNPRElOR19FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTQ2Miw3ICs0NjIs
NiBAQCBQYXNzUmVmUHRyPEVudHJ5U3luYz4gV29ya2VyQ29udGV4dDo6d2Via2l0UmVzb2x2ZUxv
Y2FsRmlsZVN5c3RlbVN5bmNVUkwoY29uc3QgUwogCiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2Fz
dDxpbnQ+KFdvcmtlckNvbnRleHQ6OlRFTVBPUkFSWSkgPT0gc3RhdGljX2Nhc3Q8aW50PihBc3lu
Y0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSksIGVudW1fbWlzbWF0Y2gpOwogQ09NUElMRV9BU1NFUlQo
c3RhdGljX2Nhc3Q8aW50PihXb3JrZXJDb250ZXh0OjpQRVJTSVNURU5UKSA9PSBzdGF0aWNfY2Fz
dDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudCksIGVudW1fbWlzbWF0Y2gpOwotQ09N
UElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihXb3JrZXJDb250ZXh0OjpFWFRFUk5BTCkgPT0g
c3RhdGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0ZW06OkV4dGVybmFsKSwgZW51bV9taXNtYXRj
aCk7CiAjZW5kaWYKIAogV29ya2VyQ29udGV4dDo6T2JzZXJ2ZXI6Ok9ic2VydmVyKFdvcmtlckNv
bnRleHQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9wbGF0Zm9ybS9XZWJGaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9wbGF0Zm9ybS9XZWJGaWxlU3lzdGVtLmgKaW5kZXggNTgzZWZlMDdjMjQ4YjY3NTAyMjk5MTg4
OTcxMjE1OGViMGIyYjkzYy4uMTlhZDM3MDY0MGI1ZmViMjFlNGViZTc2ZmVhYzU0MmFkY2Y3Yjc3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2Vi
RmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYkZpbGVTeXN0ZW0uaApAQCAtNDYsNiArNDYsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBUeXBl
IHsKICAgICAgICAgVHlwZVRlbXBvcmFyeSwKICAgICAgICAgVHlwZVBlcnNpc3RlbnQsCisKKyAg
ICAgICAgLy8gVXNlZCBieSBDaHJvbWVPUy4KICAgICAgICAgVHlwZUV4dGVybmFsLAogICAgIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5n
RW51bXMuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVt
cy5jcHAKaW5kZXggMWY5MWQ1MTFmZGFkNTlkYTQzNWNhMzY4YTIwM2U3ODdkYmIxMWNjNi4uYTQ1
MWI4OGE2NTY3MGI0NzE0MmMzZGI5ZWFhMDYwMDE5Mjg0ODE1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKQEAgLTQzMyw3ICs0
MzMsNiBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYklEQktleTo6TnVtYmVyVHlw
ZSwgSURCS2V5OjpOdW1iZXJUeXBlKTsKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiBDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZpbGVTeXN0ZW06OlR5cGVUZW1wb3JhcnksIEFzeW5j
RmlsZVN5c3RlbTo6VGVtcG9yYXJ5KTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2Vi
RmlsZVN5c3RlbTo6VHlwZVBlcnNpc3RlbnQsIEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudCk7
Ci1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZpbGVTeXN0ZW06OlR5cGVFeHRlcm5h
bCwgQXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5hbCk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdlYkZpbGVJbmZvOjpUeXBlVW5rbm93biwgRmlsZU1ldGFkYXRhOjpUeXBlVW5rbm93bik7
CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZpbGVJbmZvOjpUeXBlRmlsZSwgRmls
ZU1ldGFkYXRhOjpUeXBlRmlsZSk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZp
bGVJbmZvOjpUeXBlRGlyZWN0b3J5LCBGaWxlTWV0YWRhdGE6OlR5cGVEaXJlY3RvcnkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0uY3BwCmluZGV4IGM1NWM3MWI3OTUyNWMyM2M1OWFjZmMxZmU5NmY0NzVkNWVlNjlmMDkuLmZj
NzUwZmNhYWQ4ZTNlYjM5MTc3NjRjMWE4MGUxZmExMmY2MTlmOGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAg
LTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgog
I2luY2x1ZGUgIkFzeW5jRmlsZVdyaXRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKICNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgogI2luY2x1ZGUgIldlYkZpbGVTeXN0
ZW1DYWxsYmFja3NJbXBsLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVdyaXRlci5oIgpAQCAtNDEsMTQg
KzQyLDYyIEBACiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUg
InBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKworLy8gQ2hyb21lT1Mtc3BlY2lmaWMgZmlsZXN5
c3RlbSB0eXBlLgorY29uc3QgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIGV4dGVybmFsVHlwZSA9IHN0
YXRpY19jYXN0PEFzeW5jRmlsZVN5c3RlbTo6VHlwZT4oV2ViS2l0OjpXZWJGaWxlU3lzdGVtOjpU
eXBlRXh0ZXJuYWwpOworY29uc3QgY2hhciBleHRlcm5hbFBhdGhQcmVmaXhbXSA9ICJleHRlcm5h
bCI7Citjb25zdCBzaXplX3QgZXh0ZXJuYWxQYXRoUHJlZml4TGVuZ3RoID0gc2l6ZW9mKGV4dGVy
bmFsUGF0aFByZWZpeCkgLSAxOworCit9CisKKy8vIHN0YXRpYwogYm9vbCBBc3luY0ZpbGVTeXN0
ZW06OmlzQXZhaWxhYmxlKCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gc3RhdGljCiti
b29sIEFzeW5jRmlsZVN5c3RlbTo6Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbnN0IEtVUkwmIHVybCwg
QXN5bmNGaWxlU3lzdGVtOjpUeXBlJiB0eXBlLCBTdHJpbmcmIGZpbGVQYXRoKQoreworICAgIGlm
ICghdXJsLnByb3RvY29sSXMoImZpbGVzeXN0ZW0iKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgS1VSTCBvcmlnaW5VUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwucGF0aCgpKTsKKyAgICBT
dHJpbmcgcGF0aCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhvcmlnaW5VUkwucGF0aCgpKTsK
KyAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgcGF0aFswXSAhPSAnLycpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7CisKKyAgICBpZiAocGF0aC5z
dGFydHNXaXRoKHRlbXBvcmFyeVBhdGhQcmVmaXgpKSB7CisgICAgICAgIHR5cGUgPSBUZW1wb3Jh
cnk7CisgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyh0ZW1wb3JhcnlQYXRoUHJlZml4TGVu
Z3RoKTsKKyAgICB9IGVsc2UgaWYgKHBhdGguc3RhcnRzV2l0aChwZXJzaXN0ZW50UGF0aFByZWZp
eCkpIHsKKyAgICAgICAgdHlwZSA9IFBlcnNpc3RlbnQ7CisgICAgICAgIHBhdGggPSBwYXRoLnN1
YnN0cmluZyhwZXJzaXN0ZW50UGF0aFByZWZpeExlbmd0aCk7CisgICAgfSBlbHNlIGlmIChwYXRo
LnN0YXJ0c1dpdGgoZXh0ZXJuYWxQYXRoUHJlZml4KSkgeworICAgICAgICB0eXBlID0gZXh0ZXJu
YWxUeXBlOworICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoZXh0ZXJuYWxQYXRoUHJlZml4
TGVuZ3RoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHBh
dGguaXNFbXB0eSgpIHx8IHBhdGhbMF0gIT0gJy8nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBmaWxlUGF0aC5zd2FwKHBhdGgpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBzdGF0
aWMKK2Jvb2wgQXN5bmNGaWxlU3lzdGVtOjppc1ZhbGlkVHlwZShUeXBlIHR5cGUpCit7CisgICAg
cmV0dXJuIHR5cGUgPT0gQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3JhcnkgfHwgdHlwZSA9PSBBc3lu
Y0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQgfHwgdHlwZSA9PSBleHRlcm5hbFR5cGU7Cit9CisKIEFz
eW5jRmlsZVN5c3RlbUNocm9taXVtOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShBc3luY0ZpbGVT
eXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgcm9vdFVSTCkKICAgICA6IEFzeW5jRmlsZVN5
c3RlbSh0eXBlKQogICAgICwgbV93ZWJGaWxlU3lzdGVtKFdlYktpdDo6d2ViS2l0UGxhdGZvcm1T
dXBwb3J0KCktPmZpbGVTeXN0ZW0oKSkKQEAgLTYxLDYgKzExMCwyOSBAQCBBc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bTo6fkFzeW5jRmlsZVN5c3RlbUNocm9taXVtKCkKIHsKIH0KIAorU3RyaW5nIEFz
eW5jRmlsZVN5c3RlbUNocm9taXVtOjp0b1VSTChjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywg
Y29uc3QgU3RyaW5nJiBmdWxsUGF0aCkKK3sKKyAgICBpZiAodHlwZSgpID09IGV4dGVybmFsVHlw
ZSkgeworICAgICAgICAvLyBGb3IgZXh0ZXJuYWwgdHlwZSB3ZSBtYXkgYmUgcmV0dXJuaW5nIFVS
TCBmb3IgZGlmZmVyZW50IG9yaWdpbnMgZnJvbSB0aGUgb25lIHJldHVybmVkIGZvciByZXF1ZXN0
RmlsZVN5c3RlbS4KKyAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoImZpbGVzeXN0ZW06Iik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQob3JpZ2luU3Ry
aW5nKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiLyIpOworICAgICAgICByZXN1bHQuYXBwZW5k
KGV4dGVybmFsUGF0aFByZWZpeCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZnVsbFBhdGgpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgQVNTRVJUKFNl
Y3VyaXR5T3JpZ2luOjpjcmVhdGUobV9maWxlc3lzdGVtUm9vdFVSTCktPnRvU3RyaW5nKCkgPT0g
b3JpZ2luU3RyaW5nKTsKKworICAgIEFTU0VSVCghbV9maWxlc3lzdGVtUm9vdFVSTC5pc0VtcHR5
KCkpOworICAgIEtVUkwgdXJsID0gbV9maWxlc3lzdGVtUm9vdFVSTDsKKyAgICAvLyBSZW1vdmUg
dGhlIGV4dHJhIGxlYWRpbmcgc2xhc2ggYnkgc3Vic3RyaW5nKDEpLgorICAgIC8vIE5vdGUgdGhh
dCB3ZSBkbyBub3QgcGVyZm9ybSBVUkwtZXNjYXBpbmcgaGVyZS4KKyAgICB1cmwuc2V0UGF0aCh1
cmwucGF0aCgpICsgZnVsbFBhdGguc3Vic3RyaW5nKDEpKTsKKyAgICByZXR1cm4gdXJsLnN0cmlu
ZygpOworfQorCiB2b2lkIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjptb3ZlKGNvbnN0IFN0cmlu
ZyYgc291cmNlUGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NPd25QdHI8
QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7CiAgICAgbV93ZWJGaWxlU3lz
dGVtLT5tb3ZlKHZpcnR1YWxQYXRoVG9GaWxlU3lzdGVtVVJMKHNvdXJjZVBhdGgpLCB2aXJ0dWFs
UGF0aFRvRmlsZVN5c3RlbVVSTChkZXN0aW5hdGlvblBhdGgpLCBuZXcgV2ViS2l0OjpXZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCmluZGV4IDBjNTUwYjVlMjVl
YmZlNzRhZjNmNjFiNWY0OTVmZjZkNTg5ZmE3MzQuLmE4Y2JjYTI3NjAzNDk2YmEwNWI5MmM1OWQ3
ZTZiZDljY2U3MmU2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fz
eW5jRmlsZVN5c3RlbUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaApAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIH5Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSgpOwogCisgICAgdmlydHVhbCBTdHJp
bmcgdG9VUkwoY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVsbFBh
dGgpOwogICAgIHZpcnR1YWwgdm9pZCBtb3ZlKGNvbnN0IFN0cmluZyYgc291cmNlUGF0aCwgY29u
c3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzPik7CiAgICAgdmlydHVhbCB2b2lkIGNvcHkoY29uc3QgU3RyaW5nJiBzb3VyY2VQYXRo
LCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0
ZW1DYWxsYmFja3M+KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgcGF0
aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKQEAgLTY2LDcgKzY3LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWFkRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
cGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKICAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlV3JpdGVyKEFzeW5jRmlsZVdyaXRlckNsaWVudCogY2xpZW50LCBjb25zdCBT
dHJpbmcmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAKLXBy
aXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oQXN5bmNGaWxl
U3lzdGVtOjpUeXBlLCBjb25zdCBLVVJMJiByb290VVJMKTsKICAgICBXZWJLaXQ6OldlYkZpbGVT
eXN0ZW0qIG1fd2ViRmlsZVN5c3RlbTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCmluZGV4IDYx
NTVkMTUyYTkwOWFlYWZmZGQyZGNmMDY4YTRiN2YyNjBiYmRmOGEuLjdmYmIxZjQ2ODI1NmVhOWVm
YWIwYjhmNDY3NDcwMmFhZjg5ZDljNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTU3
LDE0ICs1NywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgY29uc3QgY2hhciBmaWxl
U3lzdGVtT3BlcmF0aW9uc01vZGVbXSA9ICJmaWxlU3lzdGVtT3BlcmF0aW9uc01vZGUiOwogCiBX
b3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBl
IHR5cGUsIGNvbnN0IFdlYktpdDo6V2ViVVJMJiByb290VVJMLCBib29sIHN5bmNocm9ub3VzKQot
ICAgIDogQXN5bmNGaWxlU3lzdGVtKHR5cGUpCisgICAgOiBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bSh0eXBlLCByb290VVJMKQogICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQp
Ci0gICAgLCBtX3dlYkZpbGVTeXN0ZW0od2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVTeXN0
ZW0oKSkKICAgICAsIG1fd29ya2VyQ29udGV4dChzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
Y29udGV4dCkpCiAgICAgLCBtX3N5bmNocm9ub3VzKHN5bmNocm9ub3VzKQotICAgICwgbV9maWxl
c3lzdGVtUm9vdFVSTChyb290VVJMKQogewotICAgIEFTU0VSVChtX3dlYkZpbGVTeXN0ZW0pOwog
ICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsK
IAogICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZtX3dvcmtlckNv
bnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwpAQCAtMjIyLDE1ICsyMTksNiBA
QCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IFdvcmtlckFzeW5j
RmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdAogICAgIHJldHVybiBtX2JyaWRnZUZvckN1cnJlbnRP
cGVyYXRpb247CiB9CiAKLUtVUkwgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OnZpcnR1
YWxQYXRoVG9GaWxlU3lzdGVtVVJMKGNvbnN0IFN0cmluZyYgdmlydHVhbFBhdGgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKCFtX2ZpbGVzeXN0ZW1Sb290VVJMLmlzRW1wdHkoKSk7Ci0gICAgS1VSTCB1
cmwgPSBtX2ZpbGVzeXN0ZW1Sb290VVJMOwotICAgIC8vIFJlbW92ZSB0aGUgZXh0cmEgbGVhZGlu
ZyBzbGFzaC4KLSAgICB1cmwuc2V0UGF0aCh1cmwucGF0aCgpICsgZW5jb2RlV2l0aFVSTEVzY2Fw
ZVNlcXVlbmNlcyh2aXJ0dWFsUGF0aC5zdWJzdHJpbmcoMSkpKTsKLSAgICByZXR1cm4gdXJsOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNU
RU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAppbmRleCAxM2E4ZTdjYjQwZjAxYjdiN2NkYTYzODczYmYw
YTFhZGFmN2ZjM2QzLi5hNTY3MGM0MTc1MGE0OGE2NjhhMzk4NWVlMjNhYjNhY2Q4MDM2NjU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5j
RmlsZVN5c3RlbUNocm9taXVtLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShGSUxF
X1NZU1RFTSkgJiYgRU5BQkxFKFdPUktFUlMpCiAKLSNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0u
aCIKKyNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNr
czsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBXb3JrZXJDb250ZXh0Owog
Ci1jbGFzcyBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSA6IHB1YmxpYyBBc3luY0ZpbGVT
eXN0ZW0geworY2xhc3MgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0gOiBwdWJsaWMgQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPEFz
eW5jRmlsZVN5c3RlbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFz
eW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgcm9vdFVSTCwg
Ym9vbCBzeW5jaHJvbm91cykKICAgICB7CkBAIC04MCwxMSArODAsNyBAQCBwcml2YXRlOgogCiAg
ICAgUGFzc1JlZlB0cjxXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNy
ZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoUGFzc093blB0cjxBc3luY0ZpbGVT
eXN0ZW1DYWxsYmFja3M+KTsKIAotICAgIC8vIENvbnZlcnRzIGEgZ2l2ZW4gYWJzb2x1dGUgdmly
dHVhbCBwYXRoIHRvIGEgZnVsbCBvcmlnaW4tcXVhbGlmaWVkIEZpbGVTeXN0ZW0gVVJMLgotICAg
IEtVUkwgdmlydHVhbFBhdGhUb0ZpbGVTeXN0ZW1VUkwoY29uc3QgU3RyaW5nJiB2aXJ0dWFsUGF0
aCkgY29uc3Q7Ci0KICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7Ci0gICAgV2ViS2l0OjpXZWJGaWxlU3lzdGVtKiBtX3dlYkZpbGVTeXN0ZW07CiAg
ICAgV2ViS2l0OjpXZWJXb3JrZXJCYXNlKiBtX3dvcmtlcjsKICAgICBXb3JrZXJDb250ZXh0KiBt
X3dvcmtlckNvbnRleHQ7CiAgICAgUmVmUHRyPFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZT4gbV9icmlkZ2VGb3JDdXJyZW50T3BlcmF0aW9uOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU2NzMzZTFk
NmMyM2YyOTZjMjkzOWRjOTJhY2JkMzkyODgzMmYzZDkuLjc0YjViNGJkNWJmOWYwYThhNDRiOGVj
OTBlNzgzNjlhYjM0Mzc5NjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wMS0yMyAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ2xlYW51cDogTW92
ZSBjaHJvbWUtc3BlY2lmaWMgZmlsZXN5c3RlbSB0eXBlIGhhbmRsaW5nIGNvZGUgKGZvciBGaWxl
U3lzdGVtIEFQSSkgdW5kZXIgY2hyb21pdW0gZGlyZWN0b3J5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU1MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vZGlmaWVkIHRoZSBmaWxlLWVudHJ5LXRvLXVy
aSB0ZXN0IHRvIGNoZWNrIGlmIHRvVVJMKCkgcmV0dXJucworICAgICAgICB0aGUgY29ycmVjdCBV
Ukwgd2l0aCB1bmVzY2FwZWQgZGlyZWN0b3J5IHNlcGFyYXRvciAoJy8nKS4KKworICAgICAgICAq
IGZhc3QvZmlsZXN5c3RlbS9maWxlLWVudHJ5LXRvLXVyaS1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLWVudHJ5LXRvLXVyaS5qczoKKyAgICAg
ICAgKGVudHJ5VG9VUkwpOgorICAgICAgICAoY3JlYXRlVGVzdEZpbGUpOgorCiAyMDEyLTAxLTIx
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIGJhc2VsaW5l
cyBmb3IgdGVzdCBhZnRlciBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMDU1NzUu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11
cmktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50cnkt
dG8tdXJpLWV4cGVjdGVkLnR4dAppbmRleCBjMTA5ZTZiYzhmOTQyOTUzM2M4N2I5MWFmYjIwMGZm
MzEyNmE4MTNjLi4zN2U3YmJmMTgwOTM1YzQzYTM5MTRiZTEwNzUwODBhNjAwZTliZWUyIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmktZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLWVudHJ5LXRv
LXVyaS1leHBlY3RlZC50eHQKQEAgLTMsNyArMyw3IEBAIE9idGFpbmluZyBVUkwgZnJvbSBGaWxl
RW50cnkuCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyB0ZXN0RmlsZVVSTCBp
cyAnZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS90ZXN0RmlsZUVudHJ5LnR4dCcKK1BBU1Mg
dGVzdEZpbGVVUkwgaXMgJ2ZpbGVzeXN0ZW06ZmlsZTovLy90ZW1wb3JhcnkvZGlyL3Rlc3RGaWxl
RW50cnkudHh0JwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBM
RVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2Zp
bGUtZW50cnktdG8tdXJpLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNl
cy9maWxlLWVudHJ5LXRvLXVyaS5qcwppbmRleCBiYTgzZDdmZmY2OTk5ZDMwZWU5YmFkZmUyYWQ1
YjI3MGRmZGYxYjdhLi5lYzdiNTU5YjMxYmIyOWJlZDU3YmI5NjFhM2EzMjkzMTFjOTMxMjA5IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtZW50
cnktdG8tdXJpLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMv
ZmlsZS1lbnRyeS10by11cmkuanMKQEAgLTYsNiArNiw3IEBAIGlmICh0aGlzLmltcG9ydFNjcmlw
dHMpIHsKIGRlc2NyaXB0aW9uKCJPYnRhaW5pbmcgVVJMIGZyb20gRmlsZUVudHJ5LiIpOwogCiB2
YXIgZmlsZVN5c3RlbSA9IG51bGw7Cit2YXIgdGVzdERpcmVjdG9yeU5hbWUgPSAnZGlyJzsKIHZh
ciB0ZXN0RmlsZU5hbWUgPSAndGVzdEZpbGVFbnRyeS50eHQnOwogdmFyIHRlc3RGaWxlVVJJID0g
bnVsbDsKIApAQCAtMTYsMTIgKzE3LDE1IEBAIGZ1bmN0aW9uIGVycm9yQ2FsbGJhY2soZXJyb3Ip
IHsKIAogZnVuY3Rpb24gZW50cnlUb1VSTChlbnRyeSkgewogICAgIHRlc3RGaWxlVVJMID0gZW50
cnkudG9VUkwoKTsKLSAgICBzaG91bGRCZSgidGVzdEZpbGVVUkwiLCAiJ2ZpbGVzeXN0ZW06Zmls
ZTovLy90ZW1wb3JhcnkvdGVzdEZpbGVFbnRyeS50eHQnIik7CisgICAgc2hvdWxkQmUoInRlc3RG
aWxlVVJMIiwgIidmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5L2Rpci90ZXN0RmlsZUVudHJ5
LnR4dCciKTsKICAgICBmaW5pc2hKU1Rlc3QoKTsKIH0KIAogZnVuY3Rpb24gY3JlYXRlVGVzdEZp
bGUoKSB7Ci0gICAgZmlsZVN5c3RlbS5yb290LmdldEZpbGUodGVzdEZpbGVOYW1lLCB7Y3JlYXRl
OnRydWV9LCBlbnRyeVRvVVJMLCBlcnJvckNhbGxiYWNrKTsKKyAgICBmaWxlU3lzdGVtLnJvb3Qu
Z2V0RGlyZWN0b3J5KHRlc3REaXJlY3RvcnlOYW1lLCB7Y3JlYXRlOnRydWV9LAorICAgIGZ1bmN0
aW9uKGRpcikgeworICAgICAgICBkaXIuZ2V0RmlsZSh0ZXN0RmlsZU5hbWUsIHtjcmVhdGU6dHJ1
ZX0sIGVudHJ5VG9VUkwsIGVycm9yQ2FsbGJhY2spOworICAgIH0sIGVycm9yQ2FsbGJhY2spOwog
fQogCiBmdW5jdGlvbiBmaWxlU3lzdGVtQ2FsbGJhY2soZnMpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124605</attachid>
            <date>2012-01-30 14:51:19 -0800</date>
            <delta_ts>2012-01-30 18:22:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76551-20120131075117.patch</filename>
            <type>text/plain</type>
            <size>25422</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODVmMjUxM2RlNDA3NmJh
NTE3N2RlZDNmM2U5MTliNGIwYzc1MTRjNS4uODcxYjA4Mjk0YzgzMTI0MjZkYjc0MzVkNmE2MDM0
NTQ0ODhjODI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAxLTI5ICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBDbGVhbnVwOiBNb3Zl
IGNocm9tZS1zcGVjaWZpYyBmaWxlc3lzdGVtIHR5cGUgaGFuZGxpbmcgY29kZSAoZm9yIEZpbGVT
eXN0ZW0gQVBJKSB1bmRlciBjaHJvbWl1bSBkaXJlY3RvcnkgKHJlLWxhbmRpbmcgcjEwNTM5NSkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTUxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgdGhl
IGltcGxlbWVudGF0aW9uIG9mIGNyYWNrRmlsZVN5c3RlbVVSTCgpIGFuZCB0b1VSTCgpIGZyb20K
KyAgICAgICAgV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlIGludG8gV2ViQ29yZS9w
bGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0KKyAgICAgICAgc28gdGhhdCBlYWNoIHBsYXRmb3JtIGNh
biBleHRlbmQvaW1wbGVtZW50IHRoZWlyIGJlaGF2aW9yIGlmIG5lY2Vzc2FyeS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgYXMgaXQgaGFzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KKworICAgICAg
ICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwOiBNb3ZlZCBjcmFja0ZpbGVTeXN0ZW1V
UkwoKSB0byBBc3luY0ZpbGVTeXN0ZW0uCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVt
QmFzZS5oOgorICAgICAgICAoRE9NRmlsZVN5c3RlbUJhc2UpOgorICAgICAgICAqIGZpbGVhcGkv
RW50cnlCYXNlLmNwcDogTW92ZWQgdG9VUkwoKSB0byBBc3luY0ZpbGVTeXN0ZW0uCisgICAgICAg
IChXZWJDb3JlOjpFbnRyeUJhc2U6OnRvVVJMKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5j
cHA6IE1hZGUgY29ycmVzcG9uZGluZyBjYWxsc2l0ZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93Ojp3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpET01XaW5kb3c6OndlYmtpdFJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwpOgorICAgICAgICAq
IHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6aXNWYWxpZFR5cGUpOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKEFzeW5j
RmlsZVN5c3RlbSk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDogTWFkZSBj
b3JyZXNwb25kaW5nIGNhbGxzaXRlIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0Ojp3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJDb250ZXh0Ojp3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbVN5bmMpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyQ29udGV4dDo6d2Via2l0UmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojp3ZWJraXRSZXNvbHZlTG9jYWxGaWxlU3lzdGVt
U3luY1VSTCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6CisKIDIwMTItMDEt
MjggIEFsZXhhbmRlciBGw6Zyw7h5ICA8YWhmQDB4OTAuZGs+CiAKICAgICAgICAgW1F0XSBSZW1v
dmUgcmVmZXJlbmNlcyB0byBDU1NCb3JkZXJJbWFnZVZhbHVlLmggaW4gVGFyZ2V0LnByaQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4NWUzZmQxZjI0NTE3MDhiOGI3MWU0OGJjMzEyMDY5
MTJlOWNjOGExLi5lZDNhODgxMGVkZmIxNTM1Y2Q2YzFhNGE4YzYxYjA1ZjczNWNlMTdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAxLTI5ICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBDbGVhbnVwOiBNb3Zl
IGNocm9tZS1zcGVjaWZpYyBmaWxlc3lzdGVtIHR5cGUgaGFuZGxpbmcgY29kZSAoZm9yIEZpbGVT
eXN0ZW0gQVBJKSB1bmRlciBjaHJvbWl1bSBkaXJlY3RvcnkgKHJlLWxhbmRpbmcgcjEwNTM5NSkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTUxCisK
KyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHA6IFJlbW92ZWQgdGhlIG1hdGNo
aW5nIGFzc2VydGlvbiBmb3IgQXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5hbCAoYXMgbm93IHdlIGRp
cmVjdGx5IHVzZSBXZWJGaWxlU3lzdGVtOjpUeXBlRXh0ZXJuYWwpLgorICAgICAgICAqIHNyYy9B
c3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVT
eXN0ZW06OmNyYWNrRmlsZVN5c3RlbVVSTCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXN5
bmNGaWxlU3lzdGVtOjppc1ZhbGlkVHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW06OnRvVVJMKTogQWRkZWQuCisgICAgICAgICogc3JjL0FzeW5j
RmlsZVN5c3RlbUNocm9taXVtLmg6CisgICAgICAgIChBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSk6
CisgICAgICAgICogc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcDogTWFkZSB0
aGlzIHN1YmNsYXNzIG9mIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtIChyYXRoZXIgdGhhbiB0aGF0
IG9mIEFzeW5jRmlsZVN5c3RlbSkKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckFzeW5jRmlsZVN5
c3RlbUNocm9taXVtOjpXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSk6CisgICAgICAgICog
c3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmg6CisgICAgICAgIChXb3JrZXJBc3lu
Y0ZpbGVTeXN0ZW1DaHJvbWl1bSk6CisKIDIwMTItMDEtMjcgIEplZmYgVGltYW51cyAgPHR3aXpA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gSW5jcmVhc2UgdGhlIHNpemUgb2Yg
dGhlIEdhbmVzaCB0ZXh0dXJlIGNhY2hlIHRvIHByZXZlbnQgcGVyZm9ybWFuY2UgcHJvYmxlbXMg
b24gYWR2YW5jZWQgQ2FudmFzMkQgcGFnZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbUJhc2UuY3BwCmluZGV4IGVjOGVmNzI1YTYxMDMwNDlhNmQ0NGQ4YWZjY2MzOWQ5
NWFhZDNhMzUuLjIxMzVmMmJiYzQyMGU1OWJmN2NiNDhjOTE5NDlkYTQwMTA4MzA4ZWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCkBAIC01MCw0MyAr
NTAsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IGNoYXIgRE9NRmlsZVN5c3Rl
bUJhc2U6OmtQZXJzaXN0ZW50UGF0aFByZWZpeFtdID0gInBlcnNpc3RlbnQiOwotY29uc3Qgc2l6
ZV90IERPTUZpbGVTeXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhQcmVmaXhMZW5ndGggPSBzaXpl
b2YoRE9NRmlsZVN5c3RlbUJhc2U6OmtQZXJzaXN0ZW50UGF0aFByZWZpeCkgLSAxOwotY29uc3Qg
Y2hhciBET01GaWxlU3lzdGVtQmFzZTo6a1RlbXBvcmFyeVBhdGhQcmVmaXhbXSA9ICJ0ZW1wb3Jh
cnkiOwotY29uc3Qgc2l6ZV90IERPTUZpbGVTeXN0ZW1CYXNlOjprVGVtcG9yYXJ5UGF0aFByZWZp
eExlbmd0aCA9IHNpemVvZihET01GaWxlU3lzdGVtQmFzZTo6a1RlbXBvcmFyeVBhdGhQcmVmaXgp
IC0gMTsKLWNvbnN0IGNoYXIgRE9NRmlsZVN5c3RlbUJhc2U6OmtFeHRlcm5hbFBhdGhQcmVmaXhb
XSA9ICJleHRlcm5hbCI7Ci1jb25zdCBzaXplX3QgRE9NRmlsZVN5c3RlbUJhc2U6OmtFeHRlcm5h
bFBhdGhQcmVmaXhMZW5ndGggPSBzaXplb2YoRE9NRmlsZVN5c3RlbUJhc2U6OmtFeHRlcm5hbFBh
dGhQcmVmaXgpIC0gMTsKLQotYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Y3JhY2tGaWxlU3lzdGVt
VVJMKGNvbnN0IEtVUkwmIHVybCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlJiB0eXBlLCBTdHJpbmcm
IGZpbGVQYXRoKQotewotICAgIGlmICghdXJsLnByb3RvY29sSXMoImZpbGVzeXN0ZW0iKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgS1VSTCBvcmlnaW5VUkwoUGFyc2VkVVJMU3RyaW5n
LCB1cmwucGF0aCgpKTsKLSAgICBTdHJpbmcgcGF0aCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
cyhvcmlnaW5VUkwucGF0aCgpKTsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgcGF0aFswXSAh
PSAnLycpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmco
MSk7Ci0KLSAgICBpZiAocGF0aC5zdGFydHNXaXRoKGtUZW1wb3JhcnlQYXRoUHJlZml4KSkgewot
ICAgICAgICB0eXBlID0gQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3Jhcnk7Ci0gICAgICAgIHBhdGgg
PSBwYXRoLnN1YnN0cmluZyhrVGVtcG9yYXJ5UGF0aFByZWZpeExlbmd0aCk7Ci0gICAgfSBlbHNl
IGlmIChwYXRoLnN0YXJ0c1dpdGgoa1BlcnNpc3RlbnRQYXRoUHJlZml4KSkgewotICAgICAgICB0
eXBlID0gQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50OwotICAgICAgICBwYXRoID0gcGF0aC5z
dWJzdHJpbmcoa1BlcnNpc3RlbnRQYXRoUHJlZml4TGVuZ3RoKTsKLSAgICB9IGVsc2UgaWYgKHBh
dGguc3RhcnRzV2l0aChrRXh0ZXJuYWxQYXRoUHJlZml4KSkgewotICAgICAgICB0eXBlID0gQXN5
bmNGaWxlU3lzdGVtOjpFeHRlcm5hbDsKLSAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKGtF
eHRlcm5hbFBhdGhQcmVmaXhMZW5ndGgpOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgcGF0aFswXSAhPSAnLycpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGZpbGVQYXRoLnN3YXAocGF0aCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KIERPTUZpbGVTeXN0ZW1CYXNlOjpET01GaWxlU3lzdGVtQmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkK
ICAgICAsIG1fbmFtZShuYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9E
T01GaWxlU3lzdGVtQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVt
QmFzZS5oCmluZGV4IDhiYzBiNjU3OTc3ZWFiMGYxOTA4ZGU3YTBkYWQ5OTZlODUwMTI1NjUuLjE4
YWU4ZDc2YjdmOWVmZjRhYWM1NTY3OTE4ZjQzNmRlMzRmZWEyYjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgKQEAgLTYyLDE0ICs2Miw2IEBAIHB1YmxpYzoK
ICAgICB9CiAgICAgdmlydHVhbCB+RE9NRmlsZVN5c3RlbUJhc2UoKTsKIAotICAgIHN0YXRpYyBj
b25zdCBjaGFyIGtQZXJzaXN0ZW50UGF0aFByZWZpeFtdOwotICAgIHN0YXRpYyBjb25zdCBzaXpl
X3Qga1BlcnNpc3RlbnRQYXRoUHJlZml4TGVuZ3RoOwotICAgIHN0YXRpYyBjb25zdCBjaGFyIGtU
ZW1wb3JhcnlQYXRoUHJlZml4W107Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrVGVtcG9yYXJ5
UGF0aFByZWZpeExlbmd0aDsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBrRXh0ZXJuYWxQYXRoUHJl
Zml4W107Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrRXh0ZXJuYWxQYXRoUHJlZml4TGVuZ3Ro
OwotICAgIHN0YXRpYyBib29sIGNyYWNrRmlsZVN5c3RlbVVSTChjb25zdCBLVVJMJiwgQXN5bmNG
aWxlU3lzdGVtOjpUeXBlJiwgU3RyaW5nJiBmaWxlUGF0aCk7Ci0KICAgICBjb25zdCBTdHJpbmcm
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBBc3luY0ZpbGVTeXN0ZW0qIGFz
eW5jRmlsZVN5c3RlbSgpIGNvbnN0IHsgcmV0dXJuIG1fYXN5bmNGaWxlU3lzdGVtLmdldCgpOyB9
CiAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0VudHJ5QmFzZS5jcHAKaW5kZXggNTNmNjJlNzgzYmFmMTQ1ZmFjYjg0ZmJiNmFmNTg5
YTEyMTc1MmEzOC4uMGIxMjU0YjdhZGRhZDk5ODliOTQ5YTg4YjNkOWU4NTc4YTZkNDczOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeUJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnlCYXNlLmNwcApAQCAtNTYsMjcgKzU2LDcgQEAgRW50cnlC
YXNlOjp+RW50cnlCYXNlKCkKIAogU3RyaW5nIEVudHJ5QmFzZTo6dG9VUkwoKQogewotICAgIFN0
cmluZyBvcmlnaW5TdHJpbmcgPSBtX2ZpbGVTeXN0ZW0tPnNlY3VyaXR5T3JpZ2luKCktPnRvU3Ry
aW5nKCk7Ci0gICAgQVNTRVJUKCFvcmlnaW5TdHJpbmcuaXNFbXB0eSgpKTsKLSAgICBpZiAob3Jp
Z2luU3RyaW5nID09ICJudWxsIikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFN0cmlu
Z0J1aWxkZXIgcmVzdWx0OwotICAgIHJlc3VsdC5hcHBlbmQoImZpbGVzeXN0ZW06Iik7Ci0gICAg
cmVzdWx0LmFwcGVuZChvcmlnaW5TdHJpbmcpOwotICAgIHJlc3VsdC5hcHBlbmQoIi8iKTsKLSAg
ICBzd2l0Y2ggKG1fZmlsZVN5c3RlbS0+YXN5bmNGaWxlU3lzdGVtKCktPnR5cGUoKSkgewotICAg
IGNhc2UgQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3Jhcnk6Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
RE9NRmlsZVN5c3RlbUJhc2U6OmtUZW1wb3JhcnlQYXRoUHJlZml4KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBBc3luY0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQ6Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoRE9NRmlsZVN5c3RlbUJhc2U6OmtQZXJzaXN0ZW50UGF0aFByZWZpeCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5hbDoKLSAgICAgICAgcmVz
dWx0LmFwcGVuZChET01GaWxlU3lzdGVtQmFzZTo6a0V4dGVybmFsUGF0aFByZWZpeCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICByZXN1bHQuYXBwZW5kKGVuY29kZVdpdGhVUkxFc2NhcGVT
ZXF1ZW5jZXMobV9mdWxsUGF0aCkpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAg
ICByZXR1cm4gbV9maWxlU3lzdGVtLT5hc3luY0ZpbGVTeXN0ZW0oKS0+dG9VUkwobV9maWxlU3lz
dGVtLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2Z1bGxQYXRoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IGFmYzYx
MWYyNDlmYjRmZjc4ZDdjMjVkNWJmNmI5ZDRjZWQzOTkwZmUuLjdhMjhjMmE1MDA3MGY0M2NjZTJh
MzM2OGM3NDA3MmIwNDBjMDMxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTEw
NSw3ICsxMDUsNiBAQAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICNpbmNsdWRlICJBc3luY0Zp
bGVTeXN0ZW0uaCIKICNpbmNsdWRlICJET01GaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiRE9NRmls
ZVN5c3RlbUJhc2UuaCIKICNpbmNsdWRlICJFbnRyeUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXJy
b3JDYWxsYmFjay5oIgogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgpAQCAtNzcyLDcgKzc3MSw3IEBA
IHZvaWQgRE9NV2luZG93Ojp3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShpbnQgdHlwZSwgbG9uZyBs
b25nIHNpemUsIFBhc3NSZWZQdHI8RmlsCiAgICAgfQogCiAgICAgQXN5bmNGaWxlU3lzdGVtOjpU
eXBlIGZpbGVTeXN0ZW1UeXBlID0gc3RhdGljX2Nhc3Q8QXN5bmNGaWxlU3lzdGVtOjpUeXBlPih0
eXBlKTsKLSAgICBpZiAoZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3Jh
cnkgJiYgZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50ICYmIGZp
bGVTeXN0ZW1UeXBlICE9IEFzeW5jRmlsZVN5c3RlbTo6RXh0ZXJuYWwpIHsKKyAgICBpZiAoIUFz
eW5jRmlsZVN5c3RlbTo6aXNWYWxpZFR5cGUoZmlsZVN5c3RlbVR5cGUpKSB7CiAgICAgICAgIERP
TUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2soZG9jdW1lbnQsIGVycm9yQ2FsbGJhY2ssIEZp
bGVFcnJvcjo6Y3JlYXRlKEZpbGVFcnJvcjo6SU5WQUxJRF9NT0RJRklDQVRJT05fRVJSKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC03OTgsNyArNzk3LDcgQEAgdm9pZCBET01XaW5kb3c6
OndlYmtpdFJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NS
ZWZQdHI8RW4KIAogICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlOwogICAgIFN0cmluZyBm
aWxlUGF0aDsKLSAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZpbGVTeXN0
ZW1CYXNlOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29tcGxldGVkVVJMLCB0eXBlLCBmaWxlUGF0aCkp
IHsKKyAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIUFzeW5jRmlsZVN5c3RlbTo6
Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbXBsZXRlZFVSTCwgdHlwZSwgZmlsZVBhdGgpKSB7CiAgICAg
ICAgIERPTUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2soZG9jdW1lbnQsIGVycm9yQ2FsbGJh
Y2ssIEZpbGVFcnJvcjo6Y3JlYXRlKEZpbGVFcnJvcjo6RU5DT0RJTkdfRVJSKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC04MDYsOCArODA1LDYgQEAgdm9pZCBET01XaW5kb3c6OndlYmtp
dFJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NSZWZQdHI8
RW4KICAgICBMb2NhbEZpbGVTeXN0ZW06OmxvY2FsRmlsZVN5c3RlbSgpLnJlYWRGaWxlU3lzdGVt
KGRvY3VtZW50LCB0eXBlLCBSZXNvbHZlVVJJQ2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxi
YWNrLCBlcnJvckNhbGxiYWNrLCBkb2N1bWVudCwgZmlsZVBhdGgpKTsKIH0KIAotQ09NUElMRV9B
U1NFUlQoc3RhdGljX2Nhc3Q8aW50PihET01XaW5kb3c6OkVYVEVSTkFMKSA9PSBzdGF0aWNfY2Fz
dDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6RXh0ZXJuYWwpLCBlbnVtX21pc21hdGNoKTsKLQogQ09N
UElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihET01XaW5kb3c6OlRFTVBPUkFSWSkgPT0gc3Rh
dGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSksIGVudW1fbWlzbWF0Y2gp
OwogQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihET01XaW5kb3c6OlBFUlNJU1RFTlQp
ID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50KSwgZW51bV9t
aXNtYXRjaCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCmluZGV4IDA5MTZiZmY5ZGU4YjczMzE4
MGVkNDM5NzA5OGZlNjVjMDZkNDA5ZDUuLjM4ZThjNWQ3M2UyOTRmMmE1MWY3ZTI4MDc1MmJhZjA5
YTI3MDc5MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtMzcwLDcgKzM3MCw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgZW51bSBGaWxlU3lzdGVtVHlwZSB7CiAgICAgICAg
ICAgICBURU1QT1JBUlksCiAgICAgICAgICAgICBQRVJTSVNURU5ULAotICAgICAgICAgICAgRVhU
RVJOQUwsCiAgICAgICAgIH07CiAgICAgICAgIHZvaWQgd2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0o
aW50IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzUmVmUHRyPEZpbGVTeXN0ZW1DYWxsYmFjaz4s
IFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwogICAgICAgICB2b2lkIHdlYmtpdFJlc29sdmVM
b2NhbEZpbGVTeXN0ZW1VUkwoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNr
PiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
QXN5bmNGaWxlU3lzdGVtLmNwcAppbmRleCA0MDRhYWI2NzM3NmRlM2I1ZWI5ZDM2NzJmZDA1MmMw
ZTY4MDg1OWM5Li5jM2MyNDEyMjQwZGY1ZmE1MmFhZWFlOGMwNTU5NTRhODk2ZjVmYWQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAKQEAgLTM5LDYgKzM5
LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgY2hhciBBc3luY0ZpbGVTeXN0
ZW06OnBlcnNpc3RlbnRQYXRoUHJlZml4W10gPSAicGVyc2lzdGVudCI7Citjb25zdCBzaXplX3Qg
QXN5bmNGaWxlU3lzdGVtOjpwZXJzaXN0ZW50UGF0aFByZWZpeExlbmd0aCA9IHNpemVvZihBc3lu
Y0ZpbGVTeXN0ZW06OnBlcnNpc3RlbnRQYXRoUHJlZml4KSAtIDE7Citjb25zdCBjaGFyIEFzeW5j
RmlsZVN5c3RlbTo6dGVtcG9yYXJ5UGF0aFByZWZpeFtdID0gInRlbXBvcmFyeSI7Citjb25zdCBz
aXplX3QgQXN5bmNGaWxlU3lzdGVtOjp0ZW1wb3JhcnlQYXRoUHJlZml4TGVuZ3RoID0gc2l6ZW9m
KEFzeW5jRmlsZVN5c3RlbTo6dGVtcG9yYXJ5UGF0aFByZWZpeCkgLSAxOworCiAjaWYgIVBMQVRG
T1JNKENIUk9NSVVNKQogYm9vbCBBc3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKIHsKQEAg
LTQ2LDYgKzUxLDExIEBAIGJvb2wgQXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCitib29sIEFzeW5jRmlsZVN5c3RlbTo6aXNWYWxpZFR5cGUoVHlw
ZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IFRlbXBvcmFyeSB8fCB0eXBlID09IFBlcnNp
c3RlbnQ7Cit9CisKIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBBc3luY0ZpbGVTeXN0ZW06
OmNyZWF0ZShUeXBlLCBjb25zdCBTdHJpbmcmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCmluZGV4IGMyYzY4NDU0ZjRj
Y2IyMTk1NjY5OGU2OTM1M2Y0ZWU3MTBiM2IxZjAuLmJiZWY2YTRlMzE5Y2JmYTk3M2JkY2JhMGEw
ZGZkNTYwNWNhN2IxMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5j
RmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3Rl
bS5oCkBAIC01NCwxNCArNTQsMjYgQEAgcHVibGljOgogICAgIGVudW0gVHlwZSB7CiAgICAgICAg
IFRlbXBvcmFyeSwKICAgICAgICAgUGVyc2lzdGVudCwKLSAgICAgICAgRXh0ZXJuYWwsCiAgICAg
fTsKIAorICAgIC8vIFBhdGggcHJlZml4ZXMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgZmlsZXN5c3Rl
bSBVUkxzICh0aGF0IGNhbiBiZSBvYnRhaW5lZCBieSB0b1VSTCgpKS4KKyAgICAvLyBodHRwOi8v
d3d3LnczLm9yZy9UUi9maWxlLXN5c3RlbS1hcGkvI3dpZGwtRW50cnktdG9VUkwKKyAgICBzdGF0
aWMgY29uc3QgY2hhciBwZXJzaXN0ZW50UGF0aFByZWZpeFtdOworICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgcGVyc2lzdGVudFBhdGhQcmVmaXhMZW5ndGg7CisgICAgc3RhdGljIGNvbnN0IGNoYXIg
dGVtcG9yYXJ5UGF0aFByZWZpeFtdOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGVtcG9yYXJ5
UGF0aFByZWZpeExlbmd0aDsKKwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgeyB9CiAgICAgdmly
dHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBz
dGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFR5cGUo
VHlwZSk7CisKKyAgICBzdGF0aWMgYm9vbCBjcmFja0ZpbGVTeXN0ZW1VUkwoY29uc3QgS1VSTCYs
IFR5cGUmLCBTdHJpbmcmIGZpbGVQYXRoKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIHRvVVJMKGNv
bnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKSA9IDA7CisK
ICAgICAvLyBTdWJjbGFzcyBtdXN0IGltcGxlbWVudCB0aGlzIGlmIGl0IHN1cHBvcnRzIHN5bmNo
cm9ub3VzIG9wZXJhdGlvbnMuCiAgICAgLy8gVGhpcyBzaG91bGQgcmV0dXJuIGZhbHNlIGlmIHRo
ZXJlIGFyZSBubyBwZW5kaW5nIG9wZXJhdGlvbnMuCiAgICAgdmlydHVhbCBib29sIHdhaXRGb3JP
cGVyYXRpb25Ub0NvbXBsZXRlKCkgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwCmluZGV4IDhmMjQzMzBmZjM5MGE3MDc0NWQ4MmIxMDg0NDY2
Mjg5ODMwYTYxZWQuLmZiZWQzNmI2ZTFkY2YzOGRiZDJkZWFiMTk4MTdkMDhjZTU3NjcxZTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMzk1LDcgKzM5NSw3
IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6d2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0oaW50IHR5cGUs
IGxvbmcgbG9uZyBzaXplLCBQYXNzUmVmUHRyCiAgICAgfQogCiAgICAgQXN5bmNGaWxlU3lzdGVt
OjpUeXBlIGZpbGVTeXN0ZW1UeXBlID0gc3RhdGljX2Nhc3Q8QXN5bmNGaWxlU3lzdGVtOjpUeXBl
Pih0eXBlKTsKLSAgICBpZiAoZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpUZW1w
b3JhcnkgJiYgZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50ICYm
IGZpbGVTeXN0ZW1UeXBlICE9IEFzeW5jRmlsZVN5c3RlbTo6RXh0ZXJuYWwpIHsKKyAgICBpZiAo
IUFzeW5jRmlsZVN5c3RlbTo6aXNWYWxpZFR5cGUoZmlsZVN5c3RlbVR5cGUpKSB7CiAgICAgICAg
IERPTUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2sodGhpcywgZXJyb3JDYWxsYmFjaywgRmls
ZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpJTlZBTElEX01PRElGSUNBVElPTl9FUlIpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQxMiw3ICs0MTIsNyBAQCBQYXNzUmVmUHRyPERPTUZp
bGVTeXN0ZW1TeW5jPiBXb3JrZXJDb250ZXh0Ojp3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbVN5bmMo
aW50IHR5cAogICAgIH0KIAogICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSBmaWxlU3lzdGVtVHlw
ZSA9IHN0YXRpY19jYXN0PEFzeW5jRmlsZVN5c3RlbTo6VHlwZT4odHlwZSk7Ci0gICAgaWYgKGZp
bGVTeXN0ZW1UeXBlICE9IEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5ICYmIGZpbGVTeXN0ZW1U
eXBlICE9IEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudCAmJiBmaWxlU3lzdGVtVHlwZSAhPSBB
c3luY0ZpbGVTeXN0ZW06OkV4dGVybmFsKSB7CisgICAgaWYgKCFBc3luY0ZpbGVTeXN0ZW06Omlz
VmFsaWRUeXBlKGZpbGVTeXN0ZW1UeXBlKSkgewogICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246
OklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAt
NDMyLDcgKzQzMiw3IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6d2Via2l0UmVzb2x2ZUxvY2FsRmls
ZVN5c3RlbVVSTChjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0CiAKICAgICBBc3luY0ZpbGVT
eXN0ZW06OlR5cGUgdHlwZTsKICAgICBTdHJpbmcgZmlsZVBhdGg7Ci0gICAgaWYgKCFjb21wbGV0
ZWRVUkwuaXNWYWxpZCgpIHx8ICFET01GaWxlU3lzdGVtQmFzZTo6Y3JhY2tGaWxlU3lzdGVtVVJM
KGNvbXBsZXRlZFVSTCwgdHlwZSwgZmlsZVBhdGgpKSB7CisgICAgaWYgKCFjb21wbGV0ZWRVUkwu
aXNWYWxpZCgpIHx8ICFBc3luY0ZpbGVTeXN0ZW06OmNyYWNrRmlsZVN5c3RlbVVSTChjb21wbGV0
ZWRVUkwsIHR5cGUsIGZpbGVQYXRoKSkgewogICAgICAgICBET01GaWxlU3lzdGVtOjpzY2hlZHVs
ZUNhbGxiYWNrKHRoaXMsIGVycm9yQ2FsbGJhY2ssIEZpbGVFcnJvcjo6Y3JlYXRlKEZpbGVFcnJv
cjo6RU5DT0RJTkdfRVJSKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00NTEsNyArNDUx
LDcgQEAgUGFzc1JlZlB0cjxFbnRyeVN5bmM+IFdvcmtlckNvbnRleHQ6OndlYmtpdFJlc29sdmVM
b2NhbEZpbGVTeXN0ZW1TeW5jVVJMKGNvbnN0IFMKIAogICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlw
ZSB0eXBlOwogICAgIFN0cmluZyBmaWxlUGF0aDsKLSAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1Zh
bGlkKCkgfHwgIURPTUZpbGVTeXN0ZW1CYXNlOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29tcGxldGVk
VVJMLCB0eXBlLCBmaWxlUGF0aCkpIHsKKyAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkg
fHwgIUFzeW5jRmlsZVN5c3RlbTo6Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbXBsZXRlZFVSTCwgdHlw
ZSwgZmlsZVBhdGgpKSB7CiAgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6RU5DT0RJTkdfRVJS
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC00NzEsNyArNDcxLDYgQEAgUGFzc1JlZlB0
cjxFbnRyeVN5bmM+IFdvcmtlckNvbnRleHQ6OndlYmtpdFJlc29sdmVMb2NhbEZpbGVTeXN0ZW1T
eW5jVVJMKGNvbnN0IFMKIAogQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihXb3JrZXJD
b250ZXh0OjpURU1QT1JBUlkpID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lzdGVtOjpU
ZW1wb3JhcnkpLCBlbnVtX21pc21hdGNoKTsKIENPTVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGlu
dD4oV29ya2VyQ29udGV4dDo6UEVSU0lTVEVOVCkgPT0gc3RhdGljX2Nhc3Q8aW50PihBc3luY0Zp
bGVTeXN0ZW06OlBlcnNpc3RlbnQpLCBlbnVtX21pc21hdGNoKTsKLUNPTVBJTEVfQVNTRVJUKHN0
YXRpY19jYXN0PGludD4oV29ya2VyQ29udGV4dDo6RVhURVJOQUwpID09IHN0YXRpY19jYXN0PGlu
dD4oQXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5hbCksIGVudW1fbWlzbWF0Y2gpOwogI2VuZGlmCiAK
IFdvcmtlckNvbnRleHQ6Ok9ic2VydmVyOjpPYnNlcnZlcihXb3JrZXJDb250ZXh0KiBjb250ZXh0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAppbmRleCA1ODUwMzc0MmNjMTA5
MzdhYWQyNzIzNWY0MzcyMWU0YWU1NWI2ZDIzLi40M2QyZTJlYzYxYzQ4OTljMTIxZDAwYWE4MmMw
NjdlOTYxNmVlMzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaApAQCAt
MTM5LDcgKzEzOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgZW51bSBGaWxlU3lz
dGVtVHlwZSB7CiAgICAgICAgICAgICBURU1QT1JBUlksCiAgICAgICAgICAgICBQRVJTSVNURU5U
LAotICAgICAgICAgICAgRVhURVJOQUwsCiAgICAgICAgIH07CiAgICAgICAgIHZvaWQgd2Via2l0
UmVxdWVzdEZpbGVTeXN0ZW0oaW50IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzUmVmUHRyPEZp
bGVTeXN0ZW1DYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+KTsKICAgICAgICAgUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtU3luYz4gd2Via2l0UmVxdWVz
dEZpbGVTeXN0ZW1TeW5jKGludCB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgRXhjZXB0aW9uQ29kZSYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdF
bnVtcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1z
LmNwcAppbmRleCAxZjkxZDUxMWZkYWQ1OWRhNDM1Y2EzNjhhMjAzZTc4N2RiYjExY2M2Li5hNDUx
Yjg4YTY1NjcwYjQ3MTQyYzNkYjllYWEwNjAwMTkyODQ4MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcApAQCAtNDMzLDcgKzQz
Myw2IEBAIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSURCS2V5OjpOdW1iZXJUeXBl
LCBJREJLZXk6Ok51bWJlclR5cGUpOwogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKIENPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViRmlsZVN5c3RlbTo6VHlwZVRlbXBvcmFyeSwgQXN5bmNG
aWxlU3lzdGVtOjpUZW1wb3JhcnkpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJG
aWxlU3lzdGVtOjpUeXBlUGVyc2lzdGVudCwgQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50KTsK
LUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRmlsZVN5c3RlbTo6VHlwZUV4dGVybmFs
LCBBc3luY0ZpbGVTeXN0ZW06OkV4dGVybmFsKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViRmlsZUluZm86OlR5cGVVbmtub3duLCBGaWxlTWV0YWRhdGE6OlR5cGVVbmtub3duKTsK
IENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRmlsZUluZm86OlR5cGVGaWxlLCBGaWxl
TWV0YWRhdGE6OlR5cGVGaWxlKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRmls
ZUluZm86OlR5cGVEaXJlY3RvcnksIEZpbGVNZXRhZGF0YTo6VHlwZURpcmVjdG9yeSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAKaW5kZXggYzU1YzcxYjc5NTI1YzIzYzU5YWNmYzFmZTk2ZjQ3NWQ1ZWU2OWYwOS4uZjJh
MDFhNDg2NzBhZmY0MDU0NDc3NWM1Zjk3MTA4NTRiYWUzZTcyNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAt
MzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCiAj
aW5jbHVkZSAiQXN5bmNGaWxlV3JpdGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgogI2luY2x1ZGUgIldlYkZpbGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGwuaCIKICNpbmNsdWRlICJXZWJGaWxlV3JpdGVyLmgiCkBAIC00MSwxNCAr
NDIsNTggQEAKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCisvLyBDaHJvbWVPUy1zcGVjaWZpYyBmaWxlc3lzdGVtIHR5cGUuCitjb25z
dCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgZXh0ZXJuYWxUeXBlID0gc3RhdGljX2Nhc3Q8QXN5bmNG
aWxlU3lzdGVtOjpUeXBlPihXZWJLaXQ6OldlYkZpbGVTeXN0ZW06OlR5cGVFeHRlcm5hbCk7Citj
b25zdCBjaGFyIGV4dGVybmFsUGF0aFByZWZpeFtdID0gImV4dGVybmFsIjsKK2NvbnN0IHNpemVf
dCBleHRlcm5hbFBhdGhQcmVmaXhMZW5ndGggPSBzaXplb2YoZXh0ZXJuYWxQYXRoUHJlZml4KSAt
IDE7CisKKy8vIHN0YXRpYwogYm9vbCBBc3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKIHsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gc3RhdGljCitib29sIEFzeW5jRmlsZVN5c3RlbTo6
Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbnN0IEtVUkwmIHVybCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBl
JiB0eXBlLCBTdHJpbmcmIGZpbGVQYXRoKQoreworICAgIGlmICghdXJsLnByb3RvY29sSXMoImZp
bGVzeXN0ZW0iKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgS1VSTCBvcmlnaW5VUkwo
UGFyc2VkVVJMU3RyaW5nLCB1cmwucGF0aCgpKTsKKyAgICBTdHJpbmcgcGF0aCA9IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyhvcmlnaW5VUkwucGF0aCgpKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5
KCkgfHwgcGF0aFswXSAhPSAnLycpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwYXRoID0g
cGF0aC5zdWJzdHJpbmcoMSk7CisKKyAgICBpZiAocGF0aC5zdGFydHNXaXRoKHRlbXBvcmFyeVBh
dGhQcmVmaXgpKSB7CisgICAgICAgIHR5cGUgPSBUZW1wb3Jhcnk7CisgICAgICAgIHBhdGggPSBw
YXRoLnN1YnN0cmluZyh0ZW1wb3JhcnlQYXRoUHJlZml4TGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYg
KHBhdGguc3RhcnRzV2l0aChwZXJzaXN0ZW50UGF0aFByZWZpeCkpIHsKKyAgICAgICAgdHlwZSA9
IFBlcnNpc3RlbnQ7CisgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhwZXJzaXN0ZW50UGF0
aFByZWZpeExlbmd0aCk7CisgICAgfSBlbHNlIGlmIChwYXRoLnN0YXJ0c1dpdGgoZXh0ZXJuYWxQ
YXRoUHJlZml4KSkgeworICAgICAgICB0eXBlID0gZXh0ZXJuYWxUeXBlOworICAgICAgICBwYXRo
ID0gcGF0aC5zdWJzdHJpbmcoZXh0ZXJuYWxQYXRoUHJlZml4TGVuZ3RoKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHBhdGguaXNFbXB0eSgpIHx8IHBhdGhb
MF0gIT0gJy8nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmaWxlUGF0aC5zd2FwKHBh
dGgpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBzdGF0aWMKK2Jvb2wgQXN5bmNGaWxlU3lz
dGVtOjppc1ZhbGlkVHlwZShUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gVGVtcG9y
YXJ5IHx8IHR5cGUgPT0gUGVyc2lzdGVudCB8fCB0eXBlID09IHN0YXRpY19jYXN0PFR5cGU+KFdl
YktpdDo6V2ViRmlsZVN5c3RlbTo6VHlwZUV4dGVybmFsKTsKK30KKwogQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW06OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtKEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0
eXBlLCBjb25zdCBLVVJMJiByb290VVJMKQogICAgIDogQXN5bmNGaWxlU3lzdGVtKHR5cGUpCiAg
ICAgLCBtX3dlYkZpbGVTeXN0ZW0oV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Zmls
ZVN5c3RlbSgpKQpAQCAtNjEsNiArMTA2LDIzIEBAIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjp+
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oKQogewogfQogCitTdHJpbmcgQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW06OnRvVVJMKGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGZ1bGxQYXRoKQoreworICAgIGlmICh0eXBlKCkgPT0gZXh0ZXJuYWxUeXBlKSB7CisgICAgICAg
IFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgICAgICByZXN1bHQuYXBwZW5kKCJmaWxlc3lzdGVt
OiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG9yaWdpblN0cmluZyk7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIi8iKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChleHRlcm5hbFBhdGhQcmVmaXgp
OworICAgICAgICByZXN1bHQuYXBwZW5kKGZ1bGxQYXRoKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC50b1N0cmluZygpOworICAgIH0KKworICAgIC8vIEZvciByZWd1bGFyIHR5cGVzIGp1c3QgdXNl
IHZpcnR1YWxQYXRoVG9GaWxlU3lzdGVtVVJMIHRvIGdldCB0aGUgVVJMLgorICAgIEFTU0VSVChT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1fZmlsZXN5c3RlbVJvb3RVUkwpLT50b1N0cmluZygpID09
IG9yaWdpblN0cmluZyk7CisgICAgcmV0dXJuIHZpcnR1YWxQYXRoVG9GaWxlU3lzdGVtVVJMKGZ1
bGxQYXRoKTsKK30KKwogdm9pZCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6bW92ZShjb25zdCBT
dHJpbmcmIHNvdXJjZVBhdGgsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25QYXRoLCBQYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewogICAgIG1fd2ViRmls
ZVN5c3RlbS0+bW92ZSh2aXJ0dWFsUGF0aFRvRmlsZVN5c3RlbVVSTChzb3VyY2VQYXRoKSwgdmly
dHVhbFBhdGhUb0ZpbGVTeXN0ZW1VUkwoZGVzdGluYXRpb25QYXRoKSwgbmV3IFdlYktpdDo6V2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAppbmRleCAwYzU1MGI1
ZTI1ZWJmZTc0YWYzZjYxYjVmNDk1ZmY2ZDU4OWZhNzM0Li5hOGNiY2EyNzYwMzQ5NmJhMDViOTJj
NTlkN2U2YmQ5Y2NlNzJlNmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB+QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oKTsKIAorICAgIHZpcnR1YWwg
U3RyaW5nIHRvVVJMKGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1
bGxQYXRoKTsKICAgICB2aXJ0dWFsIHZvaWQgbW92ZShjb25zdCBTdHJpbmcmIHNvdXJjZVBhdGgs
IGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25QYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4pOwogICAgIHZpcnR1YWwgdm9pZCBjb3B5KGNvbnN0IFN0cmluZyYgc291cmNl
UGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcm
IHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CkBAIC02Niw3ICs2
Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVhZERpcmVjdG9yeShjb25zdCBTdHJp
bmcmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQqIGNsaWVudCwgY29u
c3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwog
Ci1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKEFzeW5j
RmlsZVN5c3RlbTo6VHlwZSwgY29uc3QgS1VSTCYgcm9vdFVSTCk7CiAgICAgV2ViS2l0OjpXZWJG
aWxlU3lzdGVtKiBtX3dlYkZpbGVTeXN0ZW07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAppbmRl
eCA2MTU1ZDE1MmE5MDlhZWFmZmRkMmRjZjA2OGE0YjdmMjYwYmJkZjhhLi43ZmJiMWY0NjgyNTZl
YTllZmFiMGI4ZjQ2NzQ3MDJhYWY4OWQ5YzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCkBA
IC01NywxNCArNTcsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIGNvbnN0IGNoYXIg
ZmlsZVN5c3RlbU9wZXJhdGlvbnNNb2RlW10gPSAiZmlsZVN5c3RlbU9wZXJhdGlvbnNNb2RlIjsK
IAogV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OldvcmtlckFzeW5jRmlsZVN5c3RlbUNo
cm9taXVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6
VHlwZSB0eXBlLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgcm9vdFVSTCwgYm9vbCBzeW5jaHJvbm91
cykKLSAgICA6IEFzeW5jRmlsZVN5c3RlbSh0eXBlKQorICAgIDogQXN5bmNGaWxlU3lzdGVtQ2hy
b21pdW0odHlwZSwgcm9vdFVSTCkKICAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250
ZXh0KQotICAgICwgbV93ZWJGaWxlU3lzdGVtKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxl
U3lzdGVtKCkpCiAgICAgLCBtX3dvcmtlckNvbnRleHQoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4
dCo+KGNvbnRleHQpKQogICAgICwgbV9zeW5jaHJvbm91cyhzeW5jaHJvbm91cykKLSAgICAsIG1f
ZmlsZXN5c3RlbVJvb3RVUkwocm9vdFVSTCkKIHsKLSAgICBBU1NFUlQobV93ZWJGaWxlU3lzdGVt
KTsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQo
KSk7CiAKICAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmbV93b3Jr
ZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKQEAgLTIyMiwxNSArMjE5
LDYgQEAgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBXb3JrZXJB
c3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXQKICAgICByZXR1cm4gbV9icmlkZ2VGb3JDdXJy
ZW50T3BlcmF0aW9uOwogfQogCi1LVVJMIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjp2
aXJ0dWFsUGF0aFRvRmlsZVN5c3RlbVVSTChjb25zdCBTdHJpbmcmIHZpcnR1YWxQYXRoKSBjb25z
dAotewotICAgIEFTU0VSVCghbV9maWxlc3lzdGVtUm9vdFVSTC5pc0VtcHR5KCkpOwotICAgIEtV
UkwgdXJsID0gbV9maWxlc3lzdGVtUm9vdFVSTDsKLSAgICAvLyBSZW1vdmUgdGhlIGV4dHJhIGxl
YWRpbmcgc2xhc2guCi0gICAgdXJsLnNldFBhdGgodXJsLnBhdGgoKSArIGVuY29kZVdpdGhVUkxF
c2NhcGVTZXF1ZW5jZXModmlydHVhbFBhdGguc3Vic3RyaW5nKDEpKSk7Ci0gICAgcmV0dXJuIHVy
bDsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEZJTEVf
U1lTVEVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKaW5kZXggMTNhOGU3Y2I0MGYwMWI3YjdjZGE2Mzg3
M2JmMGExYWRhZjdmYzNkMy4uYzhhZTM1NjVmYWQwOWU3ODY3OWY4ODExNzlkYzRhYmMzMTgzZDEx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJB
c3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCkBAIC0zMyw3ICszMyw3IEBACiAKICNpZiBFTkFCTEUo
RklMRV9TWVNURU0pICYmIEVOQUJMRShXT1JLRVJTKQogCi0jaW5jbHVkZSAiQXN5bmNGaWxlU3lz
dGVtLmgiCisjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgpAQCAtNTEsNyArNTEsNyBAQCBjbGFzcyBBc3luY0ZpbGVTeXN0ZW1DYWxs
YmFja3M7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgV29ya2VyQ29udGV4
dDsKIAotY2xhc3MgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0gOiBwdWJsaWMgQXN5bmNG
aWxlU3lzdGVtIHsKK2NsYXNzIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtIDogcHVibGlj
IEFzeW5jRmlsZVN5c3RlbUNocm9taXVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgV2ViS2l0OjpXZWJVUkwmIHJvb3RV
UkwsIGJvb2wgc3luY2hyb25vdXMpCiAgICAgewpAQCAtODAsMTcgKzgwLDEyIEBAIHByaXZhdGU6
CiAKICAgICBQYXNzUmVmUHRyPFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZT4gY3JlYXRlV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShQYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4pOwogCi0gICAgLy8gQ29udmVydHMgYSBnaXZlbiBhYnNvbHV0
ZSB2aXJ0dWFsIHBhdGggdG8gYSBmdWxsIG9yaWdpbi1xdWFsaWZpZWQgRmlsZVN5c3RlbSBVUkwu
Ci0gICAgS1VSTCB2aXJ0dWFsUGF0aFRvRmlsZVN5c3RlbVVSTChjb25zdCBTdHJpbmcmIHZpcnR1
YWxQYXRoKSBjb25zdDsKLQogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKLSAgICBXZWJLaXQ6OldlYkZpbGVTeXN0ZW0qIG1fd2ViRmlsZVN5c3Rl
bTsKICAgICBXZWJLaXQ6OldlYldvcmtlckJhc2UqIG1fd29ya2VyOwogICAgIFdvcmtlckNvbnRl
eHQqIG1fd29ya2VyQ29udGV4dDsKICAgICBSZWZQdHI8V2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlPiBtX2JyaWRnZUZvckN1cnJlbnRPcGVyYXRpb247CiAgICAgU3RyaW5n
IG1fbW9kZUZvckN1cnJlbnRPcGVyYXRpb247CiAgICAgYm9vbCBtX3N5bmNocm9ub3VzOwotICAg
IEtVUkwgbV9maWxlc3lzdGVtUm9vdFVSTDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124650</attachid>
            <date>2012-01-30 18:22:51 -0800</date>
            <delta_ts>2012-01-30 20:17:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76551-20120131112249.patch</filename>
            <type>text/plain</type>
            <size>25734</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQ3ZmRlNDhiNjA3YmQx
MjMxM2E2N2M2Y2E1ZDE0MzEyZmVjNzkwOC4uMTNlYzVkNDc1YzgwNDgxMmRlMWZjNjlkYmYwMmUx
NjI5YmU3YjA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAxLTI5ICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBDbGVhbnVwOiBNb3Zl
IGNocm9tZS1zcGVjaWZpYyBmaWxlc3lzdGVtIHR5cGUgaGFuZGxpbmcgY29kZSAoZm9yIEZpbGVT
eXN0ZW0gQVBJKSB1bmRlciBjaHJvbWl1bSBkaXJlY3RvcnkgKHJlLWxhbmRpbmcgcjEwNTM5NSkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTUxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgdGhl
IGltcGxlbWVudGF0aW9uIG9mIGNyYWNrRmlsZVN5c3RlbVVSTCgpIGFuZCB0b1VSTCgpIGZyb20K
KyAgICAgICAgV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlIGludG8gV2ViQ29yZS9w
bGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0KKyAgICAgICAgc28gdGhhdCBlYWNoIHBsYXRmb3JtIGNh
biBleHRlbmQvaW1wbGVtZW50IHRoZWlyIGJlaGF2aW9yIGlmIG5lY2Vzc2FyeS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgYXMgaXQgaGFzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KKworICAgICAg
ICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwOiBNb3ZlZCBjcmFja0ZpbGVTeXN0ZW1V
UkwoKSB0byBBc3luY0ZpbGVTeXN0ZW0uCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVt
QmFzZS5oOgorICAgICAgICAoRE9NRmlsZVN5c3RlbUJhc2UpOgorICAgICAgICAqIGZpbGVhcGkv
RW50cnlCYXNlLmNwcDogTW92ZWQgdG9VUkwoKSB0byBBc3luY0ZpbGVTeXN0ZW0uCisgICAgICAg
IChXZWJDb3JlOjpFbnRyeUJhc2U6OnRvVVJMKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5j
cHA6IE1hZGUgY29ycmVzcG9uZGluZyBjYWxsc2l0ZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93Ojp3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpET01XaW5kb3c6OndlYmtpdFJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwpOgorICAgICAgICAq
IHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6aXNWYWxpZFR5cGUpOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKEFzeW5j
RmlsZVN5c3RlbSk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDogTWFkZSBj
b3JyZXNwb25kaW5nIGNhbGxzaXRlIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0Ojp3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJDb250ZXh0Ojp3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbVN5bmMpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyQ29udGV4dDo6d2Via2l0UmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojp3ZWJraXRSZXNvbHZlTG9jYWxGaWxlU3lzdGVt
U3luY1VSTCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6CisKIDIwMTItMDEt
MjYgIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KIAogICAg
ICAgICBbUXRdIFdLVFI6IFVzZSBhIHNvZnR3YXJlIHJlbmRlcmluZyBwaXBpbGluZSB3aGVuIHJ1
bm5pbmcgdGVzdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDcwODgwYTQxNmNjMTgx
Nzk3ODRkNjAzYWFkNDFjNDIyNDVhYTYxNWUuLjg2ZDgzMWRhYmFjYTA0ODhkOWZkZjMwY2E1YTg5
MWVhOTFjM2IwN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTItMDEtMjkgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIENsZWFudXA6IE1vdmUgY2hyb21lLXNwZWNpZmljIGZpbGVzeXN0ZW0gdHlwZSBoYW5kbGlu
ZyBjb2RlIChmb3IgRmlsZVN5c3RlbSBBUEkpIHVuZGVyIGNocm9taXVtIGRpcmVjdG9yeSAocmUt
bGFuZGluZyByMTA1Mzk1KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzY1NTEKKworICAgICAgICAqIHNyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcDog
UmVtb3ZlZCB0aGUgbWF0Y2hpbmcgYXNzZXJ0aW9uIGZvciBBc3luY0ZpbGVTeXN0ZW06OkV4dGVy
bmFsIChhcyBub3cgd2UgZGlyZWN0bHkgdXNlIFdlYkZpbGVTeXN0ZW06OlR5cGVFeHRlcm5hbCku
CisgICAgICAgICogc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6Y3JhY2tGaWxlU3lzdGVtVVJMKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW06OmlzVmFsaWRUeXBlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6dG9VUkwpOiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaDoKKyAgICAgICAgKEFzeW5jRmls
ZVN5c3RlbUNocm9taXVtKToKKyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hy
b21pdW0uY3BwOiBNYWRlIHRoaXMgc3ViY2xhc3Mgb2YgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0g
KHJhdGhlciB0aGFuIHRoYXQgb2YgQXN5bmNGaWxlU3lzdGVtKQorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtKToKKyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaDoKKyAg
ICAgICAgKFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKToKKwogMjAxMi0wMS0zMCAgSm9j
aGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IHJlbW92ZSBleGl0IHRpbWUgZGVzdHJ1Y3RvcnMgZnJvbSBUZXh0dXJlTWFuYWdlclRlc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHAKaW5kZXggZWM4ZWY3
MjVhNjEwMzA0OWE2ZDQ0ZDhhZmNjYzM5ZDk1YWFkM2EzNS4uMjEzNWYyYmJjNDIwZTU5YmY3Y2I0
OGM5MTk0OWRhNDAxMDgzMDhlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9E
T01GaWxlU3lzdGVtQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
U3lzdGVtQmFzZS5jcHAKQEAgLTUwLDQzICs1MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY29uc3QgY2hhciBET01GaWxlU3lzdGVtQmFzZTo6a1BlcnNpc3RlbnRQYXRoUHJlZml4W10g
PSAicGVyc2lzdGVudCI7Ci1jb25zdCBzaXplX3QgRE9NRmlsZVN5c3RlbUJhc2U6OmtQZXJzaXN0
ZW50UGF0aFByZWZpeExlbmd0aCA9IHNpemVvZihET01GaWxlU3lzdGVtQmFzZTo6a1BlcnNpc3Rl
bnRQYXRoUHJlZml4KSAtIDE7Ci1jb25zdCBjaGFyIERPTUZpbGVTeXN0ZW1CYXNlOjprVGVtcG9y
YXJ5UGF0aFByZWZpeFtdID0gInRlbXBvcmFyeSI7Ci1jb25zdCBzaXplX3QgRE9NRmlsZVN5c3Rl
bUJhc2U6OmtUZW1wb3JhcnlQYXRoUHJlZml4TGVuZ3RoID0gc2l6ZW9mKERPTUZpbGVTeXN0ZW1C
YXNlOjprVGVtcG9yYXJ5UGF0aFByZWZpeCkgLSAxOwotY29uc3QgY2hhciBET01GaWxlU3lzdGVt
QmFzZTo6a0V4dGVybmFsUGF0aFByZWZpeFtdID0gImV4dGVybmFsIjsKLWNvbnN0IHNpemVfdCBE
T01GaWxlU3lzdGVtQmFzZTo6a0V4dGVybmFsUGF0aFByZWZpeExlbmd0aCA9IHNpemVvZihET01G
aWxlU3lzdGVtQmFzZTo6a0V4dGVybmFsUGF0aFByZWZpeCkgLSAxOwotCi1ib29sIERPTUZpbGVT
eXN0ZW1CYXNlOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29uc3QgS1VSTCYgdXJsLCBBc3luY0ZpbGVT
eXN0ZW06OlR5cGUmIHR5cGUsIFN0cmluZyYgZmlsZVBhdGgpCi17Ci0gICAgaWYgKCF1cmwucHJv
dG9jb2xJcygiZmlsZXN5c3RlbSIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBLVVJM
IG9yaWdpblVSTChQYXJzZWRVUkxTdHJpbmcsIHVybC5wYXRoKCkpOwotICAgIFN0cmluZyBwYXRo
ID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG9yaWdpblVSTC5wYXRoKCkpOwotICAgIGlmIChw
YXRoLmlzRW1wdHkoKSB8fCBwYXRoWzBdICE9ICcvJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTsKLQotICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgo
a1RlbXBvcmFyeVBhdGhQcmVmaXgpKSB7Ci0gICAgICAgIHR5cGUgPSBBc3luY0ZpbGVTeXN0ZW06
OlRlbXBvcmFyeTsKLSAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKGtUZW1wb3JhcnlQYXRo
UHJlZml4TGVuZ3RoKTsKLSAgICB9IGVsc2UgaWYgKHBhdGguc3RhcnRzV2l0aChrUGVyc2lzdGVu
dFBhdGhQcmVmaXgpKSB7Ci0gICAgICAgIHR5cGUgPSBBc3luY0ZpbGVTeXN0ZW06OlBlcnNpc3Rl
bnQ7Ci0gICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhrUGVyc2lzdGVudFBhdGhQcmVmaXhM
ZW5ndGgpOwotICAgIH0gZWxzZSBpZiAocGF0aC5zdGFydHNXaXRoKGtFeHRlcm5hbFBhdGhQcmVm
aXgpKSB7Ci0gICAgICAgIHR5cGUgPSBBc3luY0ZpbGVTeXN0ZW06OkV4dGVybmFsOwotICAgICAg
ICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoa0V4dGVybmFsUGF0aFByZWZpeExlbmd0aCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChwYXRoLmlzRW1wdHkoKSB8
fCBwYXRoWzBdICE9ICcvJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZmlsZVBhdGgu
c3dhcChwYXRoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogRE9NRmlsZVN5c3RlbUJhc2U6OkRP
TUZpbGVTeXN0ZW1CYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGFzeW5jRmlsZVN5c3RlbSkK
ICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9uYW1lKG5hbWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgKaW5kZXggOGJjMGI2NTc5NzdlYWIwZjE5
MDhkZTdhMGRhZDk5NmU4NTAxMjU2NS4uMThhZThkNzZiN2Y5ZWZmNGFhYzU1Njc5MThmNDM2ZGUz
NGZlYTJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVt
QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaApA
QCAtNjIsMTQgKzYyLDYgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5ET01GaWxlU3lz
dGVtQmFzZSgpOwogCi0gICAgc3RhdGljIGNvbnN0IGNoYXIga1BlcnNpc3RlbnRQYXRoUHJlZml4
W107Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrUGVyc2lzdGVudFBhdGhQcmVmaXhMZW5ndGg7
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIga1RlbXBvcmFyeVBhdGhQcmVmaXhbXTsKLSAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGtUZW1wb3JhcnlQYXRoUHJlZml4TGVuZ3RoOwotICAgIHN0YXRpYyBj
b25zdCBjaGFyIGtFeHRlcm5hbFBhdGhQcmVmaXhbXTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGtFeHRlcm5hbFBhdGhQcmVmaXhMZW5ndGg7Ci0gICAgc3RhdGljIGJvb2wgY3JhY2tGaWxlU3lz
dGVtVVJMKGNvbnN0IEtVUkwmLCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUmLCBTdHJpbmcmIGZpbGVQ
YXRoKTsKLQogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQogICAgIEFzeW5jRmlsZVN5c3RlbSogYXN5bmNGaWxlU3lzdGVtKCkgY29uc3QgeyByZXR1cm4g
bV9hc3luY0ZpbGVTeXN0ZW0uZ2V0KCk7IH0KICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlP
cmlnaW4oKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnlC
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnlCYXNlLmNwcAppbmRleCA1M2Y2
MmU3ODNiYWYxNDVmYWNiODRmYmI2YWY1ODlhMTIxNzUyYTM4Li4wYjEyNTRiN2FkZGFkOTk4OWI5
NDlhODhiM2Q5ZTg1NzhhNmQ0NzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0VudHJ5QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeUJhc2UuY3Bw
CkBAIC01NiwyNyArNTYsNyBAQCBFbnRyeUJhc2U6On5FbnRyeUJhc2UoKQogCiBTdHJpbmcgRW50
cnlCYXNlOjp0b1VSTCgpCiB7Ci0gICAgU3RyaW5nIG9yaWdpblN0cmluZyA9IG1fZmlsZVN5c3Rl
bS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsKLSAgICBBU1NFUlQoIW9yaWdpblN0cmlu
Zy5pc0VtcHR5KCkpOwotICAgIGlmIChvcmlnaW5TdHJpbmcgPT0gIm51bGwiKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgcmVzdWx0LmFw
cGVuZCgiZmlsZXN5c3RlbToiKTsKLSAgICByZXN1bHQuYXBwZW5kKG9yaWdpblN0cmluZyk7Ci0g
ICAgcmVzdWx0LmFwcGVuZCgiLyIpOwotICAgIHN3aXRjaCAobV9maWxlU3lzdGVtLT5hc3luY0Zp
bGVTeXN0ZW0oKS0+dHlwZSgpKSB7Ci0gICAgY2FzZSBBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFy
eToKLSAgICAgICAgcmVzdWx0LmFwcGVuZChET01GaWxlU3lzdGVtQmFzZTo6a1RlbXBvcmFyeVBh
dGhQcmVmaXgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFzeW5jRmlsZVN5c3RlbTo6UGVy
c2lzdGVudDoKLSAgICAgICAgcmVzdWx0LmFwcGVuZChET01GaWxlU3lzdGVtQmFzZTo6a1BlcnNp
c3RlbnRQYXRoUHJlZml4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBc3luY0ZpbGVTeXN0
ZW06OkV4dGVybmFsOgotICAgICAgICByZXN1bHQuYXBwZW5kKERPTUZpbGVTeXN0ZW1CYXNlOjpr
RXh0ZXJuYWxQYXRoUHJlZml4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJlc3VsdC5h
cHBlbmQoZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhtX2Z1bGxQYXRoKSk7Ci0gICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOworICAgIHJldHVybiBtX2ZpbGVTeXN0ZW0tPmFzeW5jRmls
ZVN5c3RlbSgpLT50b1VSTChtX2ZpbGVTeXN0ZW0tPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCksIG1fZnVsbFBhdGgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAKaW5kZXggYWZjNjExZjI0OWZiNGZmNzhkN2MyNWQ1YmY2YjlkNGNlZDM5
OTBmZS4uN2EyOGMyYTUwMDcwZjQzY2NlMmEzMzY4Yzc0MDcyYjA0MGMwMzE1OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmNwcApAQCAtMTA1LDcgKzEwNSw2IEBACiAjaWYgRU5BQkxFKEZJTEVf
U1lTVEVNKQogI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkRPTUZpbGVT
eXN0ZW0uaCIKLSNpbmNsdWRlICJET01GaWxlU3lzdGVtQmFzZS5oIgogI2luY2x1ZGUgIkVudHJ5
Q2FsbGJhY2suaCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRmlsZUVy
cm9yLmgiCkBAIC03NzIsNyArNzcxLDcgQEAgdm9pZCBET01XaW5kb3c6OndlYmtpdFJlcXVlc3RG
aWxlU3lzdGVtKGludCB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFzc1JlZlB0cjxGaWwKICAgICB9
CiAKICAgICBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgZmlsZVN5c3RlbVR5cGUgPSBzdGF0aWNfY2Fz
dDxBc3luY0ZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpOwotICAgIGlmIChmaWxlU3lzdGVtVHlwZSAh
PSBBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSAmJiBmaWxlU3lzdGVtVHlwZSAhPSBBc3luY0Zp
bGVTeXN0ZW06OlBlcnNpc3RlbnQgJiYgZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVt
OjpFeHRlcm5hbCkgeworICAgIGlmICghQXN5bmNGaWxlU3lzdGVtOjppc1ZhbGlkVHlwZShmaWxl
U3lzdGVtVHlwZSkpIHsKICAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayhk
b2N1bWVudCwgZXJyb3JDYWxsYmFjaywgRmlsZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpJTlZB
TElEX01PRElGSUNBVElPTl9FUlIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTc5OCw3
ICs3OTcsNyBAQCB2b2lkIERPTVdpbmRvdzo6d2Via2l0UmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVS
TChjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxFbgogCiAgICAgQXN5bmNGaWxlU3lzdGVt
OjpUeXBlIHR5cGU7CiAgICAgU3RyaW5nIGZpbGVQYXRoOwotICAgIGlmICghY29tcGxldGVkVVJM
LmlzVmFsaWQoKSB8fCAhRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTChjb21w
bGV0ZWRVUkwsIHR5cGUsIGZpbGVQYXRoKSkgeworICAgIGlmICghY29tcGxldGVkVVJMLmlzVmFs
aWQoKSB8fCAhQXN5bmNGaWxlU3lzdGVtOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29tcGxldGVkVVJM
LCB0eXBlLCBmaWxlUGF0aCkpIHsKICAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxs
YmFjayhkb2N1bWVudCwgZXJyb3JDYWxsYmFjaywgRmlsZUVycm9yOjpjcmVhdGUoRmlsZUVycm9y
OjpFTkNPRElOR19FUlIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTgwNiw4ICs4MDUs
NiBAQCB2b2lkIERPTVdpbmRvdzo6d2Via2l0UmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChjb25z
dCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxFbgogICAgIExvY2FsRmlsZVN5c3RlbTo6bG9jYWxG
aWxlU3lzdGVtKCkucmVhZEZpbGVTeXN0ZW0oZG9jdW1lbnQsIHR5cGUsIFJlc29sdmVVUklDYWxs
YmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGRvY3VtZW50LCBm
aWxlUGF0aCkpOwogfQogCi1DT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KERPTVdpbmRv
dzo6RVhURVJOQUwpID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lzdGVtOjpFeHRlcm5h
bCksIGVudW1fbWlzbWF0Y2gpOwotCiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KERP
TVdpbmRvdzo6VEVNUE9SQVJZKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6
VGVtcG9yYXJ5KSwgZW51bV9taXNtYXRjaCk7CiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxp
bnQ+KERPTVdpbmRvdzo6UEVSU0lTVEVOVCkgPT0gc3RhdGljX2Nhc3Q8aW50PihBc3luY0ZpbGVT
eXN0ZW06OlBlcnNpc3RlbnQpLCBlbnVtX21pc21hdGNoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmgKaW5kZXggMDkxNmJmZjlkZThiNzMzMTgwZWQ0Mzk3MDk4ZmU2NWMwNmQ0MDlkNS4uMzhlOGM1
ZDczZTI5NGYyYTUxZjdlMjgwNzUyYmFmMDlhMjcwNzkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5oCkBAIC0zNzAsNyArMzcwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBlbnVt
IEZpbGVTeXN0ZW1UeXBlIHsKICAgICAgICAgICAgIFRFTVBPUkFSWSwKICAgICAgICAgICAgIFBF
UlNJU1RFTlQsCi0gICAgICAgICAgICBFWFRFUk5BTCwKICAgICAgICAgfTsKICAgICAgICAgdm9p
ZCB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NS
ZWZQdHI8RmlsZVN5c3RlbUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CiAg
ICAgICAgIHZvaWQgd2Via2l0UmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChjb25zdCBTdHJpbmcm
LCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCmluZGV4IDQwNGFh
YjY3Mzc2ZGUzYjVlYjlkMzY3MmZkMDUyYzBlNjgwODU5YzkuLmMzYzI0MTIyNDBkZjVmYTUyYWFl
YWU4YzA1NTk1NGE4OTZmNWZhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0FzeW5jRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNG
aWxlU3lzdGVtLmNwcApAQCAtMzksNiArMzksMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Citjb25zdCBjaGFyIEFzeW5jRmlsZVN5c3RlbTo6cGVyc2lzdGVudFBhdGhQcmVmaXhbXSA9ICJw
ZXJzaXN0ZW50IjsKK2NvbnN0IHNpemVfdCBBc3luY0ZpbGVTeXN0ZW06OnBlcnNpc3RlbnRQYXRo
UHJlZml4TGVuZ3RoID0gc2l6ZW9mKEFzeW5jRmlsZVN5c3RlbTo6cGVyc2lzdGVudFBhdGhQcmVm
aXgpIC0gMTsKK2NvbnN0IGNoYXIgQXN5bmNGaWxlU3lzdGVtOjp0ZW1wb3JhcnlQYXRoUHJlZml4
W10gPSAidGVtcG9yYXJ5IjsKK2NvbnN0IHNpemVfdCBBc3luY0ZpbGVTeXN0ZW06OnRlbXBvcmFy
eVBhdGhQcmVmaXhMZW5ndGggPSBzaXplb2YoQXN5bmNGaWxlU3lzdGVtOjp0ZW1wb3JhcnlQYXRo
UHJlZml4KSAtIDE7CisKICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiBib29sIEFzeW5jRmlsZVN5
c3RlbTo6aXNBdmFpbGFibGUoKQogewpAQCAtNDYsNiArNTEsMTEgQEAgYm9vbCBBc3luY0ZpbGVT
eXN0ZW06OmlzQXZhaWxhYmxlKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgQXN5bmNG
aWxlU3lzdGVtOjppc1ZhbGlkVHlwZShUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0g
VGVtcG9yYXJ5IHx8IHR5cGUgPT0gUGVyc2lzdGVudDsKK30KKwogUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW0+IEFzeW5jRmlsZVN5c3RlbTo6Y3JlYXRlKFR5cGUsIGNvbnN0IFN0cmluZyYpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0FzeW5jRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxl
U3lzdGVtLmgKaW5kZXggYzJjNjg0NTRmNGNjYjIxOTU2Njk4ZTY5MzUzZjRlZTcxMGIzYjFmMC4u
YmJlZjZhNGUzMTljYmZhOTczYmRjYmEwYTBkZmQ1NjA1Y2E3YjEyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmgKQEAgLTU0LDE0ICs1NCwyNiBAQCBwdWJsaWM6
CiAgICAgZW51bSBUeXBlIHsKICAgICAgICAgVGVtcG9yYXJ5LAogICAgICAgICBQZXJzaXN0ZW50
LAotICAgICAgICBFeHRlcm5hbCwKICAgICB9OwogCisgICAgLy8gUGF0aCBwcmVmaXhlcyB0aGF0
IGFyZSB1c2VkIGluIHRoZSBmaWxlc3lzdGVtIFVSTHMgKHRoYXQgY2FuIGJlIG9idGFpbmVkIGJ5
IHRvVVJMKCkpLgorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2ZpbGUtc3lzdGVtLWFwaS8j
d2lkbC1FbnRyeS10b1VSTAorICAgIHN0YXRpYyBjb25zdCBjaGFyIHBlcnNpc3RlbnRQYXRoUHJl
Zml4W107CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBwZXJzaXN0ZW50UGF0aFByZWZpeExlbmd0
aDsKKyAgICBzdGF0aWMgY29uc3QgY2hhciB0ZW1wb3JhcnlQYXRoUHJlZml4W107CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCB0ZW1wb3JhcnlQYXRoUHJlZml4TGVuZ3RoOworCiAgICAgdmlydHVh
bCB2b2lkIHN0b3AoKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
eyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAKKyAg
ICBzdGF0aWMgYm9vbCBpc1ZhbGlkVHlwZShUeXBlKTsKKworICAgIHN0YXRpYyBib29sIGNyYWNr
RmlsZVN5c3RlbVVSTChjb25zdCBLVVJMJiwgVHlwZSYsIFN0cmluZyYgZmlsZVBhdGgpOworCisg
ICAgdmlydHVhbCBTdHJpbmcgdG9VUkwoY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIGNvbnN0
IFN0cmluZyYgZnVsbFBhdGgpID0gMDsKKwogICAgIC8vIFN1YmNsYXNzIG11c3QgaW1wbGVtZW50
IHRoaXMgaWYgaXQgc3VwcG9ydHMgc3luY2hyb25vdXMgb3BlcmF0aW9ucy4KICAgICAvLyBUaGlz
IHNob3VsZCByZXR1cm4gZmFsc2UgaWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgb3BlcmF0aW9ucy4K
ICAgICB2aXJ0dWFsIGJvb2wgd2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSB7IHJldHVybiBm
YWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKaW5kZXggOGYy
NDMzMGZmMzkwYTcwNzQ1ZDgyYjEwODQ0NjYyODk4MzBhNjFlZC4uZmJlZDM2YjZlMWRjZjM4ZGJk
MmRlYWIxOTgxN2QwOGNlNTc2NzFlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuY3BwCkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBXb3JrZXJDb250ZXh0Ojp3ZWJraXRS
ZXF1ZXN0RmlsZVN5c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQdHIKICAg
ICB9CiAKICAgICBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgZmlsZVN5c3RlbVR5cGUgPSBzdGF0aWNf
Y2FzdDxBc3luY0ZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpOwotICAgIGlmIChmaWxlU3lzdGVtVHlw
ZSAhPSBBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSAmJiBmaWxlU3lzdGVtVHlwZSAhPSBBc3lu
Y0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQgJiYgZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lz
dGVtOjpFeHRlcm5hbCkgeworICAgIGlmICghQXN5bmNGaWxlU3lzdGVtOjppc1ZhbGlkVHlwZShm
aWxlU3lzdGVtVHlwZSkpIHsKICAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFj
ayh0aGlzLCBlcnJvckNhbGxiYWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OklOVkFM
SURfTU9ESUZJQ0FUSU9OX0VSUikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDEyLDcg
KzQxMiw3IEBAIFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbVN5bmM+IFdvcmtlckNvbnRleHQ6Ondl
YmtpdFJlcXVlc3RGaWxlU3lzdGVtU3luYyhpbnQgdHlwCiAgICAgfQogCiAgICAgQXN5bmNGaWxl
U3lzdGVtOjpUeXBlIGZpbGVTeXN0ZW1UeXBlID0gc3RhdGljX2Nhc3Q8QXN5bmNGaWxlU3lzdGVt
OjpUeXBlPih0eXBlKTsKLSAgICBpZiAoZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVt
OjpUZW1wb3JhcnkgJiYgZmlsZVN5c3RlbVR5cGUgIT0gQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0
ZW50ICYmIGZpbGVTeXN0ZW1UeXBlICE9IEFzeW5jRmlsZVN5c3RlbTo6RXh0ZXJuYWwpIHsKKyAg
ICBpZiAoIUFzeW5jRmlsZVN5c3RlbTo6aXNWYWxpZFR5cGUoZmlsZVN5c3RlbVR5cGUpKSB7CiAg
ICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6SU5WQUxJRF9NT0RJRklDQVRJT05fRVJSOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CkBAIC00MzIsNyArNDMyLDcgQEAgdm9pZCBXb3JrZXJDb250
ZXh0Ojp3ZWJraXRSZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBQ
YXNzUmVmUHQKIAogICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlOwogICAgIFN0cmluZyBm
aWxlUGF0aDsKLSAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZpbGVTeXN0
ZW1CYXNlOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29tcGxldGVkVVJMLCB0eXBlLCBmaWxlUGF0aCkp
IHsKKyAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIUFzeW5jRmlsZVN5c3RlbTo6
Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbXBsZXRlZFVSTCwgdHlwZSwgZmlsZVBhdGgpKSB7CiAgICAg
ICAgIERPTUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2sodGhpcywgZXJyb3JDYWxsYmFjaywg
RmlsZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpFTkNPRElOR19FUlIpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTQ1MSw3ICs0NTEsNyBAQCBQYXNzUmVmUHRyPEVudHJ5U3luYz4gV29y
a2VyQ29udGV4dDo6d2Via2l0UmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkwoY29uc3QgUwog
CiAgICAgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGU7CiAgICAgU3RyaW5nIGZpbGVQYXRoOwot
ICAgIGlmICghY29tcGxldGVkVVJMLmlzVmFsaWQoKSB8fCAhRE9NRmlsZVN5c3RlbUJhc2U6OmNy
YWNrRmlsZVN5c3RlbVVSTChjb21wbGV0ZWRVUkwsIHR5cGUsIGZpbGVQYXRoKSkgeworICAgIGlm
ICghY29tcGxldGVkVVJMLmlzVmFsaWQoKSB8fCAhQXN5bmNGaWxlU3lzdGVtOjpjcmFja0ZpbGVT
eXN0ZW1VUkwoY29tcGxldGVkVVJMLCB0eXBlLCBmaWxlUGF0aCkpIHsKICAgICAgICAgZWMgPSBG
aWxlRXhjZXB0aW9uOjpFTkNPRElOR19FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAg
LTQ3MSw3ICs0NzEsNiBAQCBQYXNzUmVmUHRyPEVudHJ5U3luYz4gV29ya2VyQ29udGV4dDo6d2Vi
a2l0UmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkwoY29uc3QgUwogCiBDT01QSUxFX0FTU0VS
VChzdGF0aWNfY2FzdDxpbnQ+KFdvcmtlckNvbnRleHQ6OlRFTVBPUkFSWSkgPT0gc3RhdGljX2Nh
c3Q8aW50PihBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSksIGVudW1fbWlzbWF0Y2gpOwogQ09N
UElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihXb3JrZXJDb250ZXh0OjpQRVJTSVNURU5UKSA9
PSBzdGF0aWNfY2FzdDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudCksIGVudW1fbWlz
bWF0Y2gpOwotQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihXb3JrZXJDb250ZXh0OjpF
WFRFUk5BTCkgPT0gc3RhdGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0ZW06OkV4dGVybmFsKSwg
ZW51bV9taXNtYXRjaCk7CiAjZW5kaWYKIAogV29ya2VyQ29udGV4dDo6T2JzZXJ2ZXI6Ok9ic2Vy
dmVyKFdvcmtlckNvbnRleHQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29u
dGV4dC5oCmluZGV4IDU4NTAzNzQyY2MxMDkzN2FhZDI3MjM1ZjQzNzIxZTRhZTU1YjZkMjMuLjQz
ZDJlMmVjNjFjNDg5OWMxMjFkMDBhYTgyYzA2N2U5NjE2ZWUzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5oCkBAIC0xMzksNyArMTM5LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBlbnVtIEZpbGVTeXN0ZW1UeXBlIHsKICAgICAgICAgICAgIFRFTVBPUkFS
WSwKICAgICAgICAgICAgIFBFUlNJU1RFTlQsCi0gICAgICAgICAgICBFWFRFUk5BTCwKICAgICAg
ICAgfTsKICAgICAgICAgdm9pZCB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShpbnQgdHlwZSwgbG9u
ZyBsb25nIHNpemUsIFBhc3NSZWZQdHI8RmlsZVN5c3RlbUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwogICAgICAgICBQYXNzUmVmUHRyPERPTUZp
bGVTeXN0ZW1TeW5jPiB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbVN5bmMoaW50IHR5cGUsIGxvbmcg
bG9uZyBzaXplLCBFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCmluZGV4IDFmOTFkNTExZmRhZDU5ZGE0MzVj
YTM2OGEyMDNlNzg3ZGJiMTFjYzYuLmE0NTFiODhhNjU2NzBiNDcxNDJjM2RiOWVhYTA2MDAxOTI4
NDgxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNo
aW5nRW51bXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNo
aW5nRW51bXMuY3BwCkBAIC00MzMsNyArNDMzLDYgQEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXZWJJREJLZXk6Ok51bWJlclR5cGUsIElEQktleTo6TnVtYmVyVHlwZSk7CiAjaWYgRU5B
QkxFKEZJTEVfU1lTVEVNKQogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGaWxlU3lz
dGVtOjpUeXBlVGVtcG9yYXJ5LCBBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSk7CiBDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZpbGVTeXN0ZW06OlR5cGVQZXJzaXN0ZW50LCBBc3lu
Y0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQpOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJGaWxlU3lzdGVtOjpUeXBlRXh0ZXJuYWwsIEFzeW5jRmlsZVN5c3RlbTo6RXh0ZXJuYWwpOwog
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGaWxlSW5mbzo6VHlwZVVua25vd24sIEZp
bGVNZXRhZGF0YTo6VHlwZVVua25vd24pOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJGaWxlSW5mbzo6VHlwZUZpbGUsIEZpbGVNZXRhZGF0YTo6VHlwZUZpbGUpOwogQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGaWxlSW5mbzo6VHlwZURpcmVjdG9yeSwgRmlsZU1ldGFk
YXRhOjpUeXBlRGlyZWN0b3J5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAppbmRleCBjNTVjNzFiNzk1MjVjMjNjNTlh
Y2ZjMWZlOTZmNDc1ZDVlZTY5ZjA5Li4yODcxMjgyN2Q1OWU3MmFmNWQ4MWNiMDEzZWY0Y2IzOGM4
YTczMjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJBc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKICNpbmNsdWRlICJBc3luY0ZpbGVXcml0ZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiV2ViRmlsZUluZm8u
aCIKICNpbmNsdWRlICJXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oIgogI2luY2x1ZGUgIldl
YkZpbGVXcml0ZXIuaCIKQEAgLTQxLDE0ICs0Miw1OCBAQAogI2luY2x1ZGUgInBsYXRmb3JtL1dl
YkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIENocm9tZU9TLXNwZWNp
ZmljIGZpbGVzeXN0ZW0gdHlwZS4KK2NvbnN0IEFzeW5jRmlsZVN5c3RlbTo6VHlwZSBleHRlcm5h
bFR5cGUgPSBzdGF0aWNfY2FzdDxBc3luY0ZpbGVTeXN0ZW06OlR5cGU+KFdlYktpdDo6V2ViRmls
ZVN5c3RlbTo6VHlwZUV4dGVybmFsKTsKK2NvbnN0IGNoYXIgZXh0ZXJuYWxQYXRoUHJlZml4W10g
PSAiZXh0ZXJuYWwiOworY29uc3Qgc2l6ZV90IGV4dGVybmFsUGF0aFByZWZpeExlbmd0aCA9IHNp
emVvZihleHRlcm5hbFBhdGhQcmVmaXgpIC0gMTsKKworLy8gc3RhdGljCiBib29sIEFzeW5jRmls
ZVN5c3RlbTo6aXNBdmFpbGFibGUoKQogewogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBzdGF0
aWMKK2Jvb2wgQXN5bmNGaWxlU3lzdGVtOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29uc3QgS1VSTCYg
dXJsLCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUmIHR5cGUsIFN0cmluZyYgZmlsZVBhdGgpCit7Cisg
ICAgaWYgKCF1cmwucHJvdG9jb2xJcygiZmlsZXN5c3RlbSIpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBLVVJMIG9yaWdpblVSTChQYXJzZWRVUkxTdHJpbmcsIHVybC5wYXRoKCkpOwor
ICAgIFN0cmluZyBwYXRoID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG9yaWdpblVSTC5wYXRo
KCkpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSB8fCBwYXRoWzBdICE9ICcvJykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTsKKworICAgIGlmIChw
YXRoLnN0YXJ0c1dpdGgodGVtcG9yYXJ5UGF0aFByZWZpeCkpIHsKKyAgICAgICAgdHlwZSA9IFRl
bXBvcmFyeTsKKyAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKHRlbXBvcmFyeVBhdGhQcmVm
aXhMZW5ndGgpOworICAgIH0gZWxzZSBpZiAocGF0aC5zdGFydHNXaXRoKHBlcnNpc3RlbnRQYXRo
UHJlZml4KSkgeworICAgICAgICB0eXBlID0gUGVyc2lzdGVudDsKKyAgICAgICAgcGF0aCA9IHBh
dGguc3Vic3RyaW5nKHBlcnNpc3RlbnRQYXRoUHJlZml4TGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYg
KHBhdGguc3RhcnRzV2l0aChleHRlcm5hbFBhdGhQcmVmaXgpKSB7CisgICAgICAgIHR5cGUgPSBl
eHRlcm5hbFR5cGU7CisgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhleHRlcm5hbFBhdGhQ
cmVmaXhMZW5ndGgpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAocGF0aC5pc0VtcHR5KCkgfHwgcGF0aFswXSAhPSAnLycpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGZpbGVQYXRoLnN3YXAocGF0aCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8v
IHN0YXRpYworYm9vbCBBc3luY0ZpbGVTeXN0ZW06OmlzVmFsaWRUeXBlKFR5cGUgdHlwZSkKK3sK
KyAgICByZXR1cm4gdHlwZSA9PSBUZW1wb3JhcnkgfHwgdHlwZSA9PSBQZXJzaXN0ZW50IHx8IHR5
cGUgPT0gc3RhdGljX2Nhc3Q8VHlwZT4oV2ViS2l0OjpXZWJGaWxlU3lzdGVtOjpUeXBlRXh0ZXJu
YWwpOworfQorCiBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6QXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0oQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGNvbnN0IEtVUkwmIHJvb3RVUkwpCiAgICAg
OiBBc3luY0ZpbGVTeXN0ZW0odHlwZSkKICAgICAsIG1fd2ViRmlsZVN5c3RlbShXZWJLaXQ6Ondl
YktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlU3lzdGVtKCkpCkBAIC02MSw2ICsxMDYsMjggQEAg
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06On5Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSgpCiB7CiB9
CiAKK1N0cmluZyBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6dG9VUkwoY29uc3QgU3RyaW5nJiBv
cmlnaW5TdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVsbFBhdGgpCit7CisgICAgQVNTRVJUKCFvcmln
aW5TdHJpbmcuaXNFbXB0eSgpKTsKKyAgICBpZiAob3JpZ2luU3RyaW5nID09ICJudWxsIikKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKHR5cGUoKSA9PSBleHRlcm5hbFR5cGUp
IHsKKyAgICAgICAgLy8gRm9yIGV4dGVybmFsIGZpbGVzeXN0ZW0gb3JpZ2luU3RyaW5nIGNvdWxk
IGJlIGRpZmZlcmVudCBmcm9tIHdoYXQgd2UgaGF2ZSBpbiBtX2ZpbGVzeXN0ZW1Sb290VVJMLgor
ICAgICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiZmls
ZXN5c3RlbToiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChvcmlnaW5TdHJpbmcpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKCIvIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZXh0ZXJuYWxQYXRo
UHJlZml4KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVu
Y2VzKGZ1bGxQYXRoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICB9
CisKKyAgICAvLyBGb3IgcmVndWxhciB0eXBlcyB3ZSBjYW4ganVzdCBjYWxsIHZpcnR1YWxQYXRo
VG9GaWxlU3lzdGVtVVJMIHdoaWNoIGFwcGVuZHMgdGhlIGZ1bGxQYXRoIHRvIHRoZSBtX2ZpbGVz
eXN0ZW1Sb290VVJMIHRoYXQgc2hvdWxkIGxvb2sgbGlrZSAnZmlsZXN5c3RlbTo8b3JpZ2luPi88
dHlwZVByZWZpeD4nLgorICAgIEFTU0VSVChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1fZmlsZXN5
c3RlbVJvb3RVUkwpLT50b1N0cmluZygpID09IG9yaWdpblN0cmluZyk7CisgICAgcmV0dXJuIHZp
cnR1YWxQYXRoVG9GaWxlU3lzdGVtVVJMKGZ1bGxQYXRoKTsKK30KKwogdm9pZCBBc3luY0ZpbGVT
eXN0ZW1DaHJvbWl1bTo6bW92ZShjb25zdCBTdHJpbmcmIHNvdXJjZVBhdGgsIGNvbnN0IFN0cmlu
ZyYgZGVzdGluYXRpb25QYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQogewogICAgIG1fd2ViRmlsZVN5c3RlbS0+bW92ZSh2aXJ0dWFsUGF0aFRvRmls
ZVN5c3RlbVVSTChzb3VyY2VQYXRoKSwgdmlydHVhbFBhdGhUb0ZpbGVTeXN0ZW1VUkwoZGVzdGlu
YXRpb25QYXRoKSwgbmV3IFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJh
Y2tzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVT
eXN0ZW1DaHJvbWl1bS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lz
dGVtQ2hyb21pdW0uaAppbmRleCAwYzU1MGI1ZTI1ZWJmZTc0YWYzZjYxYjVmNDk1ZmY2ZDU4OWZh
NzM0Li5hOGNiY2EyNzYwMzQ5NmJhMDViOTJjNTlkN2U2YmQ5Y2NlNzJlNmY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgK
QEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+QXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW0oKTsKIAorICAgIHZpcnR1YWwgU3RyaW5nIHRvVVJMKGNvbnN0IFN0cmluZyYgb3Jp
Z2luU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKTsKICAgICB2aXJ0dWFsIHZvaWQgbW92
ZShjb25zdCBTdHJpbmcmIHNvdXJjZVBhdGgsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25QYXRo
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwogICAgIHZpcnR1YWwgdm9p
ZCBjb3B5KGNvbnN0IFN0cmluZyYgc291cmNlUGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlv
blBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzPik7CkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcmVhZERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPik7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVdyaXRlcihBc3luY0Zp
bGVXcml0ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFz
eW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIEFz
eW5jRmlsZVN5c3RlbUNocm9taXVtKEFzeW5jRmlsZVN5c3RlbTo6VHlwZSwgY29uc3QgS1VSTCYg
cm9vdFVSTCk7CiAgICAgV2ViS2l0OjpXZWJGaWxlU3lzdGVtKiBtX3dlYkZpbGVTeXN0ZW07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5
c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5j
RmlsZVN5c3RlbUNocm9taXVtLmNwcAppbmRleCA2MTU1ZDE1MmE5MDlhZWFmZmRkMmRjZjA2OGE0
YjdmMjYwYmJkZjhhLi43ZmJiMWY0NjgyNTZlYTllZmFiMGI4ZjQ2NzQ3MDJhYWY4OWQ5YzY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCkBAIC01NywxNCArNTcsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogc3RhdGljIGNvbnN0IGNoYXIgZmlsZVN5c3RlbU9wZXJhdGlvbnNNb2RlW10gPSAi
ZmlsZVN5c3RlbU9wZXJhdGlvbnNNb2RlIjsKIAogV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW06OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBXZWJLaXQ6OldlYlVS
TCYgcm9vdFVSTCwgYm9vbCBzeW5jaHJvbm91cykKLSAgICA6IEFzeW5jRmlsZVN5c3RlbSh0eXBl
KQorICAgIDogQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0odHlwZSwgcm9vdFVSTCkKICAgICAsIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQotICAgICwgbV93ZWJGaWxlU3lzdGVtKHdl
YktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlU3lzdGVtKCkpCiAgICAgLCBtX3dvcmtlckNvbnRl
eHQoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpKQogICAgICwgbV9zeW5jaHJv
bm91cyhzeW5jaHJvbm91cykKLSAgICAsIG1fZmlsZXN5c3RlbVJvb3RVUkwocm9vdFVSTCkKIHsK
LSAgICBBU1NFUlQobV93ZWJGaWxlU3lzdGVtKTsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CiAKICAgICBXb3JrZXJMb2FkZXJQcm94eSog
d29ya2VyTG9hZGVyUHJveHkgPSAmbV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9h
ZGVyUHJveHkoKTsKQEAgLTIyMiwxNSArMjE5LDYgQEAgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlPiBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXQK
ICAgICByZXR1cm4gbV9icmlkZ2VGb3JDdXJyZW50T3BlcmF0aW9uOwogfQogCi1LVVJMIFdvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjp2aXJ0dWFsUGF0aFRvRmlsZVN5c3RlbVVSTChjb25z
dCBTdHJpbmcmIHZpcnR1YWxQYXRoKSBjb25zdAotewotICAgIEFTU0VSVCghbV9maWxlc3lzdGVt
Um9vdFVSTC5pc0VtcHR5KCkpOwotICAgIEtVUkwgdXJsID0gbV9maWxlc3lzdGVtUm9vdFVSTDsK
LSAgICAvLyBSZW1vdmUgdGhlIGV4dHJhIGxlYWRpbmcgc2xhc2guCi0gICAgdXJsLnNldFBhdGgo
dXJsLnBhdGgoKSArIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModmlydHVhbFBhdGguc3Vi
c3RyaW5nKDEpKSk7Ci0gICAgcmV0dXJuIHVybDsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKaW5k
ZXggMTNhOGU3Y2I0MGYwMWI3YjdjZGE2Mzg3M2JmMGExYWRhZjdmYzNkMy4uYzhhZTM1NjVmYWQw
OWU3ODY3OWY4ODExNzlkYzRhYmMzMTgzZDExMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCkBAIC0z
Myw3ICszMyw3IEBACiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pICYmIEVOQUJMRShXT1JLRVJT
KQogCi0jaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiQXN5bmNGaWxlU3lz
dGVtQ2hyb21pdW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTEsNyArNTEsNyBA
QCBjbGFzcyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogY2xhc3MgV29ya2VyQ29udGV4dDsKIAotY2xhc3MgV29ya2VyQXN5bmNGaWxlU3lz
dGVtQ2hyb21pdW0gOiBwdWJsaWMgQXN5bmNGaWxlU3lzdGVtIHsKK2NsYXNzIFdvcmtlckFzeW5j
RmlsZVN5c3RlbUNocm9taXVtIDogcHVibGljIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwg
Y29uc3QgV2ViS2l0OjpXZWJVUkwmIHJvb3RVUkwsIGJvb2wgc3luY2hyb25vdXMpCiAgICAgewpA
QCAtODAsMTcgKzgwLDEyIEBAIHByaXZhdGU6CiAKICAgICBQYXNzUmVmUHRyPFdlYktpdDo6V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gY3JlYXRlV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZShQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwogCi0gICAg
Ly8gQ29udmVydHMgYSBnaXZlbiBhYnNvbHV0ZSB2aXJ0dWFsIHBhdGggdG8gYSBmdWxsIG9yaWdp
bi1xdWFsaWZpZWQgRmlsZVN5c3RlbSBVUkwuCi0gICAgS1VSTCB2aXJ0dWFsUGF0aFRvRmlsZVN5
c3RlbVVSTChjb25zdCBTdHJpbmcmIHZpcnR1YWxQYXRoKSBjb25zdDsKLQogICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBXZWJLaXQ6Oldl
YkZpbGVTeXN0ZW0qIG1fd2ViRmlsZVN5c3RlbTsKICAgICBXZWJLaXQ6OldlYldvcmtlckJhc2Uq
IG1fd29ya2VyOwogICAgIFdvcmtlckNvbnRleHQqIG1fd29ya2VyQ29udGV4dDsKICAgICBSZWZQ
dHI8V2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBtX2JyaWRnZUZvckN1
cnJlbnRPcGVyYXRpb247CiAgICAgU3RyaW5nIG1fbW9kZUZvckN1cnJlbnRPcGVyYXRpb247CiAg
ICAgYm9vbCBtX3N5bmNocm9ub3VzOwotICAgIEtVUkwgbV9maWxlc3lzdGVtUm9vdFVSTDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="125963"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>