<?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>138079</bug_id>
          
          <creation_ts>2014-10-25 21:32:23 -0700</creation_ts>
          <short_desc>Use separate HashMaps for common and uncommon headers in HTTPHeaderMap</short_desc>
          <delta_ts>2014-10-28 20:14:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</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>
          <dependson>138164</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>japhet</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1044169</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-25 21:32:23 -0700</bug_when>
    <thetext>Use separate HashMaps for common and uncommon headers in HTTPHeaderMap. The common header map would be a HashMap&lt;HTTPHeaderMap, String&gt; and the uncommon header one would be a HashMap&lt;String, String, CaseFoldingHash&gt;.

There are potential several advantages:
- Creating cross-thread data requires creating less isolated String copies
- Should speed up deserialization for IPC as it will avoid having to call findHTTPHeaderName() for every deserialized header. We will already know if it is a common header or not, and if it is a common header, we will already have a HTTPHeaderName instead of a String
- The hash table performance should be slightly better for common headers due to faster hashing and faster key comparison in case of collision.
- Avoids having to construct String objects from HTTPHeaderMap values for storing.
- Some call sites can benefit from having direct access to common headers, in HTTPHeaderMap type (e.g. CrossOriginAccessControl::isOnAccessControlSimpleRequestHeaderWhitelist(), CachedRawResource::shouldIgnoreHeaderForCacheReuse())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044170</commentid>
    <comment_count>1</comment_count>
      <attachid>240461</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-25 22:07:36 -0700</bug_when>
    <thetext>Created attachment 240461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044240</commentid>
    <comment_count>2</comment_count>
      <attachid>240461</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-27 07:40:19 -0700</bug_when>
    <thetext>Comment on attachment 240461
Patch

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

I really like the direction of this patch; it&apos;s something I wanted to do back when I got rid of the atomic strings.

The problem I see with this patch is that it makes it more complex to iterate headers. I think we still want to be able to iterate all headers and just have the iterator be able to return an enum (if it&apos;s a common header) or a string.

&gt; Source/WTF/wtf/HashTraits.h:93
&gt; +    using UnderLyingType = typename std::underlying_type&lt;T&gt;::type;

UnderLying should be Underlying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044248</commentid>
    <comment_count>3</comment_count>
      <attachid>240483</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-27 09:29:23 -0700</bug_when>
    <thetext>Created attachment 240483
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044269</commentid>
    <comment_count>4</comment_count>
      <attachid>240488</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-27 10:57:18 -0700</bug_when>
    <thetext>Created attachment 240488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044282</commentid>
    <comment_count>5</comment_count>
      <attachid>240488</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-27 11:41:16 -0700</bug_when>
    <thetext>Comment on attachment 240488
Patch

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

&gt; Source/WebCore/platform/network/HTTPHeaderMap.h:50
&gt; +    typedef HashMap&lt;HTTPHeaderName, String, WTF::IntHash&lt;HTTPHeaderName&gt;, WTF::StrongEnumHashTraits&lt;HTTPHeaderName&gt;&gt; CommonHeadersHashMapType;
&gt; +    typedef HashMap&lt;String, String, CaseFoldingHash&gt; UncommonHeadersHashMapType;

I think the &quot;Type&quot; suffix is redundant here.

&gt; Source/WebCore/platform/network/HTTPHeaderMap.h:65
&gt; +            bool keyIsCommonHeader;
&gt; +            HTTPHeaderName keyAsHTTPHeaderName;

Maybe instead of having these two fields, the keyAsHTTPHeaderName could be a WTF::Optional&lt;HTTPHeaderName&gt;? That would make it harder to accidentally read keyAsHTTPHeaderName if it&apos;s not a common header name.

&gt; Source/WebCore/platform/network/HTTPHeaderMap.h:92
&gt; +            return m_commonHeadersIt == other.m_commonHeadersIt &amp;&amp; m_uncommonHeadersIt == other.m_uncommonHeadersIt;

I think you want to check m_table here as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044284</commentid>
    <comment_count>6</comment_count>
      <attachid>240488</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-27 11:47:26 -0700</bug_when>
    <thetext>Comment on attachment 240488
Patch

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

&gt;&gt; Source/WebCore/platform/network/HTTPHeaderMap.h:50
&gt;&gt; +    typedef HashMap&lt;String, String, CaseFoldingHash&gt; UncommonHeadersHashMapType;
&gt; 
&gt; I think the &quot;Type&quot; suffix is redundant here.

Ok, just followed the previous HashMapType scheme but I agree with you.

&gt;&gt; Source/WebCore/platform/network/HTTPHeaderMap.h:65
&gt;&gt; +            HTTPHeaderName keyAsHTTPHeaderName;
&gt; 
&gt; Maybe instead of having these two fields, the keyAsHTTPHeaderName could be a WTF::Optional&lt;HTTPHeaderName&gt;? That would make it harder to accidentally read keyAsHTTPHeaderName if it&apos;s not a common header name.

Ok, I actually did not know about WTF::Optional but I will take a look.

&gt;&gt; Source/WebCore/platform/network/HTTPHeaderMap.h:92
&gt;&gt; +            return m_commonHeadersIt == other.m_commonHeadersIt &amp;&amp; m_uncommonHeadersIt == other.m_uncommonHeadersIt;
&gt; 
&gt; I think you want to check m_table here as well.

Assuming the HashMap iterators already make sure the iterators are for the same HashMap. Isn&apos;t that sufficient? Meaning:
if &quot;CommonHashMap is the same&quot; + if &quot;UncommonHashMap is the same&quot; then &quot;HTTPHeaderMap is the same&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044290</commentid>
    <comment_count>7</comment_count>
      <attachid>240491</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-27 12:18:28 -0700</bug_when>
    <thetext>Created attachment 240491
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044292</commentid>
    <comment_count>8</comment_count>
      <attachid>240488</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-27 12:19:22 -0700</bug_when>
    <thetext>Comment on attachment 240488
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/network/HTTPHeaderMap.h:50
&gt;&gt;&gt; +    typedef HashMap&lt;String, String, CaseFoldingHash&gt; UncommonHeadersHashMapType;
&gt;&gt; 
&gt;&gt; I think the &quot;Type&quot; suffix is redundant here.
&gt; 
&gt; Ok, just followed the previous HashMapType scheme but I agree with you.

Done.

&gt;&gt;&gt; Source/WebCore/platform/network/HTTPHeaderMap.h:65
&gt;&gt;&gt; +            HTTPHeaderName keyAsHTTPHeaderName;
&gt;&gt; 
&gt;&gt; Maybe instead of having these two fields, the keyAsHTTPHeaderName could be a WTF::Optional&lt;HTTPHeaderName&gt;? That would make it harder to accidentally read keyAsHTTPHeaderName if it&apos;s not a common header name.
&gt; 
&gt; Ok, I actually did not know about WTF::Optional but I will take a look.

Done.

&gt;&gt;&gt; Source/WebCore/platform/network/HTTPHeaderMap.h:92
&gt;&gt;&gt; +            return m_commonHeadersIt == other.m_commonHeadersIt &amp;&amp; m_uncommonHeadersIt == other.m_uncommonHeadersIt;
&gt;&gt; 
&gt;&gt; I think you want to check m_table here as well.
&gt; 
&gt; Assuming the HashMap iterators already make sure the iterators are for the same HashMap. Isn&apos;t that sufficient? Meaning:
&gt; if &quot;CommonHashMap is the same&quot; + if &quot;UncommonHashMap is the same&quot; then &quot;HTTPHeaderMap is the same&quot;.

Not done yet as per my comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044294</commentid>
    <comment_count>9</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-27 12:23:36 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Assuming the HashMap iterators already make sure the iterators are for the same HashMap. Isn&apos;t that sufficient? Meaning:
&gt; &gt; if &quot;CommonHashMap is the same&quot; + if &quot;UncommonHashMap is the same&quot; then &quot;HTTPHeaderMap is the same&quot;.
&gt; 
&gt; Not done yet as per my comment.

Makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044295</commentid>
    <comment_count>10</comment_count>
      <attachid>240491</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-27 12:24:34 -0700</bug_when>
    <thetext>Comment on attachment 240491
Patch

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

&gt; Source/WebKit2/Shared/WebCoreArgumentCoders.cpp:471
&gt; +    for (auto&amp; keyValuePair : headerMap.commonHeaders()) {

I think this can be const auto&amp;

&gt; Source/WebKit2/Shared/WebCoreArgumentCoders.cpp:476
&gt; +    for (auto&amp; keyValuePair : headerMap.uncommonHeaders()) {

I think this can be const auto&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044311</commentid>
    <comment_count>11</comment_count>
      <attachid>240497</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-27 13:26:05 -0700</bug_when>
    <thetext>Created attachment 240497
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044332</commentid>
    <comment_count>12</comment_count>
      <attachid>240497</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-27 14:08:47 -0700</bug_when>
    <thetext>Comment on attachment 240497
Patch

Clearing flags on attachment: 240497

Committed r175231: &lt;http://trac.webkit.org/changeset/175231&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044333</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-27 14:08:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240461</attachid>
            <date>2014-10-25 22:07:36 -0700</date>
            <delta_ts>2014-10-27 09:29:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138079-20141025220744.patch</filename>
            <type>text/plain</type>
            <size>31428</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1MjA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDZlZWFhODdkMDUyMzJmOTkxOWJhMzcz
NmM3MGNlNmZkMjgzZTdhOTQuLmEyZWM1NTYyMzA2YmYyNWMyZGZhNzY3NmJjMmQ3NDU1OGQ2YmJh
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMTAtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ugc2VwYXJhdGUgSGFzaE1hcHMgZm9yIGNvbW1vbiBh
bmQgdW5jb21tb24gaGVhZGVycyBpbiBIVFRQSGVhZGVyTWFwCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgwNzkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgSGFzaFRyYWl0cyBmb3IgQysrMTEgc3Ry
b25nIGVudW0gdHlwZXMuIFVzaW5nIGludGVnZXIgSGFzaFRyYWl0cyBmb3IKKyAgICAgICAgc3Ry
b25nIGVudW1zIHdvdWxkIGJlIGluY29udmVuaWVudCBhcyBpdCB3b3VsZCByZXF1aXJlIGNhc3Rp
bmcgYmV0d2VlbgorICAgICAgICBpbnRlZ2VyIGFuZCBzdHJvbmcgZW51bSB0eXBlcy4KKworICAg
ICAgICAqIHd0Zi9IYXNoVHJhaXRzLmg6CisgICAgICAgIChXVEY6OlN0cm9uZ0VudW1IYXNoVHJh
aXRzOjplbXB0eVZhbHVlKToKKyAgICAgICAgKFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM6OmNv
bnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRz
Ojppc0RlbGV0ZWRWYWx1ZSk6CisKIDIwMTQtMTAtMTggIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNz
Lndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHRpbWVsaW5lcyBzaG91
bGQgbm90IGNvdW50IHRpbWUgZWxhcHNlZCB3aGlsZSBwYXVzZWQgaW4gdGhlIGRlYnVnZ2VyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggMDI1NjA1NTEyNGYwZmQ5NTBlZTI5NTY3YmUwY2RmMGNiZjU2YTA1Ny4uMjA4
OTRiZGNhYTkzNTk2YzRiYWVmNWRlYzM0YzMxODljYjg0ZDczNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDg2IEBACisyMDE0LTEwLTI1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIHNlcGFyYXRlIEhhc2hNYXBzIGZvciBjb21tb24gYW5kIHVuY29tbW9uIGhl
YWRlcnMgaW4gSFRUUEhlYWRlck1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM4MDc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIHNlcGFyYXRlIEhhc2hNYXBzIGZvciBjb21tb24gYW5kIHVuY29t
bW9uIGhlYWRlcnMgaW4gSFRUUEhlYWRlck1hcDoKKyAgICAgICAgLSBhIChmYXN0ZXIpIEhhc2hN
YXA8SFRUUEhlYWRlck1hcCwgU3RyaW5nPiBmb3IgY29tbW9uIEhUVFAgaGVhZGVycworICAgICAg
ICAtIGEgSGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBmb3IgdW5jb21t
b24gb25lcworCisgICAgICAgIFRoaXMgYXZvaWRzIGhhdmluZyB0byBjb25zdHJ1Y3QgU3RyaW5n
cyBmcm9tIEhUVFBIZWFkZXJNYXAgdmFsdWVzIGZvcgorICAgICAgICBzdG9yaW5nLiBUaGlzIGFs
c28gbWVhbnMgd2UgaGF2ZSBsZXNzIGlzb2xhdGVkIFN0cmluZyBjb3BpZXMgdG8gZG8gd2hlbgor
ICAgICAgICBjcmVhdGluZyBjcm9zcy10aHJlYWQgZGF0YS4gVGhlIGNvbW1vbiBoZWFkZXJzIEhh
c2hNYXAgc2hvdWxkIGFsc28gYmUKKyAgICAgICAgYSBiaXQgbW9yZSBlZmZpY2llbnQgZHVlIHRv
IGZhc3RlciBoYXNoaW5nIGFuZCBmYXN0ZXIga2V5IGNvbXBhcmlzb24gaW4KKyAgICAgICAgY2Fz
ZSBvZiBjb2xsaXNpb24uCisKKyAgICAgICAgU29tZSBjYWxscyBzaXRlcyBjYW4gYWxzbyBiZW5l
Zml0IGZyb20gaGF2aW5nIGRpcmVjdCBhY2Nlc3MgdG8gY29tbW9uCisgICAgICAgIGhlYWRlcnMg
b2YgdGhlIHJlcXVlc3QgaW4gSFRUUEhlYWRlck5hbWUgdHlwZS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgYSBuZXcgSFRUUEhlYWRlck1hcENvbnN0SXRlcmF0b3IgaXRlcmF0b3IgdHlwZSBm
b3IKKyAgICAgICAgSFRUUEhlYWRlck1hcCBzbyB0aGF0IGNhbGwgc2l0ZXMgdGhhdCBkbyBub3Qg
bmVlZCAvIHdhbnQgdG8gZGlzdGluZ3Vpc2gKKyAgICAgICAgY29tbW9uIC8gdW5jb21tb24gaGVh
ZGVycyBzdGlsbCBkbyBub3QgbmVlZCB0by4gVGhleSBjYW4ga2VlcCB1c2luZworICAgICAgICBt
b2Rlcm4gQysrIGxvb3BzIG92ZXIgSFRUUEhlYWRlck1hcCBvYmplY3RzIGFuZCBnZXQgPFN0cmlu
ZywgU3RyaW5nPgorICAgICAgICBrZXkvdmFsdWUgcGFpcnMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5B
Y2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzT25BY2Nlc3NDb250cm9sU2lt
cGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCk6CisgICAgICAgIENoYW5nZSB0aGUgYXJndW1lbnQg
dHlwZSBmb3IgdGhlIGhlYWRlciBuYW1lIGZyb20gU3RyaW5nIHRvCisgICAgICAgIEhUVFBIZWFk
ZXJOYW1lIGFzIHRoZSBmdW5jdGlvbiBvbmx5IGRlYWxzIHdpdGggY29tbW9uIGhlYWRlci4gVGhp
cworICAgICAgICBtZWFucyB3ZSBjYW4gdXNlIGEgZmFzdGVyIHN3aXRjaCBzdGF0ZW1lbnQgb24g
dGhlIGhlYWRlciBpbnN0ZWFkIG9mCisgICAgICAgIGRvaW5nIHJlcGVhdGVkIGNhc2UtaW5zZW5z
aXRpdmUgc3RyaW5nIGNvbXBhcmlzb25zLgorCisgICAgICAgIChXZWJDb3JlOjppc1NpbXBsZUNy
b3NzT3JpZ2luQWNjZXNzUmVxdWVzdCk6CisgICAgICAgIE9ubHkgaXRlcmF0ZSBvdmVyIHRoZSBj
b21tb24gSFRUUCBoZWFkZXJzIG9mIHRoZSByZXF1ZXN0IGluc3RlYWQgb2YKKyAgICAgICAgYWxs
IGhlYWRlcnMgYXMgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0
KCkgbm93CisgICAgICAgIHRha2VzIGEgSFRUUEhlYWRlck5hbWUgaW4gYXJndW1lbnQsIGdpdmVu
IHRoYXQgb25seSBjb21tb24gaGVhZGVycworICAgICAgICBhcmUgaW4gdGhlIHdoaXRlbGlzdC4g
Rm9yIHVuY29tbW9uIGhlYWRlcnMsIGl0IGlzIHN1ZmZpY2llbnQgdG8gY2hlY2sKKyAgICAgICAg
aWYgdGhlcmUgYXJlIGFueSBiZWNhdXNlICphbnkqIHVuY29tbW9uIEhUVFAgaGVhZGVyIHdvdWxk
IGJlIHRoYXQKKyAgICAgICAgdGhpcyBpcyBub3QgYSBzaW1wbGUgY3Jvc3Mtb3JpZ2luIGFjY2Vz
cyByZXF1ZXN0IGFuZCB3ZSBjYW4gYWJvcnQKKyAgICAgICAgZWFybHkgaW4gdGhhdCBjYXNlLgor
CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oOgorICAgICAgICBI
YXZlIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCgpIHRha2Ug
YQorICAgICAgICBIVFRQSGVhZGVyTmFtZSBpbiBhcmd1bWVudCBpbnN0ZWFkIG9mIGEgU3RyaW5n
IGFzIG9ubHkgY29tbW9uIGhlYWRlcnMKKyAgICAgICAgYXJlIGluIHRoZSB3aGl0ZWxpc3QuCisK
KyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppbkFjY2Vzc0NvbnRyb2xBbGxvd0hlYWRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3Nz
T3JpZ2luSGVhZGVycyk6CisgICAgICAgIFJlZmFjdG9yIHRoZSBjb2RlIGEgbGl0dGxlIGJpdCB0
byBjYWxsCisgICAgICAgIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRl
bGlzdCgpIG9ubHkgZm9yIGNvbW1vbiBIVFRQCisgICAgICAgIGhlYWRlcnMuCisKKyAgICAgICAg
KiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXI6OnJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICBDYWxsIGh0dHBIZWFkZXJGaWVsZHMo
KS5jb21tb25IZWFkZXJzKCkuZmluZCgpIGluc3RlYWQgb2YKKyAgICAgICAgaHR0cEhlYWRlckZp
ZWxkcygpLmZpbmQoKSBhcyB3ZSBhcmUgbG9va2luZyBmb3IgYSBjb21tb24gaGVhZGVyLgorICAg
ICAgICBIVFRQSGVhZGVyTWFwOjpmaW5kKEhUVFBIZWFkZXJOYW1lKSB3YXMgcmVtb3ZlZCBub3cg
dGhhdCB3ZSBoYXZlIGEKKyAgICAgICAgSGFzaE1hcCBkZWRpY2F0ZWQgdG8gY29tbW9uIGhlYWRl
cnMuCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZSk6CisgICAgICAg
IFVwZGF0ZSBhcmd1bWVudCB0eXBlIHRvIGJlIGEgSFRUUEhlYWRlck5hbWUgaW5zdGVhZCBvZiBh
IFN0cmluZyBhcworICAgICAgICBvbmx5IGNvbW1vbiBIVFRQIGhlYWRlcnMgY2FuIGJlIGlnbm9y
ZWQgZm9yIGNhY2hlIHJldXNlLiBUaGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gYWxyZWFkeSBk
ZWFsdCB3aXRoIEhUVFBIZWFkZXJOYW1lIHR5cGUgYW5kIGhhZCB0bworICAgICAgICBjYWxsIGZp
bmRIVFRQSGVhZGVyTmFtZSgpLiBUaGlzIGlzIG5vIGxvbmdlciBuZWVkZWQgbm93IHRoYXQgdGhl
CisgICAgICAgIGNhbGwgc2l0ZSBub3cgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gY29tbW9uIGhlYWRl
cnMgaW4gSFRUUEhlYWRlck5hbWUKKyAgICAgICAgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKToKKyAgICAgICAgLSBPbmx5IGl0ZXJhdGUgb3Zl
ciBjb21tb24gSFRUUCBoZWFkZXJzIGFzIG9ubHkKKyAgICAgICAgICBzaG91bGRJZ25vcmVIZWFk
ZXJGb3JDYWNoZVJldXNlKCkgY2FuIG9ubHkgYmUgdHJ1ZSBmb3IgY29tbW9uIGhlYWRlcnMuCisg
ICAgICAgICAgRm9yIHVuY29tbW9uIGhlYWRlcnMsIGl0IGlzIGVub3VnaCB0byBjaGVjayB0aGF0
IHRoZSAyIEhhc2hNYXBzIGFyZQorICAgICAgICAgIGVxdWFsLgorICAgICAgICAtIFNsaWdodGx5
IG9wdGltaXplIHRoZSBzZWNvbmQgbG9vcCAodGhlIG9uZSBvdmVyIG9sZEhlYWRlck1hcCkgdG8g
b25seQorICAgICAgICAgIGNoZWNrIHRoYXQgdGhlIGtleSBpcyBwcmVzZW50IGluIG5ld0hlYWRl
ck1hcCwgd2l0aG91dCBhY3R1YWxseQorICAgICAgICAgIGNvbXBhcmluZyB0aGUgU3RyaW5nIHZh
bHVlcy4gSWYgdGhlIFN0cmluZyB2YWx1ZXMgd2VyZSBkaWZmZXJlbnQsIHRoZQorICAgICAgICAg
IGZpcnN0IGxvb3Agd291bGQgaGF2ZSBzZWVuIGl0IGFscmVhZHkgYW5kIHdlIHdvdWxkIGhhdmUg
cmV0dXJuZWQKKyAgICAgICAgICBlYXJseS4KKwogMjAxNC0xMC0xOCAgQnJpYW4gSi4gQnVyZyAg
PGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdGltZWxp
bmVzIHNob3VsZCBub3QgY291bnQgdGltZSBlbGFwc2VkIHdoaWxlIHBhdXNlZCBpbiB0aGUgZGVi
dWdnZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCAzZTY2N2U2YmNmZmYzZmE4MDJhYjAwZDAwN2EzNGZlYjAyZDdk
Nzk0Li5jMWM5YTcwZjJmYTUxZjMyYzA0ZjE1ZjI2NzI3MTg3NjhkOGM0YjZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjUgQEAKKzIwMTQtMTAtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KKworICAgICAgICBVc2Ugc2VwYXJhdGUgSGFzaE1hcHMgZm9yIGNvbW1vbiBhbmQgdW5j
b21tb24gaGVhZGVycyBpbiBIVFRQSGVhZGVyTWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgwNzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGhlIFdLMiBJUEMgSFRUUEhlYWRlck1hcCBz
ZXJpYWxpemF0aW9uIC8gZGVzZXJpYWxpemF0aW9uIGNvZGUKKyAgICAgICAgdG8gbGV2ZXJhZ2Ug
dGhlIGZhY3QgdGhhdCBIVFRQSGVhZGVyTWFwIG5vdyBzdG9yZXMgY29tbW9uIEhUVFAgaGVhZGVy
cworICAgICAgICBhbmQgdW5jb21tb24gb25lIGluIHNlcGFyYXRlIEhhc2hNYXBzLiBUaGlzIHNw
ZWVkcyB1cCBkZXNlcmlhbGl6YXRpb24KKyAgICAgICAgYXMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8g
Y2FsbCBmaW5kSFRUUEhlYWRlck5hbWUoKSBmb3IgZXZlcnkgZGVjb2RlZAorICAgICAgICBoZWFk
ZXIuIFdlIGFscmVhZHkga25vdyBpZiB0aGUgaGVhZGVyIGlzIGEgY29tbW9uIG9uZSBvciBub3Qs
IGFuZCBpZgorICAgICAgICBpdCBpcyB0aGVuIHdlIGFscmVhZHkgaGF2ZSBhIEhUVFBIZWFkZXJO
YW1lIHR5cGUgaW5zdGVhZCBvZiBhIFN0cmluZy4KKworICAgICAgICBJIHNlZSB0aGF0IHdlIHNw
ZW5kIH40MCUgbGVzcyB0aW1lIGluIEhUVFBIZWFkZXJNYXAgZGVjb2Rpbmcgd2hlbgorICAgICAg
ICBsb2FkaW5nIGh0dHA6Ly9mbGlja3IuY29tL2V4cGxvcmUsIHdoaWxlIHRoZSBlbmNvZGluZyB0
YWtlcyBhYm91dAorICAgICAgICB0aGUgc2FtZSBhbW91bnQgb2YgdGltZSBhcyBiZWZvcmUuCisK
KyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQ
Qzo6QXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6ZGVjb2RlKToKKwogMjAxNC0xMC0yNCAgQmVu
amFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGlP
UyBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oIGIvU291cmNl
L1dURi93dGYvSGFzaFRyYWl0cy5oCmluZGV4IDAzNjdhZGNiMTYyMTBlMDdlMjkzMjE1YmM2MmRk
YjZjYmM2ZmE5MzAuLjEwMDM1NjY4NjUzMzIwNTRlNTZhMTAxOTUwMjFjMzgwNGUzZDE0N2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVHJhaXRzLmgKQEAgLTg4LDYgKzg4LDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0cyA6IEdlbmVyaWNIYXNoVHJhaXRzPFQ+
CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoVCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUg
PT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkgLSAxOyB9CiB9OwogCisvLyBDYW4gYmUg
dXNlZCB3aXRoIHN0cm9uZyBlbnVtcywgYWxsb3dzIHplcm8gYXMga2V5LgordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IFN0cm9uZ0VudW1IYXNoVHJhaXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8
VD4geworICAgIHVzaW5nIFVuZGVyTHlpbmdUeXBlID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5n
X3R5cGU8VD46OnR5cGU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9
IGZhbHNlOworICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxU
PihzdGQ6Om51bWVyaWNfbGltaXRzPFVuZGVyTHlpbmdUeXBlPjo6bWF4KCkpOyB9CisgICAgc3Rh
dGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFQmIHNsb3QpIHsgc2xvdCA9IHN0YXRpY19j
YXN0PFQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8VW5kZXJMeWluZ1R5cGU+OjptYXgoKSAtIDEpOyB9
CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoVCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUg
PT0gc3RhdGljX2Nhc3Q8VD4oc3RkOjpudW1lcmljX2xpbWl0czxVbmRlckx5aW5nVHlwZT46Om1h
eCgpIC0gMSk7IH0KK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRz
PFAqPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFAqPiB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZh
bHVlKFAqJiBzbG90KSB7IHNsb3QgPSByZWludGVycHJldF9jYXN0PFAqPigtMSk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KaW5kZXggM2FmNDdlNDVhMTU2ZjFkNmQzNTEyYjk0ZmY1ZTQxOTBmNjU2NDBl
ZS4uMmQwNmY2MzhlNjg4Y2FlM2M3M2EwYTBlMzAwYzU1OTI5MmRlODFmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KQEAgLTg5NCw2ICs4OTQsNyBAQCBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5k
aWNhdG9yN3Nfc3RhdGVFCiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yQzFFTlNf
MjZQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZUVQTlNfOERvY3VtZW50RQogX19aTjdXZWJDb3Jl
MjBVc2VyR2VzdHVyZUluZGljYXRvckQxRXYKIF9fWk43V2ViQ29yZTIwZGVsZXRlRW1wdHlEaXJl
Y3RvcnlFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUyMGh0dHBIZWFkZXJOYW1lU3RyaW5n
RU5TXzE0SFRUUEhlYWRlck5hbWVFCiBfX1pON1dlYkNvcmUyMGxvb2tzTGlrZUFic29sdXRlVVJM
RVA4TlNTdHJpbmcKIF9fWk43V2ViQ29yZTIwbWFrZVJHQkEzMkZyb21GbG9hdHNFZmZmZgogX19a
TjdXZWJDb3JlMjBwcmV2aW91c0xpbmVQb3NpdGlvbkVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRWlO
U18xMkVkaXRhYmxlVHlwZUUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9z
c09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3Jp
Z2luQWNjZXNzQ29udHJvbC5jcHAKaW5kZXggN2U1Nzk5ZDVlN2Q0NTg0YmRhN2UwM2NkMzZiODQ4
YzMwMjliODBiMC4uYWU2MTUyYTQ5YzkxYTE1NmQ0ZGViNjc3Yjc0YmNmYWMyNDRiMzcxMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5j
cHAKQEAgLTQ0LDI0ICs0NCwyNCBAQCBib29sIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVz
dE1ldGhvZFdoaXRlbGlzdChjb25zdCBTdHJpbmcmIG1ldGhvZCkKICAgICByZXR1cm4gbWV0aG9k
ID09ICJHRVQiIHx8IG1ldGhvZCA9PSAiSEVBRCIgfHwgbWV0aG9kID09ICJQT1NUIjsKIH0KIAot
Ym9vbCBpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorYm9vbCBpc09uQWNjZXNzQ29udHJv
bFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoSFRUUEhlYWRlck5hbWUgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgImFjY2Vw
dCIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJhY2NlcHQtbGFuZ3VhZ2Ui
KQotICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiY29udGVudC1sYW5ndWFnZSIp
Ci0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJvcmlnaW4iKQotICAgICAgICB8
fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAicmVmZXJlciIpKQorICAgIHN3aXRjaCAobmFtZSkg
eworICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkFjY2VwdDoKKyAgICBjYXNlIEhUVFBIZWFkZXJO
YW1lOjpBY2NlcHRMYW5ndWFnZToKKyAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGFu
Z3VhZ2U6CisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6T3JpZ2luOgorICAgIGNhc2UgSFRUUEhl
YWRlck5hbWU6OlJlZmVyZXI6CiAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gUHJlZmxp
Z2h0IGlzIHJlcXVpcmVkIGZvciBNSU1FIHR5cGVzIHRoYXQgY2FuIG5vdCBiZSBzZW50IHZpYSBm
b3JtIHN1Ym1pc3Npb24uCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJjb250ZW50
LXR5cGUiKSkgeworICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlOiB7CiAgICAg
ICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUodmFsdWUp
OwogICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJhcHBsaWNhdGlv
bi94LXd3dy1mb3JtLXVybGVuY29kZWQiKQogICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UobWltZVR5cGUsICJtdWx0aXBhcnQvZm9ybS1kYXRhIikKICAgICAgICAgICAgIHx8IGVxdWFs
SWdub3JpbmdDYXNlKG1pbWVUeXBlLCAidGV4dC9wbGFpbiIpOwogICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQog
CiBib29sIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXApCkBAIC02OSw3ICs2OSwxMCBAQCBi
b29sIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBjb25zdCBIVFRQSGVhZGVyTWFwJgogICAgIGlmICghaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVS
ZXF1ZXN0TWV0aG9kV2hpdGVsaXN0KG1ldGhvZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogaGVhZGVyTWFwKSB7CisgICAgaWYgKCFoZWFk
ZXJNYXAudW5jb21tb25IZWFkZXJzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlck1hcC5jb21tb25IZWFkZXJz
KCkpIHsKICAgICAgICAgaWYgKCFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJX
aGl0ZWxpc3QoaGVhZGVyLmtleSwgaGVhZGVyLnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmln
aW5BY2Nlc3NDb250cm9sLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmgKaW5kZXggZjAzNTRlNTEzMWUyZTlhNzE3Yzk1MmVlMjBkYTM5OGY5NTQ3MTRm
NC4uOTBmOWJlNmJmNTM1ZmQzMWNkNTU1ZGZjMWM0YTEyNDU5NDNiMDdmOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaApAQCAtMzcsMTMg
KzM3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgSGFzaFNldDxTdHJpbmcsIENh
c2VGb2xkaW5nSGFzaD4gSFRUUEhlYWRlclNldDsKIAogY2xhc3MgSFRUUEhlYWRlck1hcDsKK2Vu
dW0gY2xhc3MgSFRUUEhlYWRlck5hbWU7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBS
ZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGJvb2wgaXNTaW1wbGVD
cm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEhUVFBI
ZWFkZXJNYXAmKTsKIGJvb2wgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0TWV0aG9kV2hp
dGVsaXN0KGNvbnN0IFN0cmluZyYpOwotYm9vbCBpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVl
c3RIZWFkZXJXaGl0ZWxpc3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKK2Jvb2wgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KEhU
VFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIGJvb2wgaXNPbkFjY2Vzc0NvbnRy
b2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChjb25zdCBTdHJpbmcmKTsKIAogdm9pZCB1cGRhdGVS
ZXF1ZXN0Rm9yQWNjZXNzQ29udHJvbChSZXNvdXJjZVJlcXVlc3QmLCBTZWN1cml0eU9yaWdpbios
IFN0b3JlZENyZWRlbnRpYWxzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9D
cm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAppbmRleCA1MTZmMTFmMTYyYmVl
YjMwMDJmZDZlZTA4Yzc0YjRkY2E4NTViMDgwLi4yYmY3OWY5NTJhMmIzMGY1MjU1ODQ0ODc3Zjk5
NGMzMzJmZGZlZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmln
aW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Ny
b3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCkBAIC0xMjQsMTMgKzEyNCwyNiBAQCBi
b29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3NDcm9zc09yaWdp
bk1ldGhvZChjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgaW5s
aW5lIGJvb2wgaW5BY2Nlc3NDb250cm9sQWxsb3dIZWFkZXJzKGNvbnN0IEhhc2hTZXQ8U3RyaW5n
LCBDYXNlRm9sZGluZ0hhc2g+JiBhbGxvd2VkSGVhZGVycywgY29uc3QgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIGVycm9yRGVzY3JpcHRpb24pCit7CisgICAgaWYgKCFhbGxvd2VkSGVhZGVycy5jb250
YWlucyhuYW1lKSkgeworICAgICAgICBlcnJvckRlc2NyaXB0aW9uID0gIlJlcXVlc3QgaGVhZGVy
IGZpZWxkICIgKyBuYW1lICsgIiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxv
dy1IZWFkZXJzLiI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93
c0Nyb3NzT3JpZ2luSGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0SGVhZGVycywg
U3RyaW5nJiBlcnJvckRlc2NyaXB0aW9uKSBjb25zdAogewotICAgIGZvciAoY29uc3QgYXV0byYg
aGVhZGVyIDogcmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29udGFp
bnMoaGVhZGVyLmtleSkgJiYgIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldo
aXRlbGlzdChoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpKSB7Ci0gICAgICAgICAgICBlcnJvckRl
c2NyaXB0aW9uID0gIlJlcXVlc3QgaGVhZGVyIGZpZWxkICIgKyBoZWFkZXIua2V5ICsgIiBpcyBu
b3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzLiI7CisgICAgZm9yIChj
b25zdCBhdXRvJiBoZWFkZXIgOiByZXF1ZXN0SGVhZGVycy51bmNvbW1vbkhlYWRlcnMoKSkgewor
ICAgICAgICBpZiAoIWluQWNjZXNzQ29udHJvbEFsbG93SGVhZGVycyhtX2hlYWRlcnMsIGhlYWRl
ci5rZXksIGVycm9yRGVzY3JpcHRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IHJlcXVlc3RIZWFkZXJzLmNvbW1vbkhl
YWRlcnMoKSkgeworICAgICAgICBpZiAoaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVh
ZGVyV2hpdGVsaXN0KGhlYWRlci5rZXksIGhlYWRlci52YWx1ZSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKCFpbkFjY2Vzc0NvbnRyb2xBbGxvd0hlYWRlcnMobV9oZWFkZXJz
LCAgaHR0cEhlYWRlck5hbWVTdHJpbmcoaGVhZGVyLmtleSkudG9TdHJpbmdXaXRob3V0Q29weWlu
ZygpLCBlcnJvckRlc2NyaXB0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRMb2FkZXIuY3BwCmluZGV4IDZiZTI3NTM4MWU2ZDI2ODJjOTI0MzIzNDg0YWIzZDZlNDU0
YjBiZWEuLjQwYWU1OTQ0ZWJkN2Y1NDdiOTQ1Yzk0YTdkN2QyOWM4YmYxOWFkMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcApAQCAtNjA1LDggKzYwNSw5IEBAIHZv
aWQgRG9jdW1lbnRMb2FkZXI6OnJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlLCBjb25zdCBSZXNvdXJjZVJlCiAgICAgaWYgKHdpbGxMb2FkRmFsbGJhY2spCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gaXQgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZmlu
ZChIVFRQSGVhZGVyTmFtZTo6WEZyYW1lT3B0aW9ucyk7Ci0gICAgaWYgKGl0ICE9IHJlc3BvbnNl
Lmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKSkgeworICAgIGNvbnN0IGF1dG8mIGNvbW1vbkhlYWRl
cnMgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuY29tbW9uSGVhZGVycygpOworICAgIGF1
dG8gaXQgPSBjb21tb25IZWFkZXJzLmZpbmQoSFRUUEhlYWRlck5hbWU6OlhGcmFtZU9wdGlvbnMp
OworICAgIGlmIChpdCAhPSBjb21tb25IZWFkZXJzLmVuZCgpKSB7CiAgICAgICAgIFN0cmluZyBj
b250ZW50ID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQobV9tYWluUmVzb3VyY2UpOwogICAg
ICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91
dFJlc291cmNlTG9hZGVyID8gbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRl
ciA6IG1fbWFpblJlc291cmNlLT5pZGVudGlmaWVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAppbmRleCA5MDU0ZmU3NmE0YmFiODAx
MmJkMTQ3ZDU2MTJhNTdmOGQwNTAzNTA4Li5jN2UwYTIyOTc5N2U5MTRhYTFjY2FmODBkZmEzN2Q2
ZGJjN2RjZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmF3UmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
YXdSZXNvdXJjZS5jcHAKQEAgLTIwMywxMiArMjAzLDggQEAgdm9pZCBDYWNoZWRSYXdSZXNvdXJj
ZTo6c2V0RGF0YUJ1ZmZlcmluZ1BvbGljeShEYXRhQnVmZmVyaW5nUG9saWN5IGRhdGFCdWZmZXJp
bmcKICAgICBtX29wdGlvbnMuc2V0RGF0YUJ1ZmZlcmluZ1BvbGljeShkYXRhQnVmZmVyaW5nUG9s
aWN5KTsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZShj
b25zdCBTdHJpbmcmIGhlYWRlck5hbWUpCitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVIZWFkZXJG
b3JDYWNoZVJldXNlKEhUVFBIZWFkZXJOYW1lIG5hbWUpCiB7Ci0gICAgSFRUUEhlYWRlck5hbWUg
bmFtZTsKLSAgICBpZiAoIWZpbmRIVFRQSGVhZGVyTmFtZShoZWFkZXJOYW1lLCBuYW1lKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgLy8gRklYTUU6
IFRoaXMgbGlzdCBvZiBoZWFkZXJzIHRoYXQgZG9uJ3QgYWZmZWN0IGNhY2hlIHBvbGljeSBhbG1v
c3QgY2VydGFpbmx5IGlzbid0IGNvbXBsZXRlLgogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkFj
Y2VwdDoKQEAgLTI0MiwyMCArMjM4LDIyIEBAIGJvb2wgQ2FjaGVkUmF3UmVzb3VyY2U6OmNhblJl
dXNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkgY29uc3QKICAgICAvLyBOb3Rl
IHRoYXQgdGhlIGxpc3Qgb2YgaWdub3JlZCBoZWFkZXJzIGluY2x1ZGVzIHNvbWUgaGVhZGVycyBl
eHBsaWNpdGx5IHJlbGF0ZWQgdG8gY2FjaGluZy4KICAgICAvLyBBIG1vcmUgZGV0YWlsZWQgY2hl
Y2sgb2YgY2FjaGluZyBwb2xpY3kgd2lsbCBiZSBwZXJmb3JtZWQgbGF0ZXIsIHRoaXMgaXMgc2lt
cGx5IGEgbGlzdCBvZgogICAgIC8vIGhlYWRlcnMgdGhhdCB3ZSBtaWdodCBwZXJtaXQgdG8gYmUg
ZGlmZmVyZW50IGFuZCBzdGlsbCByZXVzZSB0aGUgZXhpc3RpbmcgQ2FjaGVkUmVzb3VyY2UuCi0g
ICAgY29uc3QgSFRUUEhlYWRlck1hcCYgbmV3SGVhZGVycyA9IG5ld1JlcXVlc3QuaHR0cEhlYWRl
ckZpZWxkcygpOwotICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9sZEhlYWRlcnMgPSBtX3Jlc291
cmNlUmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CisgICAgY29uc3QgSFRUUEhlYWRlck1hcCYg
bmV3SGVhZGVyTWFwID0gbmV3UmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CisgICAgY29uc3Qg
SFRUUEhlYWRlck1hcCYgb2xkSGVhZGVyTWFwID0gbV9yZXNvdXJjZVJlcXVlc3QuaHR0cEhlYWRl
ckZpZWxkcygpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBuZXdIZWFkZXJzKSB7
Ci0gICAgICAgIGlmICghc2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZShoZWFkZXIua2V5
KSAmJiBoZWFkZXIudmFsdWUgIT0gb2xkSGVhZGVycy5nZXQoaGVhZGVyLmtleSkpCisgICAgZm9y
IChjb25zdCBhdXRvJiBoZWFkZXIgOiBuZXdIZWFkZXJNYXAuY29tbW9uSGVhZGVycygpKSB7Cisg
ICAgICAgIGlmICghc2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZShoZWFkZXIua2V5KSAm
JiBoZWFkZXIudmFsdWUgIT0gb2xkSGVhZGVyTWFwLmNvbW1vbkhlYWRlcnMoKS5nZXQoaGVhZGVy
LmtleSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChjb25z
dCBhdXRvJiBoZWFkZXIgOiBvbGRIZWFkZXJzKSB7Ci0gICAgICAgIGlmICghc2hvdWxkSWdub3Jl
SGVhZGVyRm9yQ2FjaGVSZXVzZShoZWFkZXIua2V5KSAmJiBoZWFkZXIudmFsdWUgIT0gbmV3SGVh
ZGVycy5nZXQoaGVhZGVyLmtleSkpCisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBvbGRI
ZWFkZXJNYXAuY29tbW9uSGVhZGVycygpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5
IG5lZWQgdG8gY29tcGFyZSB0aGUgdmFsdWVzIGhlcmUsIGNoZWNraW5nIHRoYXQgdGhlIGtleSBp
cyBpbgorICAgICAgICAvLyBuZXdDb21tb25IZWFkZXJzIGlzIHN1ZmZpY2llbnQgZHVlIHRvIHRo
ZSBwcmV2aW91cyBsb29wLgorICAgICAgICBpZiAoIXNob3VsZElnbm9yZUhlYWRlckZvckNhY2hl
UmV1c2UoaGVhZGVyLmtleSkgJiYgIW5ld0hlYWRlck1hcC5jb21tb25IZWFkZXJzKCkuY29udGFp
bnMoaGVhZGVyLmtleSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG5ld0hlYWRlck1hcC51bmNvbW1vbkhlYWRlcnMoKSA9
PSBvbGRIZWFkZXJNYXAudW5jb21tb25IZWFkZXJzKCk7CiB9CiAKIHZvaWQgQ2FjaGVkUmF3UmVz
b3VyY2U6OmNsZWFyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvSFRUUEhlYWRlck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hU
VFBIZWFkZXJNYXAuY3BwCmluZGV4IGIyZjVlMGNkNTFjY2UwYjk0OWY2YWYyOGEwZjgzMjU1ZDBl
NThlZjEuLmYxYTBkYzU0ZGRlOGViNWYyYjU0Y2UzYjdkYWRkZWU4MjgwMmVjY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcApAQCAt
MzEsNyArMzEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJN
YXAuaCIKIAotI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgPHV0aWxpdHk+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCkBAIC00OCw3NSArNDcsODUgQEAg
SFRUUEhlYWRlck1hcDo6fkhUVFBIZWFkZXJNYXAoKQogc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhy
ZWFkSFRUUEhlYWRlck1hcERhdGE+IEhUVFBIZWFkZXJNYXA6OmNvcHlEYXRhKCkgY29uc3QKIHsK
ICAgICBhdXRvIGRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPENyb3NzVGhyZWFkSFRUUEhlYWRlck1h
cERhdGE+KCk7Ci0gICAgZGF0YS0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2hlYWRlcnMuc2l6
ZSgpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogKnRoaXMpCi0gICAgICAgIGRh
dGEtPnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIua2V5Lmlzb2xhdGVkQ29w
eSgpLCBoZWFkZXIudmFsdWUuaXNvbGF0ZWRDb3B5KCkpKTsKKyAgICBkYXRhLT5jb21tb25IZWFk
ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jb21tb25IZWFkZXJzLnNpemUoKSk7CisgICAg
Zm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBtX2NvbW1vbkhlYWRlcnMpCisgICAgICAgIGRhdGEt
PmNvbW1vbkhlYWRlcnMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGhlYWRlci5rZXks
IGhlYWRlci52YWx1ZS5pc29sYXRlZENvcHkoKSkpOworCisgICAgZGF0YS0+dW5jb21tb25IZWFk
ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV91bmNvbW1vbkhlYWRlcnMuc2l6ZSgpKTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IG1fdW5jb21tb25IZWFkZXJzKQorICAgICAgICBk
YXRhLT51bmNvbW1vbkhlYWRlcnMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGhlYWRl
ci5rZXkuaXNvbGF0ZWRDb3B5KCksIGhlYWRlci52YWx1ZS5pc29sYXRlZENvcHkoKSkpOwogCiAg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKIHZvaWQgSFRUUEhlYWRlck1hcDo6YWRvcHQoc3RkOjp1bmlx
dWVfcHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IGRhdGEpCiB7Ci0gICAgbV9oZWFk
ZXJzLmNsZWFyKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGhlYWRlciA6ICpkYXRhKQotICAgICAgICBt
X2hlYWRlcnMuYWRkKFdURjo6bW92ZShoZWFkZXIuZmlyc3QpLCBXVEY6Om1vdmUoaGVhZGVyLnNl
Y29uZCkpOwotfQorICAgIG1fY29tbW9uSGVhZGVycy5jbGVhcigpOworICAgIG1fdW5jb21tb25I
ZWFkZXJzLmNsZWFyKCk7CiAKLXN0YXRpYyBTdHJpbmcgaW50ZXJuSFRUUEhlYWRlck5hbWVTdHJp
bmcoY29uc3QgU3RyaW5nJiBuYW1lU3RyaW5nKQotewotICAgIEhUVFBIZWFkZXJOYW1lIGhlYWRl
ck5hbWU7Ci0gICAgaWYgKCFmaW5kSFRUUEhlYWRlck5hbWUobmFtZVN0cmluZywgaGVhZGVyTmFt
ZSkpCi0gICAgICAgIHJldHVybiBuYW1lU3RyaW5nOworICAgIGZvciAoYXV0byYgaGVhZGVyIDog
ZGF0YS0+Y29tbW9uSGVhZGVycykKKyAgICAgICAgbV9jb21tb25IZWFkZXJzLmFkZChoZWFkZXIu
Zmlyc3QsIFdURjo6bW92ZShoZWFkZXIuc2Vjb25kKSk7CiAKLSAgICByZXR1cm4gaHR0cEhlYWRl
ck5hbWVTdHJpbmcoaGVhZGVyTmFtZSkudG9TdHJpbmdXaXRob3V0Q29weWluZygpOworICAgIGZv
ciAoYXV0byYgaGVhZGVyIDogZGF0YS0+dW5jb21tb25IZWFkZXJzKQorICAgICAgICBtX3VuY29t
bW9uSGVhZGVycy5hZGQoV1RGOjptb3ZlKGhlYWRlci5maXJzdCksIFdURjo6bW92ZShoZWFkZXIu
c2Vjb25kKSk7CiB9CiAKIFN0cmluZyBIVFRQSGVhZGVyTWFwOjpnZXQoY29uc3QgU3RyaW5nJiBu
YW1lKSBjb25zdAogewotICAgIHJldHVybiBtX2hlYWRlcnMuZ2V0KGludGVybkhUVFBIZWFkZXJO
YW1lU3RyaW5nKG5hbWUpKTsKKyAgICBIVFRQSGVhZGVyTmFtZSBoZWFkZXJOYW1lOworICAgIGlm
ICghZmluZEhUVFBIZWFkZXJOYW1lKG5hbWUsIGhlYWRlck5hbWUpKQorICAgICAgICByZXR1cm4g
bV91bmNvbW1vbkhlYWRlcnMuZ2V0KG5hbWUpOworICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnMu
Z2V0KGhlYWRlck5hbWUpOwogfQogCiB2b2lkIEhUVFBIZWFkZXJNYXA6OnNldChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgbV9oZWFkZXJzLnNldChpbnRl
cm5IVFRQSGVhZGVyTmFtZVN0cmluZyhuYW1lKSwgdmFsdWUpOworICAgIEhUVFBIZWFkZXJOYW1l
IGhlYWRlck5hbWU7CisgICAgaWYgKCFmaW5kSFRUUEhlYWRlck5hbWUobmFtZSwgaGVhZGVyTmFt
ZSkpIHsKKyAgICAgICAgbV91bmNvbW1vbkhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbW1vbkhlYWRlcnMuc2V0KGhlYWRlck5hbWUsIHZh
bHVlKTsKIH0KIAogdm9pZCBIVFRQSGVhZGVyTWFwOjphZGQoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9oZWFkZXJzLmFkZChp
bnRlcm5IVFRQSGVhZGVyTmFtZVN0cmluZyhuYW1lKSwgdmFsdWUpOwotICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlICsgIiwgIiArIHZhbHVlOworICAgIEhUVFBIZWFkZXJOYW1lIGhlYWRlck5h
bWU7CisgICAgaWYgKCFmaW5kSFRUUEhlYWRlck5hbWUobmFtZSwgaGVhZGVyTmFtZSkpIHsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSBtX3VuY29tbW9uSGVhZGVycy5hZGQobmFtZSwgdmFsdWUpOwor
ICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKyAiLCAiICsgdmFsdWU7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgYWRkKGhlYWRlck5hbWUsIHZhbHVlKTsKIH0KIAogU3Ry
aW5nIEhUVFBIZWFkZXJNYXA6OmdldChIVFRQSGVhZGVyTmFtZSBuYW1lKSBjb25zdAogewotICAg
IGF1dG8gaXQgPSBmaW5kKG5hbWUpOwotICAgIGlmIChpdCA9PSBlbmQoKSkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICByZXR1cm4gbV9jb21t
b25IZWFkZXJzLmdldChuYW1lKTsKIH0KIAogdm9pZCBIVFRQSGVhZGVyTWFwOjpzZXQoSFRUUEhl
YWRlck5hbWUgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBtX2hlYWRlcnMuc2V0
KGh0dHBIZWFkZXJOYW1lU3RyaW5nKG5hbWUpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdmFs
dWUpOworICAgIG1fY29tbW9uSGVhZGVycy5zZXQobmFtZSwgdmFsdWUpOwogfQogCiBib29sIEhU
VFBIZWFkZXJNYXA6OmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lIG5hbWUpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1faGVhZGVycy5jb250YWlucyhodHRwSGVhZGVyTmFtZVN0cmluZyhuYW1lKS50b1N0
cmluZ1dpdGhvdXRDb3B5aW5nKCkpOworICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnMuY29udGFp
bnMobmFtZSk7CiB9CiAKLUhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIEhUVFBIZWFkZXJN
YXA6OmZpbmQoSFRUUEhlYWRlck5hbWUgbmFtZSkgY29uc3QKK2Jvb2wgSFRUUEhlYWRlck1hcDo6
cmVtb3ZlKEhUVFBIZWFkZXJOYW1lIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1faGVhZGVycy5maW5k
KGh0dHBIZWFkZXJOYW1lU3RyaW5nKG5hbWUpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7Cisg
ICAgcmV0dXJuIG1fY29tbW9uSGVhZGVycy5yZW1vdmUobmFtZSk7CiB9CiAKLWJvb2wgSFRUUEhl
YWRlck1hcDo6cmVtb3ZlKEhUVFBIZWFkZXJOYW1lIG5hbWUpCit2b2lkIEhUVFBIZWFkZXJNYXA6
OmFkZChIVFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHJl
dHVybiBtX2hlYWRlcnMucmVtb3ZlKGh0dHBIZWFkZXJOYW1lU3RyaW5nKG5hbWUpLnRvU3RyaW5n
V2l0aG91dENvcHlpbmcoKSk7CisgICAgYXV0byByZXN1bHQgPSBtX2NvbW1vbkhlYWRlcnMuYWRk
KG5hbWUsIHZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArICIsICIgKyB2YWx1
ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuaAppbmRleCA2ZTEwNTFlMWZkMjg2NmFmYjYwYzk4
OGVhMmQxYWU0ZTEyYzM0NWNkLi5lMjY4NjEyYzYzYmY5NTczZDcyZmVmZGNjYmE3MzJmMWFmMjQ4
YzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFk
ZXJNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJN
YXAuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBIVFRQSGVhZGVyTWFwX2gKICNkZWZpbmUg
SFRUUEhlYWRlck1hcF9oCiAKKyNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRl
IDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtMzYsMTYgKzM3LDgzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBj
bGFzcyBIVFRQSGVhZGVyTmFtZTsKLQotdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywg
U3RyaW5nPj4gQ3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YTsKK3N0cnVjdCBDcm9zc1RocmVh
ZEhUVFBIZWFkZXJNYXBEYXRhIHsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPEhUVFBIZWFkZXJOYW1l
LCBTdHJpbmc+PiBjb21tb25IZWFkZXJzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBT
dHJpbmc+PiB1bmNvbW1vbkhlYWRlcnM7Cit9OwogCiAvLyBGSVhNRTogTm90IGV2ZXJ5IGhlYWRl
ciBmaXRzIGludG8gYSBtYXAuIE5vdGFibHksIG11bHRpcGxlIFNldC1Db29raWUgaGVhZGVyIGZp
ZWxkcyBhcmUgbmVlZGVkIHRvIHNldCBtdWx0aXBsZSBjb29raWVzLgogCiBjbGFzcyBIVFRQSGVh
ZGVyTWFwIHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmcsIENhc2VGb2xkaW5n
SGFzaD4gSGFzaE1hcFR5cGU7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNoTWFwVHlwZTo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBIYXNoTWFwPEhUVFBIZWFk
ZXJOYW1lLCBTdHJpbmcsIFdURjo6SW50SGFzaDxIVFRQSGVhZGVyTmFtZT4sIFdURjo6U3Ryb25n
RW51bUhhc2hUcmFpdHM8SFRUUEhlYWRlck5hbWU+PiBDb21tb25IZWFkZXJzSGFzaE1hcFR5cGU7
CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IFVu
Y29tbW9uSGVhZGVyc0hhc2hNYXBUeXBlOworCisgICAgY2xhc3MgSFRUUEhlYWRlck1hcENvbnN0
SXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgSFRUUEhlYWRlck1hcENvbnN0SXRlcmF0
b3IoY29uc3QgSFRUUEhlYWRlck1hcCYgdGFibGUsIENvbW1vbkhlYWRlcnNIYXNoTWFwVHlwZTo6
Y29uc3RfaXRlcmF0b3IgY29tbW9uSGVhZGVyc0l0LCBVbmNvbW1vbkhlYWRlcnNIYXNoTWFwVHlw
ZTo6Y29uc3RfaXRlcmF0b3IgdW5jb21tb25IZWFkZXJzSXQpCisgICAgICAgICAgICA6IG1fdGFi
bGUodGFibGUpCisgICAgICAgICAgICAsIG1fY29tbW9uSGVhZGVyc0l0KGNvbW1vbkhlYWRlcnNJ
dCkKKyAgICAgICAgICAgICwgbV91bmNvbW1vbkhlYWRlcnNJdCh1bmNvbW1vbkhlYWRlcnNJdCkK
KyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlS2V5VmFsdWUobV9jb21tb25IZWFkZXJzSXQp
OworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEtleVZhbHVlIHsKKyAgICAgICAgICAgIFN0
cmluZyBrZXk7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIH07CisKKyAgICAg
ICAgY29uc3QgS2V5VmFsdWUqIGdldCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVCgqdGhpcyAhPSBtX3RhYmxlLmVuZCgpKTsKKyAgICAgICAgICAgIHJldHVybiAmbV9rZXlW
YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBLZXlWYWx1ZSYgb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gKmdldCgpOyB9CisgICAgICAgIGNvbnN0IEtleVZhbHVlKiBvcGVyYXRvci0+
KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKworICAgICAgICBIVFRQSGVhZGVyTWFwQ29uc3RJ
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2NvbW1v
bkhlYWRlcnNJdCAhPSBtX3RhYmxlLm1fY29tbW9uSGVhZGVycy5lbmQoKSkgeworICAgICAgICAg
ICAgICAgIGlmICh1cGRhdGVLZXlWYWx1ZSgrK21fY29tbW9uSGVhZGVyc0l0KSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgKyttX3VuY29tbW9uSGVhZGVyc0l0OworCisgICAgICAgICAgICB1cGRhdGVLZXlWYWx1
ZShtX3VuY29tbW9uSGVhZGVyc0l0KTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIVFRQSGVhZGVyTWFwQ29uc3RJ
dGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIVFRQSGVhZGVyTWFwQ29uc3RJdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnNJ
dCA9PSBvdGhlci5tX2NvbW1vbkhlYWRlcnNJdCAmJiBtX3VuY29tbW9uSGVhZGVyc0l0ID09IG90
aGVyLm1fdW5jb21tb25IZWFkZXJzSXQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIGJvb2wgdXBkYXRlS2V5VmFsdWUoQ29tbW9uSGVhZGVyc0hhc2hNYXBUeXBlOjpjb25zdF9p
dGVyYXRvciBpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGl0ID09IG1fdGFibGUuY29t
bW9uSGVhZGVycygpLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIG1fa2V5VmFsdWUua2V5ID0gaHR0cEhlYWRlck5hbWVTdHJpbmcoaXQtPmtleSkudG9T
dHJpbmdXaXRob3V0Q29weWluZygpOworICAgICAgICAgICAgbV9rZXlWYWx1ZS52YWx1ZSA9IGl0
LT52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGJv
b2wgdXBkYXRlS2V5VmFsdWUoVW5jb21tb25IZWFkZXJzSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJh
dG9yIGl0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXQgPT0gbV90YWJsZS51bmNvbW1v
bkhlYWRlcnMoKS5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBtX2tleVZhbHVlLmtleSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtX2tleVZhbHVlLnZh
bHVlID0gaXQtPnZhbHVlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtX3RhYmxlOworICAgICAgICBDb21tb25IZWFk
ZXJzSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIG1fY29tbW9uSGVhZGVyc0l0OworICAgICAg
ICBVbmNvbW1vbkhlYWRlcnNIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgbV91bmNvbW1vbkhl
YWRlcnNJdDsKKyAgICAgICAgS2V5VmFsdWUgbV9rZXlWYWx1ZTsKKyAgICB9OworICAgIHR5cGVk
ZWYgSFRUUEhlYWRlck1hcENvbnN0SXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBIVFRQSGVhZGVyTWFwKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkhUVFBIZWFk
ZXJNYXAoKTsKQEAgLTU0LDEwICsxMjIsMTQgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0
cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBjb3B5RGF0YSgpIGNvbnN0OwogICAgIHZv
aWQgYWRvcHQoc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+KTsK
IAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVycy5pc0VtcHR5KCk7
IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVycy5zaXplKCk7IH0KKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NvbW1vbkhlYWRlcnMuaXNFbXB0eSgp
ICYmIG1fdW5jb21tb25IZWFkZXJzLmlzRW1wdHkoKTsgfQorICAgIGludCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9jb21tb25IZWFkZXJzLnNpemUoKSArIG1fdW5jb21tb25IZWFkZXJzLnNpemUo
KTsgfQogCi0gICAgdm9pZCBjbGVhcigpIHsgbV9oZWFkZXJzLmNsZWFyKCk7IH0KKyAgICB2b2lk
IGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fY29tbW9uSGVhZGVycy5jbGVhcigpOworICAgICAg
ICBtX3VuY29tbW9uSGVhZGVycy5jbGVhcigpOworICAgIH0KIAogICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwpAQCAt
NjUsMjMgKzEzNywyNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZ2V0
KEhUVFBIZWFkZXJOYW1lKSBjb25zdDsKICAgICB2b2lkIHNldChIVFRQSGVhZGVyTmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBhZGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpOwogICAgIGJvb2wgY29udGFpbnMoSFRUUEhlYWRlck5hbWUpIGNvbnN0Owot
ICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoSFRUUEhlYWRlck5hbWUpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgcmVtb3ZlKEhUVFBIZWFkZXJOYW1lKTsKIAogICAgIC8vIEluc3RlYWQg
b2YgcGFzc2luZyBhIHN0cmluZyBsaXRlcmFsIHRvIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMsIGp1
c3QgdXNlIGEgSFRUUEhlYWRlck5hbWUgaW5zdGVhZC4KICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVu
Z3RoPiBTdHJpbmcgZ2V0KGNvbnN0IGNoYXIgKCYpW2xlbmd0aF0pIGNvbnN0ID0gZGVsZXRlOwog
ICAgIHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+IHZvaWQgc2V0KGNvbnN0IGNoYXIgKCYpW2xlbmd0
aF0sIGNvbnN0IFN0cmluZyYpID0gZGVsZXRlOwogICAgIHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+
IGJvb2wgY29udGFpbnMoY29uc3QgY2hhciAoJilbbGVuZ3RoXSkgPSBkZWxldGU7Ci0gICAgdGVt
cGxhdGU8c2l6ZV90IGxlbmd0aD4gY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBjaGFyKCYpW2xl
bmd0aF0pID0gZGVsZXRlOwogICAgIHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+IGJvb2wgcmVtb3Zl
KGNvbnN0IGNoYXIgKCYpW2xlbmd0aF0pID0gZGVsZXRlOwogCi0gICAgY29uc3RfaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcnMuYmVnaW4oKTsgfQotICAgIGNvbnN0X2l0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVycy5lbmQoKTsgfQorICAgIGNvbnN0
IENvbW1vbkhlYWRlcnNIYXNoTWFwVHlwZSYgY29tbW9uSGVhZGVycygpIGNvbnN0IHsgcmV0dXJu
IG1fY29tbW9uSGVhZGVyczsgfQorICAgIGNvbnN0IFVuY29tbW9uSGVhZGVyc0hhc2hNYXBUeXBl
JiB1bmNvbW1vbkhlYWRlcnMoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbW9uSGVhZGVyczsgfQor
ICAgIENvbW1vbkhlYWRlcnNIYXNoTWFwVHlwZSYgY29tbW9uSGVhZGVycygpIHsgcmV0dXJuIG1f
Y29tbW9uSGVhZGVyczsgfQorICAgIFVuY29tbW9uSGVhZGVyc0hhc2hNYXBUeXBlJiB1bmNvbW1v
bkhlYWRlcnMoKSB7IHJldHVybiBtX3VuY29tbW9uSGVhZGVyczsgfQorCisgICAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcigqdGhpcywgbV9jb21t
b25IZWFkZXJzLmJlZ2luKCksIG1fdW5jb21tb25IZWFkZXJzLmJlZ2luKCkpOyB9CisgICAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoKnRoaXMsIG1f
Y29tbW9uSGVhZGVycy5lbmQoKSwgbV91bmNvbW1vbkhlYWRlcnMuZW5kKCkpOyB9CiAKICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhUVFBIZWFkZXJNYXAmIGEsIGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIGIpCiAgICAgewotICAgICAgICByZXR1cm4gYS5tX2hlYWRlcnMgPT0gYi5tX2hl
YWRlcnM7CisgICAgICAgIHJldHVybiBhLm1fY29tbW9uSGVhZGVycyA9PSBiLm1fY29tbW9uSGVh
ZGVycyAmJiBhLm1fdW5jb21tb25IZWFkZXJzID09IGIubV91bmNvbW1vbkhlYWRlcnM7CiAgICAg
fQogCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIVFRQSGVhZGVyTWFwJiBhLCBj
b25zdCBIVFRQSGVhZGVyTWFwJiBiKQpAQCAtOTAsMTAgKzE2Niw4IEBAIHB1YmxpYzoKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgLy8gRklYTUU6IEluc3RlYWQgb2YgaGF2aW5nIGEgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4sIHdlIGNvdWxkIGhhdmUgdHdvIGhhc2ggbWFwcywKLSAgICAvLyBvbmUg
SGFzaE1hcDxIVFRQSGVhZGVyTmFtZSwgU3RyaW5nPiBmb3IgY29tbW9uIGhlYWRlcnMgYW5kIGFu
b3RoZXIgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZm9yCi0gICAgLy8gbGVzcyBjb21tb24gaGVh
ZGVycy4KLSAgICBIYXNoTWFwVHlwZSBtX2hlYWRlcnM7CisgICAgQ29tbW9uSGVhZGVyc0hhc2hN
YXBUeXBlIG1fY29tbW9uSGVhZGVyczsKKyAgICBVbmNvbW1vbkhlYWRlcnNIYXNoTWFwVHlwZSBt
X3VuY29tbW9uSGVhZGVyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggYTYwMWNh
ODVkNTA1MjVlNDE4OTA1OGI5MzA4M2E5ZjEzMGRhY2JmNS4uNDYwN2E0ZTU0NDRkYWQ1MDQzMTIz
ZmI0ZDVkMmRhNDBjYTJmYzM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHAKQEAgLTQ2Nyw4ICs0NjcsMTMgQEAgYm9vbCBBcmd1bWVudENv
ZGVyPFBsdWdpbkluZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBQbHVnaW5J
bmZvJiBwbHUKIAogdm9pZCBBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXApCiB7
Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaGVhZGVyTWFwLnNpemUoKSk7
Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBoZWFkZXJNYXApIHsKKyAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihoZWFkZXJNYXAuY29tbW9uSGVhZGVycygpLnNpemUo
KSk7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBoZWFkZXJNYXAuY29tbW9uSGVhZGVy
cygpKSB7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShrZXlWYWx1ZVBhaXIua2V5KTsKKyAg
ICAgICAgZW5jb2RlciA8PCBrZXlWYWx1ZVBhaXIudmFsdWU7CisgICAgfQorICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhlYWRlck1hcC51bmNvbW1vbkhlYWRlcnMoKS5zaXpl
KCkpOworICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogaGVhZGVyTWFwLnVuY29tbW9uSGVh
ZGVycygpKSB7CiAgICAgICAgIGVuY29kZXIgPDwga2V5VmFsdWVQYWlyLmtleTsKICAgICAgICAg
ZW5jb2RlciA8PCBrZXlWYWx1ZVBhaXIudmFsdWU7CiAgICAgfQpAQCAtNDc2LDExICs0ODEsMjcg
QEAgdm9pZCBBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjplbmNvZGUoQXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBIVFRQSGUKIAogYm9vbCBBcmd1bWVudENvZGVyPEhUVFBIZWFk
ZXJNYXA+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBIVFRQSGVhZGVyTWFwJiBo
ZWFkZXJNYXApCiB7Ci0gICAgdWludDY0X3Qgc2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHNpemUpKQorICAgIHVpbnQ2NF90IGNvbW1vbkhlYWRlcnNTaXplOworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoY29tbW9uSGVhZGVyc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbW1vbkhlYWRlcnNTaXplOyArK2kpIHsKKyAgICAg
ICAgSFRUUEhlYWRlck5hbWUgbmFtZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0o
bmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU3RyaW5nIHZhbHVl
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBoZWFkZXJNYXAuY29tbW9uSGVhZGVycygpLmFkZChuYW1lLCB2
YWx1ZSk7CisgICAgfQorCisgICAgdWludDY0X3QgdW5jb21tb25IZWFkZXJzU2l6ZTsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHVuY29tbW9uSGVhZGVyc1NpemUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdW5jb21tb25IZWFkZXJzU2l6ZTsgKytpKSB7CiAgICAgICAg
IFN0cmluZyBuYW1lOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDg5LDcgKzUxMCw3IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxIVFRQSGVhZGVyTWFwPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgSFRUUEhl
YWRlck1hCiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGhlYWRlck1hcC5zZXQobmFtZSwgdmFsdWUpOworICAg
ICAgICBoZWFkZXJNYXAudW5jb21tb25IZWFkZXJzKCkuYWRkKG5hbWUsIHZhbHVlKTsKICAgICB9
CiAKICAgICByZXR1cm4gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240483</attachid>
            <date>2014-10-27 09:29:23 -0700</date>
            <delta_ts>2014-10-27 10:57:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138079-20141027092931.patch</filename>
            <type>text/plain</type>
            <size>29757</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1MjEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk3M2ExOTYxYWE1YTFkOGVjNDA5NDQ1
NjUwOTRlZjQyZGNkOTc1YzIuLmE4MDZhODM5MTg4YTZiNTA5Y2I2ZjdmMjgxZGRlNWQ5MjEzZmEy
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMTAtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ugc2VwYXJhdGUgSGFzaE1hcHMgZm9yIGNvbW1vbiBh
bmQgdW5jb21tb24gaGVhZGVycyBpbiBIVFRQSGVhZGVyTWFwCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgwNzkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgSGFzaFRyYWl0cyBmb3IgQysrMTEgc3Ry
b25nIGVudW0gdHlwZXMuIFVzaW5nIGludGVnZXIgSGFzaFRyYWl0cyBmb3IKKyAgICAgICAgc3Ry
b25nIGVudW1zIHdvdWxkIGJlIGluY29udmVuaWVudCBhcyBpdCB3b3VsZCByZXF1aXJlIGNhc3Rp
bmcgYmV0d2VlbgorICAgICAgICBpbnRlZ2VyIGFuZCBzdHJvbmcgZW51bSB0eXBlcy4KKworICAg
ICAgICAqIHd0Zi9IYXNoVHJhaXRzLmg6CisgICAgICAgIChXVEY6OlN0cm9uZ0VudW1IYXNoVHJh
aXRzOjplbXB0eVZhbHVlKToKKyAgICAgICAgKFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM6OmNv
bnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRz
Ojppc0RlbGV0ZWRWYWx1ZSk6CisKIDIwMTQtMTAtMjUgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNz
Lndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHRpbWVsaW5lcyBzaG91
bGQgbm90IGNvdW50IHRpbWUgZWxhcHNlZCB3aGlsZSBwYXVzZWQgaW4gdGhlIGRlYnVnZ2VyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggNzJiMGI3ZjhiZmE5MTBiNzM1N2FhODI0NmQxOGM4MDBlZTFlM2VjZC4uYTlh
YWFkOWVkNWFiOWI5MDEzNDhlMjM4NDllZTE1MWJhNjE0MjQ3NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDc1IEBACisyMDE0LTEwLTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIHNlcGFyYXRlIEhhc2hNYXBzIGZvciBjb21tb24gYW5kIHVuY29tbW9uIGhl
YWRlcnMgaW4gSFRUUEhlYWRlck1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM4MDc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIHNlcGFyYXRlIEhhc2hNYXBzIGZvciBjb21tb24gYW5kIHVuY29t
bW9uIGhlYWRlcnMgaW4gSFRUUEhlYWRlck1hcDoKKyAgICAgICAgLSBhIChmYXN0ZXIpIEhhc2hN
YXA8SFRUUEhlYWRlck1hcCwgU3RyaW5nPiBmb3IgY29tbW9uIEhUVFAgaGVhZGVycworICAgICAg
ICAtIGEgSGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBmb3IgdW5jb21t
b24gb25lcworCisgICAgICAgIFRoaXMgYXZvaWRzIGhhdmluZyB0byBjb25zdHJ1Y3QgU3RyaW5n
cyBmcm9tIEhUVFBIZWFkZXJNYXAgdmFsdWVzIGZvcgorICAgICAgICBzdG9yaW5nLiBUaGlzIGFs
c28gbWVhbnMgd2UgaGF2ZSBsZXNzIGlzb2xhdGVkIFN0cmluZyBjb3BpZXMgdG8gZG8gd2hlbgor
ICAgICAgICBjcmVhdGluZyBjcm9zcy10aHJlYWQgZGF0YS4gVGhlIGNvbW1vbiBoZWFkZXJzIEhh
c2hNYXAgc2hvdWxkIGFsc28gYmUKKyAgICAgICAgYSBiaXQgbW9yZSBlZmZpY2llbnQgZHVlIHRv
IGZhc3RlciBoYXNoaW5nIGFuZCBmYXN0ZXIga2V5IGNvbXBhcmlzb24gaW4KKyAgICAgICAgY2Fz
ZSBvZiBjb2xsaXNpb24uCisKKyAgICAgICAgU29tZSBjYWxscyBzaXRlcyBjYW4gYWxzbyBiZW5l
Zml0IGZyb20gaGF2aW5nIGRpcmVjdCBhY2Nlc3MgdG8gY29tbW9uCisgICAgICAgIGhlYWRlcnMg
b2YgdGhlIHJlcXVlc3QgaW4gSFRUUEhlYWRlck5hbWUgdHlwZS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgYSBuZXcgSFRUUEhlYWRlck1hcENvbnN0SXRlcmF0b3IgaXRlcmF0b3IgdHlwZSBm
b3IKKyAgICAgICAgSFRUUEhlYWRlck1hcCBzbyB0aGF0IGNhbGwgc2l0ZXMgdGhhdCBkbyBub3Qg
bmVlZCAvIHdhbnQgdG8gZGlzdGluZ3Vpc2gKKyAgICAgICAgY29tbW9uIC8gdW5jb21tb24gaGVh
ZGVycyBzdGlsbCBkbyBub3QgbmVlZCB0by4gVGhleSBjYW4ga2VlcCB1c2luZworICAgICAgICBt
b2Rlcm4gQysrIGxvb3BzIG92ZXIgSFRUUEhlYWRlck1hcCBvYmplY3RzIGFuZCBnZXQgPFN0cmlu
ZywgU3RyaW5nPgorICAgICAgICBrZXkvdmFsdWUgcGFpcnMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5B
Y2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzT25BY2Nlc3NDb250cm9sU2lt
cGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCk6CisgICAgICAgIEhhdmUgaXNPbkFjY2Vzc0NvbnRy
b2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KCkgdGFrZSBhCisgICAgICAgIEhUVFBIZWFk
ZXJOYW1lIGluIGFyZ3VtZW50IGluc3RlYWQgb2YgYSBTdHJpbmcgYXMgb25seSBjb21tb24gaGVh
ZGVycworICAgICAgICBhcmUgaW4gdGhlIHdoaXRlbGlzdC4KKworICAgICAgICAoV2ViQ29yZTo6
aXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QpOgorICAgICAgICBDYWxsIGlzT25BY2Nl
c3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCgpIG9ubHkgZm9yIGNvbW1vbgor
ICAgICAgICBIVFRQIGhlYWRlcnMuCisKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmg6CisgICAgICAgIEhhdmUgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0
SGVhZGVyV2hpdGVsaXN0KCkgdGFrZSBhCisgICAgICAgIEhUVFBIZWFkZXJOYW1lIGluIGFyZ3Vt
ZW50IGluc3RlYWQgb2YgYSBTdHJpbmcgYXMgb25seSBjb21tb24gaGVhZGVycworICAgICAgICBh
cmUgaW4gdGhlIHdoaXRlbGlzdC4KKworICAgICAgICAqIGxvYWRlci9Dcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMpOgorICAgICAgICBD
YWxsIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCgpIG9ubHkg
Zm9yIGNvbW1vbgorICAgICAgICBIVFRQIGhlYWRlcnMuCisKKyAgICAgICAgKiBsb2FkZXIvRG9j
dW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnJlc3Bv
bnNlUmVjZWl2ZWQpOgorICAgICAgICBDYWxsIGh0dHBIZWFkZXJGaWVsZHMoKS5jb21tb25IZWFk
ZXJzKCkuZmluZCgpIGluc3RlYWQgb2YKKyAgICAgICAgaHR0cEhlYWRlckZpZWxkcygpLmZpbmQo
KSBhcyB3ZSBhcmUgbG9va2luZyBmb3IgYSBjb21tb24gaGVhZGVyLgorICAgICAgICBIVFRQSGVh
ZGVyTWFwOjpmaW5kKEhUVFBIZWFkZXJOYW1lKSB3YXMgcmVtb3ZlZCBub3cgdGhhdCB3ZSBoYXZl
IGEKKyAgICAgICAgSGFzaE1hcCBkZWRpY2F0ZWQgdG8gY29tbW9uIGhlYWRlcnMuCisKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZSk6CisgICAgICAgIFVwZGF0ZSBhcmd1
bWVudCB0eXBlIHRvIGJlIGEgSFRUUEhlYWRlck5hbWUgaW5zdGVhZCBvZiBhIFN0cmluZyBhcwor
ICAgICAgICBvbmx5IGNvbW1vbiBIVFRQIGhlYWRlcnMgY2FuIGJlIGlnbm9yZWQgZm9yIGNhY2hl
IHJldXNlLiBUaGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gYWxyZWFkeSBkZWFsdCB3aXRoIEhU
VFBIZWFkZXJOYW1lIHR5cGUgYW5kIGhhZCB0bworICAgICAgICBjYWxsIGZpbmRIVFRQSGVhZGVy
TmFtZSgpLiBUaGlzIGlzIG5vIGxvbmdlciBuZWVkZWQgbm93IHRoYXQgdGhlCisgICAgICAgIGNh
bGwgc2l0ZSBub3cgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gY29tbW9uIGhlYWRlcnMgaW4gSFRUUEhl
YWRlck5hbWUKKyAgICAgICAgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVz
b3VyY2U6OmNhblJldXNlKToKKyAgICAgICAgLSBPbmx5IGNhbGwgc2hvdWxkSWdub3JlSGVhZGVy
Rm9yQ2FjaGVSZXVzZSgpIGZvciBjb21tb24gSFRUUCBoZWFkZXJzLgorICAgICAgICAtIFNsaWdo
dGx5IG9wdGltaXplIHRoZSBzZWNvbmQgbG9vcCAodGhlIG9uZSBvdmVyIG9sZEhlYWRlck1hcCkg
dG8gb25seQorICAgICAgICAgIGNoZWNrIHRoYXQgdGhlIGtleSBpcyBwcmVzZW50IGluIG5ld0hl
YWRlck1hcCwgd2l0aG91dCBhY3R1YWxseQorICAgICAgICAgIGNvbXBhcmluZyB0aGUgU3RyaW5n
IHZhbHVlcy4gSWYgdGhlIFN0cmluZyB2YWx1ZXMgd2VyZSBkaWZmZXJlbnQsIHRoZQorICAgICAg
ICAgIGZpcnN0IGxvb3Agd291bGQgaGF2ZSBzZWVuIGl0IGFscmVhZHkgYW5kIHdlIHdvdWxkIGhh
dmUgcmV0dXJuZWQKKyAgICAgICAgICBlYXJseS4KKwogMjAxNC0xMC0yNiAgQmVuamFtaW4gUG91
bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1hZ2VzIHdpdGggdXNlbWFw
IHNob3VsZCBub3QgaGF2ZSBhIGxpbmsgc3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzZTY2N2U2YmNmZmYz
ZmE4MDJhYjAwZDAwN2EzNGZlYjAyZDdkNzk0Li5jMWM5YTcwZjJmYTUxZjMyYzA0ZjE1ZjI2NzI3
MTg3NjhkOGM0YjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTQtMTAtMjUgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ugc2VwYXJhdGUgSGFz
aE1hcHMgZm9yIGNvbW1vbiBhbmQgdW5jb21tb24gaGVhZGVycyBpbiBIVFRQSGVhZGVyTWFwCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgwNzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGhl
IFdLMiBJUEMgSFRUUEhlYWRlck1hcCBzZXJpYWxpemF0aW9uIC8gZGVzZXJpYWxpemF0aW9uIGNv
ZGUKKyAgICAgICAgdG8gbGV2ZXJhZ2UgdGhlIGZhY3QgdGhhdCBIVFRQSGVhZGVyTWFwIG5vdyBz
dG9yZXMgY29tbW9uIEhUVFAgaGVhZGVycworICAgICAgICBhbmQgdW5jb21tb24gb25lIGluIHNl
cGFyYXRlIEhhc2hNYXBzLiBUaGlzIHNwZWVkcyB1cCBkZXNlcmlhbGl6YXRpb24KKyAgICAgICAg
YXMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gY2FsbCBmaW5kSFRUUEhlYWRlck5hbWUoKSBmb3IgZXZl
cnkgZGVjb2RlZAorICAgICAgICBoZWFkZXIuIFdlIGFscmVhZHkga25vdyBpZiB0aGUgaGVhZGVy
IGlzIGEgY29tbW9uIG9uZSBvciBub3QsIGFuZCBpZgorICAgICAgICBpdCBpcyB0aGVuIHdlIGFs
cmVhZHkgaGF2ZSBhIEhUVFBIZWFkZXJOYW1lIHR5cGUgaW5zdGVhZCBvZiBhIFN0cmluZy4KKwor
ICAgICAgICBJIHNlZSB0aGF0IHdlIHNwZW5kIH40MCUgbGVzcyB0aW1lIGluIEhUVFBIZWFkZXJN
YXAgZGVjb2Rpbmcgd2hlbgorICAgICAgICBsb2FkaW5nIGh0dHA6Ly9mbGlja3IuY29tL2V4cGxv
cmUsIHdoaWxlIHRoZSBlbmNvZGluZyB0YWtlcyBhYm91dAorICAgICAgICB0aGUgc2FtZSBhbW91
bnQgb2YgdGltZSBhcyBiZWZvcmUuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6
ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6ZGVj
b2RlKToKKwogMjAxNC0xMC0yNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNv
bT4KIAogICAgICAgICBGaXggdGhlIGlPUyBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvSGFzaFRyYWl0cy5oIGIvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCmluZGV4IDAzNjdh
ZGNiMTYyMTBlMDdlMjkzMjE1YmM2MmRkYjZjYmM2ZmE5MzAuLmRkMzA3OGUzMjQ1YjJlM2EwNmI2
NzlhMWFlNDdmNGRkNjQ2NzY1ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFp
dHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKQEAgLTg4LDYgKzg4LDE1IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
cyA6IEdlbmVyaWNIYXNoVHJhaXRzPFQ+CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUo
VCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkg
LSAxOyB9CiB9OwogCisvLyBDYW4gYmUgdXNlZCB3aXRoIHN0cm9uZyBlbnVtcywgYWxsb3dzIHpl
cm8gYXMga2V5LgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFN0cm9uZ0VudW1IYXNoVHJh
aXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8VD4geworICAgIHVzaW5nIFVuZGVybHlpbmdUeXBlID0g
dHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8VD46OnR5cGU7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUo
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPihzdGQ6Om51bWVyaWNfbGltaXRzPFVuZGVybHlpbmdU
eXBlPjo6bWF4KCkpOyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFQm
IHNsb3QpIHsgc2xvdCA9IHN0YXRpY19jYXN0PFQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8VW5kZXJs
eWluZ1R5cGU+OjptYXgoKSAtIDEpOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUo
VCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gc3RhdGljX2Nhc3Q8VD4oc3RkOjpudW1lcmljX2xp
bWl0czxVbmRlcmx5aW5nVHlwZT46Om1heCgpIC0gMSk7IH0KK307CisKIHRlbXBsYXRlPHR5cGVu
YW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRzPFAqPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFAqPiB7CiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7CiAgICAgc3RhdGlj
IHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFAqJiBzbG90KSB7IHNsb3QgPSByZWludGVycHJl
dF9jYXN0PFAqPigtMSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggM2FmNDdlNDVhMTU2ZjFk
NmQzNTEyYjk0ZmY1ZTQxOTBmNjU2NDBlZS4uMmQwNmY2MzhlNjg4Y2FlM2M3M2EwYTBlMzAwYzU1
OTI5MmRlODFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTg5NCw2ICs4OTQsNyBAQCBfX1pO
N1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yN3Nfc3RhdGVFCiBfX1pON1dlYkNvcmUyMFVz
ZXJHZXN0dXJlSW5kaWNhdG9yQzFFTlNfMjZQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZUVQTlNf
OERvY3VtZW50RQogX19aTjdXZWJDb3JlMjBVc2VyR2VzdHVyZUluZGljYXRvckQxRXYKIF9fWk43
V2ViQ29yZTIwZGVsZXRlRW1wdHlEaXJlY3RvcnlFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNv
cmUyMGh0dHBIZWFkZXJOYW1lU3RyaW5nRU5TXzE0SFRUUEhlYWRlck5hbWVFCiBfX1pON1dlYkNv
cmUyMGxvb2tzTGlrZUFic29sdXRlVVJMRVA4TlNTdHJpbmcKIF9fWk43V2ViQ29yZTIwbWFrZVJH
QkEzMkZyb21GbG9hdHNFZmZmZgogX19aTjdXZWJDb3JlMjBwcmV2aW91c0xpbmVQb3NpdGlvbkVS
S05TXzE1VmlzaWJsZVBvc2l0aW9uRWlOU18xMkVkaXRhYmxlVHlwZUUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKaW5kZXggN2U1Nzk5
ZDVlN2Q0NTg0YmRhN2UwM2NkMzZiODQ4YzMwMjliODBiMC4uMWM5ZjA3NTM5YmQ0ZTYyMzhlY2Ni
MzNlODEyZGFlMDUyYWQwYjFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Ny
b3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Ny
b3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKQEAgLTQ0LDI0ICs0NCwyNCBAQCBib29sIGlzT25B
Y2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdE1ldGhvZFdoaXRlbGlzdChjb25zdCBTdHJpbmcmIG1l
dGhvZCkKICAgICByZXR1cm4gbWV0aG9kID09ICJHRVQiIHx8IG1ldGhvZCA9PSAiSEVBRCIgfHwg
bWV0aG9kID09ICJQT1NUIjsKIH0KIAotYm9vbCBpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVl
c3RIZWFkZXJXaGl0ZWxpc3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQorYm9vbCBpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoSFRU
UEhlYWRlck5hbWUgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgImFjY2VwdCIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJhY2NlcHQtbGFuZ3VhZ2UiKQotICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiY29udGVudC1sYW5ndWFnZSIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJvcmlnaW4iKQotICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAicmVmZXJl
ciIpKQorICAgIHN3aXRjaCAobmFtZSkgeworICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkFjY2Vw
dDoKKyAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHRMYW5ndWFnZToKKyAgICBjYXNlIEhU
VFBIZWFkZXJOYW1lOjpDb250ZW50TGFuZ3VhZ2U6CisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6
T3JpZ2luOgorICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OlJlZmVyZXI6CiAgICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgLy8gUHJlZmxpZ2h0IGlzIHJlcXVpcmVkIGZvciBNSU1FIHR5cGVzIHRo
YXQgY2FuIG5vdCBiZSBzZW50IHZpYSBmb3JtIHN1Ym1pc3Npb24uCi0gICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJjb250ZW50LXR5cGUiKSkgeworICAgIGNhc2UgSFRUUEhlYWRlck5h
bWU6OkNvbnRlbnRUeXBlOiB7CiAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1F
VHlwZUZyb21NZWRpYVR5cGUodmFsdWUpOwogICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nh
c2UobWltZVR5cGUsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKQogICAgICAg
ICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJtdWx0aXBhcnQvZm9ybS1kYXRh
IikKICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAidGV4dC9wbGFp
biIpOwogICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBib29sIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NS
ZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJN
YXApCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVl
c3QoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEhUVFBIZWFkZXJNYXAmCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogaGVhZGVyTWFwKSB7
Ci0gICAgICAgIGlmICghaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVs
aXN0KGhlYWRlci5rZXksIGhlYWRlci52YWx1ZSkpCisgICAgICAgIGlmICghaGVhZGVyLmtleUlz
Q29tbW9uSGVhZGVyIHx8ICFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0
ZWxpc3QoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUsIGhlYWRlci52YWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgKaW5kZXggZjAzNTRlNTEzMWUyZTlhNzE3Yzk1MmVl
MjBkYTM5OGY5NTQ3MTRmNC4uOTBmOWJlNmJmNTM1ZmQzMWNkNTU1ZGZjMWM0YTEyNDU5NDNiMDdm
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29u
dHJvbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRy
b2wuaApAQCAtMzcsMTMgKzM3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgSGFz
aFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gSFRUUEhlYWRlclNldDsKIAogY2xhc3MgSFRU
UEhlYWRlck1hcDsKK2VudW0gY2xhc3MgSFRUUEhlYWRlck5hbWU7CiBjbGFzcyBSZXNvdXJjZVJl
cXVlc3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAK
IGJvb2wgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBtZXRo
b2QsIGNvbnN0IEhUVFBIZWFkZXJNYXAmKTsKIGJvb2wgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVS
ZXF1ZXN0TWV0aG9kV2hpdGVsaXN0KGNvbnN0IFN0cmluZyYpOwotYm9vbCBpc09uQWNjZXNzQ29u
dHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKK2Jvb2wgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVh
ZGVyV2hpdGVsaXN0KEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIGJvb2wg
aXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChjb25zdCBTdHJpbmcmKTsK
IAogdm9pZCB1cGRhdGVSZXF1ZXN0Rm9yQWNjZXNzQ29udHJvbChSZXNvdXJjZVJlcXVlc3QmLCBT
ZWN1cml0eU9yaWdpbiosIFN0b3JlZENyZWRlbnRpYWxzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAppbmRl
eCA1MTZmMTFmMTYyYmVlYjMwMDJmZDZlZTA4Yzc0YjRkY2E4NTViMDgwLi5jYzBhODVlZjg0MmZk
M2YzMmNiODdkZjk0NWY2Yzk0YWY5M2JhOTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCkBAIC0xMjcs
NyArMTI3LDkgQEAgYm9vbCBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbTo6YWxs
b3dzQ3Jvc3NPcmlnaW5NZXRob2QoY29uc3QgU3RyaW5nJgogYm9vbCBDcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlSXRlbTo6YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIHJlcXVlc3RIZWFkZXJzLCBTdHJpbmcmIGVycm9yRGVzY3JpcHRpb24pIGNvbnN0
CiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiByZXF1ZXN0SGVhZGVycykgewotICAg
ICAgICBpZiAoIW1faGVhZGVycy5jb250YWlucyhoZWFkZXIua2V5KSAmJiAhaXNPbkFjY2Vzc0Nv
bnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGhlYWRlci5rZXksIGhlYWRlci52YWx1
ZSkpIHsKKyAgICAgICAgaWYgKGhlYWRlci5rZXlJc0NvbW1vbkhlYWRlciAmJiBpc09uQWNjZXNz
Q29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaGVhZGVyLmtleUFzSFRUUEhlYWRl
ck5hbWUsIGhlYWRlci52YWx1ZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KCFtX2hlYWRlcnMuY29udGFpbnMoaGVhZGVyLmtleSkpIHsKICAgICAgICAgICAgIGVycm9yRGVz
Y3JpcHRpb24gPSAiUmVxdWVzdCBoZWFkZXIgZmllbGQgIiArIGhlYWRlci5rZXkgKyAiIGlzIG5v
dCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMuIjsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKaW5kZXggNmJlMjc1MzgxZTZkMjY4MmM5MjQzMjM0ODRhYjNkNmU0NTRiMGJlYS4u
NDBhZTU5NDRlYmQ3ZjU0N2I5NDVjOTRhN2Q3ZDI5YzhiZjE5YWQzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC02MDUsOCArNjA1LDkgQEAgdm9pZCBEb2N1
bWVudExvYWRlcjo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNv
bnN0IFJlc291cmNlUmUKICAgICBpZiAod2lsbExvYWRGYWxsYmFjaykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBpdCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5maW5kKEhUVFBI
ZWFkZXJOYW1lOjpYRnJhbWVPcHRpb25zKTsKLSAgICBpZiAoaXQgIT0gcmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkcygpLmVuZCgpKSB7CisgICAgY29uc3QgYXV0byYgY29tbW9uSGVhZGVycyA9IHJl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5jb21tb25IZWFkZXJzKCk7CisgICAgYXV0byBpdCA9
IGNvbW1vbkhlYWRlcnMuZmluZChIVFRQSGVhZGVyTmFtZTo6WEZyYW1lT3B0aW9ucyk7CisgICAg
aWYgKGl0ICE9IGNvbW1vbkhlYWRlcnMuZW5kKCkpIHsKICAgICAgICAgU3RyaW5nIGNvbnRlbnQg
PSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChtX21haW5SZXNvdXJjZSk7CiAgICAgICAgIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IG1faWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVzb3Vy
Y2VMb2FkZXIgPyBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyIDogbV9t
YWluUmVzb3VyY2UtPmlkZW50aWZpZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCmluZGV4IDkwNTRmZTc2YTRiYWI4MDEyYmQxNDdk
NTYxMmE1N2Y4ZDA1MDM1MDguLjUwMjFiYWZmMTNiMmZmNDcyOTk4MDc5MGYxNzVlY2VmNDVkZWU2
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291
cmNlLmNwcApAQCAtMjAzLDEyICsyMDMsOCBAQCB2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpzZXRE
YXRhQnVmZmVyaW5nUG9saWN5KERhdGFCdWZmZXJpbmdQb2xpY3kgZGF0YUJ1ZmZlcmluZwogICAg
IG1fb3B0aW9ucy5zZXREYXRhQnVmZmVyaW5nUG9saWN5KGRhdGFCdWZmZXJpbmdQb2xpY3kpOwog
fQogCi1zdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNlKGNvbnN0IFN0
cmluZyYgaGVhZGVyTmFtZSkKK3N0YXRpYyBib29sIHNob3VsZElnbm9yZUhlYWRlckZvckNhY2hl
UmV1c2UoSFRUUEhlYWRlck5hbWUgbmFtZSkKIHsKLSAgICBIVFRQSGVhZGVyTmFtZSBuYW1lOwot
ICAgIGlmICghZmluZEhUVFBIZWFkZXJOYW1lKGhlYWRlck5hbWUsIG5hbWUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAvLyBGSVhNRTogVGhpcyBs
aXN0IG9mIGhlYWRlcnMgdGhhdCBkb24ndCBhZmZlY3QgY2FjaGUgcG9saWN5IGFsbW9zdCBjZXJ0
YWlubHkgaXNuJ3QgY29tcGxldGUuCiAgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6QWNjZXB0OgpA
QCAtMjQ2LDEyICsyNDIsMjIgQEAgYm9vbCBDYWNoZWRSYXdSZXNvdXJjZTo6Y2FuUmV1c2UoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KSBjb25zdAogICAgIGNvbnN0IEhUVFBIZWFk
ZXJNYXAmIG9sZEhlYWRlcnMgPSBtX3Jlc291cmNlUmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7
CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IG5ld0hlYWRlcnMpIHsKLSAgICAgICAg
aWYgKCFzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNlKGhlYWRlci5rZXkpICYmIGhlYWRl
ci52YWx1ZSAhPSBvbGRIZWFkZXJzLmdldChoZWFkZXIua2V5KSkKKyAgICAgICAgaWYgKGhlYWRl
ci5rZXlJc0NvbW1vbkhlYWRlcikgeworICAgICAgICAgICAgaWYgKCFzaG91bGRJZ25vcmVIZWFk
ZXJGb3JDYWNoZVJldXNlKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lKQorICAgICAgICAgICAg
ICAgICYmIGhlYWRlci52YWx1ZSAhPSBvbGRIZWFkZXJzLmNvbW1vbkhlYWRlcnMoKS5nZXQoaGVh
ZGVyLmtleUFzSFRUUEhlYWRlck5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfSBlbHNlIGlmIChoZWFkZXIudmFsdWUgIT0gb2xkSGVhZGVycy51bmNvbW1vbkhl
YWRlcnMoKS5nZXQoaGVhZGVyLmtleSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCisgICAgLy8gRm9yIHRoaXMgc2Vjb25kIGxvb3AsIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQg
dG8gY29tcGFyZSB2YWx1ZXMsIGNoZWNraW5nIHRoYXQgdGhlCisgICAgLy8ga2V5IGlzIGNvbnRh
aW5lZCBpbiBuZXdIZWFkZXJzIGlzIHN1ZmZpY2llbnQgZHVlIHRvIHRoZSBwcmV2aW91cyBsb29w
LgogICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogb2xkSGVhZGVycykgewotICAgICAgICBp
ZiAoIXNob3VsZElnbm9yZUhlYWRlckZvckNhY2hlUmV1c2UoaGVhZGVyLmtleSkgJiYgaGVhZGVy
LnZhbHVlICE9IG5ld0hlYWRlcnMuZ2V0KGhlYWRlci5rZXkpKQorICAgICAgICBpZiAoaGVhZGVy
LmtleUlzQ29tbW9uSGVhZGVyKSB7CisgICAgICAgICAgICBpZiAoIXNob3VsZElnbm9yZUhlYWRl
ckZvckNhY2hlUmV1c2UoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUpCisgICAgICAgICAgICAg
ICAgJiYgIW5ld0hlYWRlcnMuY29tbW9uSGVhZGVycygpLmNvbnRhaW5zKGhlYWRlci5rZXlBc0hU
VFBIZWFkZXJOYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0g
ZWxzZSBpZiAoIW5ld0hlYWRlcnMudW5jb21tb25IZWFkZXJzKCkuY29udGFpbnMoaGVhZGVyLmtl
eSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAppbmRleCBiMmY1ZTBjZDUx
Y2NlMGI5NDlmNmFmMjhhMGY4MzI1NWQwZTU4ZWYxLi5mMWEwZGM1NGRkZThlYjVmMmI1NGNlM2I3
ZGFkZGVlODI4MDJlY2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBIZWFkZXJNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvSFRUUEhlYWRlck1hcC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCiAKLSNpbmNsdWRlICJIVFRQSGVhZGVyTmFt
ZXMuaCIKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcu
aD4KIApAQCAtNDgsNzUgKzQ3LDg1IEBAIEhUVFBIZWFkZXJNYXA6On5IVFRQSGVhZGVyTWFwKCkK
IHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBIVFRQSGVhZGVy
TWFwOjpjb3B5RGF0YSgpIGNvbnN0CiB7CiAgICAgYXV0byBkYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPigpOwotICAgIGRhdGEtPnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobV9oZWFkZXJzLnNpemUoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGhl
YWRlciA6ICp0aGlzKQotICAgICAgICBkYXRhLT51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3Bh
aXIoaGVhZGVyLmtleS5pc29sYXRlZENvcHkoKSwgaGVhZGVyLnZhbHVlLmlzb2xhdGVkQ29weSgp
KSk7CisgICAgZGF0YS0+Y29tbW9uSGVhZGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY29t
bW9uSGVhZGVycy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogbV9jb21t
b25IZWFkZXJzKQorICAgICAgICBkYXRhLT5jb21tb25IZWFkZXJzLnVuY2hlY2tlZEFwcGVuZChz
dGQ6Om1ha2VfcGFpcihoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUuaXNvbGF0ZWRDb3B5KCkpKTsK
KworICAgIGRhdGEtPnVuY29tbW9uSGVhZGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fdW5j
b21tb25IZWFkZXJzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBtX3Vu
Y29tbW9uSGVhZGVycykKKyAgICAgICAgZGF0YS0+dW5jb21tb25IZWFkZXJzLnVuY2hlY2tlZEFw
cGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIua2V5Lmlzb2xhdGVkQ29weSgpLCBoZWFkZXIudmFs
dWUuaXNvbGF0ZWRDb3B5KCkpKTsKIAogICAgIHJldHVybiBkYXRhOwogfQogCiB2b2lkIEhUVFBI
ZWFkZXJNYXA6OmFkb3B0KHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBE
YXRhPiBkYXRhKQogewotICAgIG1faGVhZGVycy5jbGVhcigpOwotCi0gICAgZm9yIChhdXRvJiBo
ZWFkZXIgOiAqZGF0YSkKLSAgICAgICAgbV9oZWFkZXJzLmFkZChXVEY6Om1vdmUoaGVhZGVyLmZp
cnN0KSwgV1RGOjptb3ZlKGhlYWRlci5zZWNvbmQpKTsKLX0KKyAgICBtX2NvbW1vbkhlYWRlcnMu
Y2xlYXIoKTsKKyAgICBtX3VuY29tbW9uSGVhZGVycy5jbGVhcigpOwogCi1zdGF0aWMgU3RyaW5n
IGludGVybkhUVFBIZWFkZXJOYW1lU3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZVN0cmluZykKLXsK
LSAgICBIVFRQSGVhZGVyTmFtZSBoZWFkZXJOYW1lOwotICAgIGlmICghZmluZEhUVFBIZWFkZXJO
YW1lKG5hbWVTdHJpbmcsIGhlYWRlck5hbWUpKQotICAgICAgICByZXR1cm4gbmFtZVN0cmluZzsK
KyAgICBmb3IgKGF1dG8mIGhlYWRlciA6IGRhdGEtPmNvbW1vbkhlYWRlcnMpCisgICAgICAgIG1f
Y29tbW9uSGVhZGVycy5hZGQoaGVhZGVyLmZpcnN0LCBXVEY6Om1vdmUoaGVhZGVyLnNlY29uZCkp
OwogCi0gICAgcmV0dXJuIGh0dHBIZWFkZXJOYW1lU3RyaW5nKGhlYWRlck5hbWUpLnRvU3RyaW5n
V2l0aG91dENvcHlpbmcoKTsKKyAgICBmb3IgKGF1dG8mIGhlYWRlciA6IGRhdGEtPnVuY29tbW9u
SGVhZGVycykKKyAgICAgICAgbV91bmNvbW1vbkhlYWRlcnMuYWRkKFdURjo6bW92ZShoZWFkZXIu
Zmlyc3QpLCBXVEY6Om1vdmUoaGVhZGVyLnNlY29uZCkpOwogfQogCiBTdHJpbmcgSFRUUEhlYWRl
ck1hcDo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9oZWFk
ZXJzLmdldChpbnRlcm5IVFRQSGVhZGVyTmFtZVN0cmluZyhuYW1lKSk7CisgICAgSFRUUEhlYWRl
ck5hbWUgaGVhZGVyTmFtZTsKKyAgICBpZiAoIWZpbmRIVFRQSGVhZGVyTmFtZShuYW1lLCBoZWFk
ZXJOYW1lKSkKKyAgICAgICAgcmV0dXJuIG1fdW5jb21tb25IZWFkZXJzLmdldChuYW1lKTsKKyAg
ICByZXR1cm4gbV9jb21tb25IZWFkZXJzLmdldChoZWFkZXJOYW1lKTsKIH0KIAogdm9pZCBIVFRQ
SGVhZGVyTWFwOjpzZXQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewotICAgIG1faGVhZGVycy5zZXQoaW50ZXJuSFRUUEhlYWRlck5hbWVTdHJpbmcobmFtZSksIHZh
bHVlKTsKKyAgICBIVFRQSGVhZGVyTmFtZSBoZWFkZXJOYW1lOworICAgIGlmICghZmluZEhUVFBI
ZWFkZXJOYW1lKG5hbWUsIGhlYWRlck5hbWUpKSB7CisgICAgICAgIG1fdW5jb21tb25IZWFkZXJz
LnNldChuYW1lLCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb21tb25I
ZWFkZXJzLnNldChoZWFkZXJOYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgSFRUUEhlYWRlck1hcDo6
YWRkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBhdXRv
IHJlc3VsdCA9IG1faGVhZGVycy5hZGQoaW50ZXJuSFRUUEhlYWRlck5hbWVTdHJpbmcobmFtZSks
IHZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArICIsICIgKyB2YWx1ZTsKKyAg
ICBIVFRQSGVhZGVyTmFtZSBoZWFkZXJOYW1lOworICAgIGlmICghZmluZEhUVFBIZWFkZXJOYW1l
KG5hbWUsIGhlYWRlck5hbWUpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV91bmNvbW1vbkhl
YWRlcnMuYWRkKG5hbWUsIHZhbHVlKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
KyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlICsgIiwgIiArIHZhbHVlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkZChoZWFk
ZXJOYW1lLCB2YWx1ZSk7CiB9CiAKIFN0cmluZyBIVFRQSGVhZGVyTWFwOjpnZXQoSFRUUEhlYWRl
ck5hbWUgbmFtZSkgY29uc3QKIHsKLSAgICBhdXRvIGl0ID0gZmluZChuYW1lKTsKLSAgICBpZiAo
aXQgPT0gZW5kKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBpdC0+
dmFsdWU7CisgICAgcmV0dXJuIG1fY29tbW9uSGVhZGVycy5nZXQobmFtZSk7CiB9CiAKIHZvaWQg
SFRUUEhlYWRlck1hcDo6c2V0KEhUVFBIZWFkZXJOYW1lIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7Ci0gICAgbV9oZWFkZXJzLnNldChodHRwSGVhZGVyTmFtZVN0cmluZyhuYW1lKS50b1N0
cmluZ1dpdGhvdXRDb3B5aW5nKCksIHZhbHVlKTsKKyAgICBtX2NvbW1vbkhlYWRlcnMuc2V0KG5h
bWUsIHZhbHVlKTsKIH0KIAogYm9vbCBIVFRQSGVhZGVyTWFwOjpjb250YWlucyhIVFRQSGVhZGVy
TmFtZSBuYW1lKSBjb25zdAogewotICAgIHJldHVybiBtX2hlYWRlcnMuY29udGFpbnMoaHR0cEhl
YWRlck5hbWVTdHJpbmcobmFtZSkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKKyAgICByZXR1
cm4gbV9jb21tb25IZWFkZXJzLmNvbnRhaW5zKG5hbWUpOwogfQogCi1IVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBIVFRQSGVhZGVyTWFwOjpmaW5kKEhUVFBIZWFkZXJOYW1lIG5hbWUpIGNv
bnN0Citib29sIEhUVFBIZWFkZXJNYXA6OnJlbW92ZShIVFRQSGVhZGVyTmFtZSBuYW1lKQogewot
ICAgIHJldHVybiBtX2hlYWRlcnMuZmluZChodHRwSGVhZGVyTmFtZVN0cmluZyhuYW1lKS50b1N0
cmluZ1dpdGhvdXRDb3B5aW5nKCkpOworICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnMucmVtb3Zl
KG5hbWUpOwogfQogCi1ib29sIEhUVFBIZWFkZXJNYXA6OnJlbW92ZShIVFRQSGVhZGVyTmFtZSBu
YW1lKQordm9pZCBIVFRQSGVhZGVyTWFwOjphZGQoSFRUUEhlYWRlck5hbWUgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9oZWFkZXJzLnJlbW92ZShodHRwSGVhZGVy
TmFtZVN0cmluZyhuYW1lKS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpOworICAgIGF1dG8gcmVz
dWx0ID0gbV9jb21tb25IZWFkZXJzLmFkZChuYW1lLCB2YWx1ZSk7CisgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgKyAiLCAiICsgdmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1h
cC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmgKaW5k
ZXggNmUxMDUxZTFmZDI4NjZhZmI2MGM5ODhlYTJkMWFlNGUxMmMzNDVjZC4uNjM2YTNjNjVlZDY0
N2ZlODcyNDVjOTlkNzZhNzRjNDlhMGJkYzVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYg
SFRUUEhlYWRlck1hcF9oCiAjZGVmaW5lIEhUVFBIZWFkZXJNYXBfaAogCisjaW5jbHVkZSAiSFRU
UEhlYWRlck5hbWVzLmgiCiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM2LDE2ICszNyw4OCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gY2xhc3MgSFRUUEhlYWRlck5hbWU7Ci0KLXR5cGVkZWYg
VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IENyb3NzVGhyZWFkSFRUUEhlYWRlck1h
cERhdGE7CitzdHJ1Y3QgQ3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YSB7CisgICAgVmVjdG9y
PHN0ZDo6cGFpcjxIVFRQSGVhZGVyTmFtZSwgU3RyaW5nPj4gY29tbW9uSGVhZGVyczsKKyAgICBW
ZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gdW5jb21tb25IZWFkZXJzOworfTsKIAog
Ly8gRklYTUU6IE5vdCBldmVyeSBoZWFkZXIgZml0cyBpbnRvIGEgbWFwLiBOb3RhYmx5LCBtdWx0
aXBsZSBTZXQtQ29va2llIGhlYWRlciBmaWVsZHMgYXJlIG5lZWRlZCB0byBzZXQgbXVsdGlwbGUg
Y29va2llcy4KIAogY2xhc3MgSFRUUEhlYWRlck1hcCB7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgU3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IEhhc2hNYXBUeXBlOwogcHVibGljOgotICAg
IHR5cGVkZWYgSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAg
IHR5cGVkZWYgSGFzaE1hcDxIVFRQSGVhZGVyTmFtZSwgU3RyaW5nLCBXVEY6OkludEhhc2g8SFRU
UEhlYWRlck5hbWU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPEhUVFBIZWFkZXJOYW1lPj4g
Q29tbW9uSGVhZGVyc0hhc2hNYXBUeXBlOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBVbmNvbW1vbkhlYWRlcnNIYXNoTWFwVHlwZTsKKworICAg
IGNsYXNzIEhUVFBIZWFkZXJNYXBDb25zdEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IEhUVFBIZWFkZXJNYXBDb25zdEl0ZXJhdG9yKGNvbnN0IEhUVFBIZWFkZXJNYXAmIHRhYmxlLCBD
b21tb25IZWFkZXJzSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbW1vbkhlYWRlcnNJdCwg
VW5jb21tb25IZWFkZXJzSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIHVuY29tbW9uSGVhZGVy
c0l0KQorICAgICAgICAgICAgOiBtX3RhYmxlKHRhYmxlKQorICAgICAgICAgICAgLCBtX2NvbW1v
bkhlYWRlcnNJdChjb21tb25IZWFkZXJzSXQpCisgICAgICAgICAgICAsIG1fdW5jb21tb25IZWFk
ZXJzSXQodW5jb21tb25IZWFkZXJzSXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVwZGF0ZUtl
eVZhbHVlKG1fY29tbW9uSGVhZGVyc0l0KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBL
ZXlWYWx1ZSB7CisgICAgICAgICAgICBTdHJpbmcga2V5OworICAgICAgICAgICAgYm9vbCBrZXlJ
c0NvbW1vbkhlYWRlcjsKKyAgICAgICAgICAgIEhUVFBIZWFkZXJOYW1lIGtleUFzSFRUUEhlYWRl
ck5hbWU7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIH07CisKKyAgICAgICAg
Y29uc3QgS2V5VmFsdWUqIGdldCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VCgqdGhpcyAhPSBtX3RhYmxlLmVuZCgpKTsKKyAgICAgICAgICAgIHJldHVybiAmbV9rZXlWYWx1
ZTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBLZXlWYWx1ZSYgb3BlcmF0b3IqKCkgY29uc3Qg
eyByZXR1cm4gKmdldCgpOyB9CisgICAgICAgIGNvbnN0IEtleVZhbHVlKiBvcGVyYXRvci0+KCkg
Y29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKworICAgICAgICBIVFRQSGVhZGVyTWFwQ29uc3RJdGVy
YXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2NvbW1vbkhl
YWRlcnNJdCAhPSBtX3RhYmxlLm1fY29tbW9uSGVhZGVycy5lbmQoKSkgeworICAgICAgICAgICAg
ICAgIGlmICh1cGRhdGVLZXlWYWx1ZSgrK21fY29tbW9uSGVhZGVyc0l0KSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgKyttX3VuY29tbW9uSGVhZGVyc0l0OworCisgICAgICAgICAgICB1cGRhdGVLZXlWYWx1ZSht
X3VuY29tbW9uSGVhZGVyc0l0KTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIVFRQSGVhZGVyTWFwQ29uc3RJdGVy
YXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBIVFRQSGVhZGVyTWFwQ29uc3RJdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnNJdCA9
PSBvdGhlci5tX2NvbW1vbkhlYWRlcnNJdCAmJiBtX3VuY29tbW9uSGVhZGVyc0l0ID09IG90aGVy
Lm1fdW5jb21tb25IZWFkZXJzSXQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IGJvb2wgdXBkYXRlS2V5VmFsdWUoQ29tbW9uSGVhZGVyc0hhc2hNYXBUeXBlOjpjb25zdF9pdGVy
YXRvciBpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGl0ID09IG1fdGFibGUuY29tbW9u
SGVhZGVycygpLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIG1fa2V5VmFsdWUua2V5ID0gaHR0cEhlYWRlck5hbWVTdHJpbmcoaXQtPmtleSkudG9TdHJp
bmdXaXRob3V0Q29weWluZygpOworICAgICAgICAgICAgbV9rZXlWYWx1ZS5rZXlJc0NvbW1vbkhl
YWRlciA9IHRydWU7CisgICAgICAgICAgICBtX2tleVZhbHVlLmtleUFzSFRUUEhlYWRlck5hbWUg
PSBpdC0+a2V5OworICAgICAgICAgICAgbV9rZXlWYWx1ZS52YWx1ZSA9IGl0LT52YWx1ZTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGJvb2wgdXBkYXRlS2V5
VmFsdWUoVW5jb21tb25IZWFkZXJzSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaXQgPT0gbV90YWJsZS51bmNvbW1vbkhlYWRlcnMoKS5l
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBtX2tleVZh
bHVlLmtleSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtX2tleVZhbHVlLmtleUlzQ29tbW9uSGVh
ZGVyID0gZmFsc2U7CisgICAgICAgICAgICBtX2tleVZhbHVlLnZhbHVlID0gaXQtPnZhbHVlOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBIVFRQ
SGVhZGVyTWFwJiBtX3RhYmxlOworICAgICAgICBDb21tb25IZWFkZXJzSGFzaE1hcFR5cGU6OmNv
bnN0X2l0ZXJhdG9yIG1fY29tbW9uSGVhZGVyc0l0OworICAgICAgICBVbmNvbW1vbkhlYWRlcnNI
YXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgbV91bmNvbW1vbkhlYWRlcnNJdDsKKyAgICAgICAg
S2V5VmFsdWUgbV9rZXlWYWx1ZTsKKyAgICB9OworICAgIHR5cGVkZWYgSFRUUEhlYWRlck1hcENv
bnN0SXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBIVFRQSGVh
ZGVyTWFwKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkhUVFBIZWFkZXJNYXAoKTsKQEAgLTU0LDEw
ICsxMjcsMTQgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZEhUVFBI
ZWFkZXJNYXBEYXRhPiBjb3B5RGF0YSgpIGNvbnN0OwogICAgIHZvaWQgYWRvcHQoc3RkOjp1bmlx
dWVfcHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+KTsKIAotICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVycy5pc0VtcHR5KCk7IH0KLSAgICBpbnQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1faGVhZGVycy5zaXplKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2NvbW1vbkhlYWRlcnMuaXNFbXB0eSgpICYmIG1fdW5jb21tb25IZWFk
ZXJzLmlzRW1wdHkoKTsgfQorICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21tb25I
ZWFkZXJzLnNpemUoKSArIG1fdW5jb21tb25IZWFkZXJzLnNpemUoKTsgfQogCi0gICAgdm9pZCBj
bGVhcigpIHsgbV9oZWFkZXJzLmNsZWFyKCk7IH0KKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7Cisg
ICAgICAgIG1fY29tbW9uSGVhZGVycy5jbGVhcigpOworICAgICAgICBtX3VuY29tbW9uSGVhZGVy
cy5jbGVhcigpOworICAgIH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBnZXQoY29uc3Qg
U3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwpAQCAtNjUsMjMgKzE0MiwyNyBAQCBw
dWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZ2V0KEhUVFBIZWFkZXJOYW1lKSBj
b25zdDsKICAgICB2b2lkIHNldChIVFRQSGVhZGVyTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7
CisgICAgdm9pZCBhZGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAg
IGJvb2wgY29udGFpbnMoSFRUUEhlYWRlck5hbWUpIGNvbnN0OwotICAgIGNvbnN0X2l0ZXJhdG9y
IGZpbmQoSFRUUEhlYWRlck5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmVt
b3ZlKEhUVFBIZWFkZXJOYW1lKTsKIAogICAgIC8vIEluc3RlYWQgb2YgcGFzc2luZyBhIHN0cmlu
ZyBsaXRlcmFsIHRvIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMsIGp1c3QgdXNlIGEgSFRUUEhlYWRl
ck5hbWUgaW5zdGVhZC4KICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiBTdHJpbmcgZ2V0KGNv
bnN0IGNoYXIgKCYpW2xlbmd0aF0pIGNvbnN0ID0gZGVsZXRlOwogICAgIHRlbXBsYXRlPHNpemVf
dCBsZW5ndGg+IHZvaWQgc2V0KGNvbnN0IGNoYXIgKCYpW2xlbmd0aF0sIGNvbnN0IFN0cmluZyYp
ID0gZGVsZXRlOwogICAgIHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+IGJvb2wgY29udGFpbnMoY29u
c3QgY2hhciAoJilbbGVuZ3RoXSkgPSBkZWxldGU7Ci0gICAgdGVtcGxhdGU8c2l6ZV90IGxlbmd0
aD4gY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBjaGFyKCYpW2xlbmd0aF0pID0gZGVsZXRlOwog
ICAgIHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+IGJvb2wgcmVtb3ZlKGNvbnN0IGNoYXIgKCYpW2xl
bmd0aF0pID0gZGVsZXRlOwogCi0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBtX2hlYWRlcnMuYmVnaW4oKTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1faGVhZGVycy5lbmQoKTsgfQorICAgIGNvbnN0IENvbW1vbkhlYWRlcnNIYXNo
TWFwVHlwZSYgY29tbW9uSGVhZGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY29tbW9uSGVhZGVyczsg
fQorICAgIGNvbnN0IFVuY29tbW9uSGVhZGVyc0hhc2hNYXBUeXBlJiB1bmNvbW1vbkhlYWRlcnMo
KSBjb25zdCB7IHJldHVybiBtX3VuY29tbW9uSGVhZGVyczsgfQorICAgIENvbW1vbkhlYWRlcnNI
YXNoTWFwVHlwZSYgY29tbW9uSGVhZGVycygpIHsgcmV0dXJuIG1fY29tbW9uSGVhZGVyczsgfQor
ICAgIFVuY29tbW9uSGVhZGVyc0hhc2hNYXBUeXBlJiB1bmNvbW1vbkhlYWRlcnMoKSB7IHJldHVy
biBtX3VuY29tbW9uSGVhZGVyczsgfQorCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBjb25zdF9pdGVyYXRvcigqdGhpcywgbV9jb21tb25IZWFkZXJzLmJlZ2luKCks
IG1fdW5jb21tb25IZWFkZXJzLmJlZ2luKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoKnRoaXMsIG1fY29tbW9uSGVhZGVycy5lbmQo
KSwgbV91bmNvbW1vbkhlYWRlcnMuZW5kKCkpOyB9CiAKICAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEhUVFBIZWFkZXJNYXAmIGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGIpCiAgICAg
ewotICAgICAgICByZXR1cm4gYS5tX2hlYWRlcnMgPT0gYi5tX2hlYWRlcnM7CisgICAgICAgIHJl
dHVybiBhLm1fY29tbW9uSGVhZGVycyA9PSBiLm1fY29tbW9uSGVhZGVycyAmJiBhLm1fdW5jb21t
b25IZWFkZXJzID09IGIubV91bmNvbW1vbkhlYWRlcnM7CiAgICAgfQogCiAgICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBIVFRQSGVhZGVyTWFwJiBhLCBjb25zdCBIVFRQSGVhZGVyTWFw
JiBiKQpAQCAtOTAsMTAgKzE3MSw4IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
Ly8gRklYTUU6IEluc3RlYWQgb2YgaGF2aW5nIGEgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4sIHdl
IGNvdWxkIGhhdmUgdHdvIGhhc2ggbWFwcywKLSAgICAvLyBvbmUgSGFzaE1hcDxIVFRQSGVhZGVy
TmFtZSwgU3RyaW5nPiBmb3IgY29tbW9uIGhlYWRlcnMgYW5kIGFub3RoZXIgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gZm9yCi0gICAgLy8gbGVzcyBjb21tb24gaGVhZGVycy4KLSAgICBIYXNoTWFw
VHlwZSBtX2hlYWRlcnM7CisgICAgQ29tbW9uSGVhZGVyc0hhc2hNYXBUeXBlIG1fY29tbW9uSGVh
ZGVyczsKKyAgICBVbmNvbW1vbkhlYWRlcnNIYXNoTWFwVHlwZSBtX3VuY29tbW9uSGVhZGVyczsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggYTYwMWNhODVkNTA1MjVlNDE4OTA1OGI5
MzA4M2E5ZjEzMGRhY2JmNS4uNDYwN2E0ZTU0NDRkYWQ1MDQzMTIzZmI0ZDVkMmRhNDBjYTJmYzM2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAKQEAgLTQ2Nyw4ICs0NjcsMTMgQEAgYm9vbCBBcmd1bWVudENvZGVyPFBsdWdpbkluZm8+Ojpk
ZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBQbHVnaW5JbmZvJiBwbHUKIAogdm9pZCBB
cmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXApCiB7Ci0gICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oaGVhZGVyTWFwLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBr
ZXlWYWx1ZVBhaXIgOiBoZWFkZXJNYXApIHsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihoZWFkZXJNYXAuY29tbW9uSGVhZGVycygpLnNpemUoKSk7CisgICAgZm9yIChhdXRv
JiBrZXlWYWx1ZVBhaXIgOiBoZWFkZXJNYXAuY29tbW9uSGVhZGVycygpKSB7CisgICAgICAgIGVu
Y29kZXIuZW5jb2RlRW51bShrZXlWYWx1ZVBhaXIua2V5KTsKKyAgICAgICAgZW5jb2RlciA8PCBr
ZXlWYWx1ZVBhaXIudmFsdWU7CisgICAgfQorICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGhlYWRlck1hcC51bmNvbW1vbkhlYWRlcnMoKS5zaXplKCkpOworICAgIGZvciAoYXV0
byYga2V5VmFsdWVQYWlyIDogaGVhZGVyTWFwLnVuY29tbW9uSGVhZGVycygpKSB7CiAgICAgICAg
IGVuY29kZXIgPDwga2V5VmFsdWVQYWlyLmtleTsKICAgICAgICAgZW5jb2RlciA8PCBrZXlWYWx1
ZVBhaXIudmFsdWU7CiAgICAgfQpAQCAtNDc2LDExICs0ODEsMjcgQEAgdm9pZCBBcmd1bWVudENv
ZGVyPEhUVFBIZWFkZXJNYXA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBIVFRQSGUKIAogYm9vbCBBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjpkZWNvZGUoQXJn
dW1lbnREZWNvZGVyJiBkZWNvZGVyLCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXApCiB7Ci0gICAg
dWludDY0X3Qgc2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQorICAgIHVpbnQ2
NF90IGNvbW1vbkhlYWRlcnNTaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tbW9uSGVh
ZGVyc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvbW1vbkhlYWRlcnNTaXplOyArK2kpIHsKKyAgICAgICAgSFRUUEhlYWRlck5hbWUg
bmFtZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0obmFtZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBoZWFkZXJNYXAuY29tbW9uSGVhZGVycygpLmFkZChuYW1lLCB2YWx1ZSk7CisgICAgfQorCisg
ICAgdWludDY0X3QgdW5jb21tb25IZWFkZXJzU2l6ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHVuY29tbW9uSGVhZGVyc1NpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdW5jb21tb25IZWFkZXJzU2l6ZTsgKytpKSB7CiAgICAgICAgIFN0cmluZyBuYW1lOwogICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNDg5LDcgKzUxMCw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgSFRUUEhlYWRlck1hCiAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIGhlYWRlck1hcC5zZXQobmFtZSwgdmFsdWUpOworICAgICAgICBoZWFkZXJNYXAudW5j
b21tb25IZWFkZXJzKCkuYWRkKG5hbWUsIHZhbHVlKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240488</attachid>
            <date>2014-10-27 10:57:18 -0700</date>
            <delta_ts>2014-10-27 12:18:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138079-20141027105726.patch</filename>
            <type>text/plain</type>
            <size>29850</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk3M2ExOTYxYWE1YTFkOGVjNDA5NDQ1
NjUwOTRlZjQyZGNkOTc1YzIuLmE4MDZhODM5MTg4YTZiNTA5Y2I2ZjdmMjgxZGRlNWQ5MjEzZmEy
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMTAtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ugc2VwYXJhdGUgSGFzaE1hcHMgZm9yIGNvbW1vbiBh
bmQgdW5jb21tb24gaGVhZGVycyBpbiBIVFRQSGVhZGVyTWFwCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgwNzkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgSGFzaFRyYWl0cyBmb3IgQysrMTEgc3Ry
b25nIGVudW0gdHlwZXMuIFVzaW5nIGludGVnZXIgSGFzaFRyYWl0cyBmb3IKKyAgICAgICAgc3Ry
b25nIGVudW1zIHdvdWxkIGJlIGluY29udmVuaWVudCBhcyBpdCB3b3VsZCByZXF1aXJlIGNhc3Rp
bmcgYmV0d2VlbgorICAgICAgICBpbnRlZ2VyIGFuZCBzdHJvbmcgZW51bSB0eXBlcy4KKworICAg
ICAgICAqIHd0Zi9IYXNoVHJhaXRzLmg6CisgICAgICAgIChXVEY6OlN0cm9uZ0VudW1IYXNoVHJh
aXRzOjplbXB0eVZhbHVlKToKKyAgICAgICAgKFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM6OmNv
bnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRz
Ojppc0RlbGV0ZWRWYWx1ZSk6CisKIDIwMTQtMTAtMjUgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNz
Lndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHRpbWVsaW5lcyBzaG91
bGQgbm90IGNvdW50IHRpbWUgZWxhcHNlZCB3aGlsZSBwYXVzZWQgaW4gdGhlIGRlYnVnZ2VyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggMGZjZDIxYWJlNGE4MjkwY2E0MGM1ZWQ0NDE5NWZkNDkzNWViMGU2MS4uODVm
OGU4ZmEyMzNlMGE0OWI1ZmNiOTBiM2IyYWYzYmNlNzRjMjBmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDc1IEBACisyMDE0LTEwLTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIHNlcGFyYXRlIEhhc2hNYXBzIGZvciBjb21tb24gYW5kIHVuY29tbW9uIGhl
YWRlcnMgaW4gSFRUUEhlYWRlck1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM4MDc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIHNlcGFyYXRlIEhhc2hNYXBzIGZvciBjb21tb24gYW5kIHVuY29t
bW9uIGhlYWRlcnMgaW4gSFRUUEhlYWRlck1hcDoKKyAgICAgICAgLSBhIChmYXN0ZXIpIEhhc2hN
YXA8SFRUUEhlYWRlck1hcCwgU3RyaW5nPiBmb3IgY29tbW9uIEhUVFAgaGVhZGVycworICAgICAg
ICAtIGEgSGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBmb3IgdW5jb21t
b24gb25lcworCisgICAgICAgIFRoaXMgYXZvaWRzIGhhdmluZyB0byBjb25zdHJ1Y3QgU3RyaW5n
cyBmcm9tIEhUVFBIZWFkZXJNYXAgdmFsdWVzIGZvcgorICAgICAgICBzdG9yaW5nLiBUaGlzIGFs
c28gbWVhbnMgd2UgaGF2ZSBsZXNzIGlzb2xhdGVkIFN0cmluZyBjb3BpZXMgdG8gZG8gd2hlbgor
ICAgICAgICBjcmVhdGluZyBjcm9zcy10aHJlYWQgZGF0YS4gVGhlIGNvbW1vbiBoZWFkZXJzIEhh
c2hNYXAgc2hvdWxkIGFsc28gYmUKKyAgICAgICAgYSBiaXQgbW9yZSBlZmZpY2llbnQgZHVlIHRv
IGZhc3RlciBoYXNoaW5nIGFuZCBmYXN0ZXIga2V5IGNvbXBhcmlzb24gaW4KKyAgICAgICAgY2Fz
ZSBvZiBjb2xsaXNpb24uCisKKyAgICAgICAgU29tZSBjYWxscyBzaXRlcyBjYW4gYWxzbyBiZW5l
Zml0IGZyb20gaGF2aW5nIGRpcmVjdCBhY2Nlc3MgdG8gY29tbW9uCisgICAgICAgIGhlYWRlcnMg
b2YgdGhlIHJlcXVlc3QgaW4gSFRUUEhlYWRlck5hbWUgdHlwZS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgYSBuZXcgSFRUUEhlYWRlck1hcENvbnN0SXRlcmF0b3IgaXRlcmF0b3IgdHlwZSBm
b3IKKyAgICAgICAgSFRUUEhlYWRlck1hcCBzbyB0aGF0IGNhbGwgc2l0ZXMgdGhhdCBkbyBub3Qg
bmVlZCAvIHdhbnQgdG8gZGlzdGluZ3Vpc2gKKyAgICAgICAgY29tbW9uIC8gdW5jb21tb24gaGVh
ZGVycyBzdGlsbCBkbyBub3QgbmVlZCB0by4gVGhleSBjYW4ga2VlcCB1c2luZworICAgICAgICBt
b2Rlcm4gQysrIGxvb3BzIG92ZXIgSFRUUEhlYWRlck1hcCBvYmplY3RzIGFuZCBnZXQgPFN0cmlu
ZywgU3RyaW5nPgorICAgICAgICBrZXkvdmFsdWUgcGFpcnMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5B
Y2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzT25BY2Nlc3NDb250cm9sU2lt
cGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCk6CisgICAgICAgIEhhdmUgaXNPbkFjY2Vzc0NvbnRy
b2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KCkgdGFrZSBhCisgICAgICAgIEhUVFBIZWFk
ZXJOYW1lIGluIGFyZ3VtZW50IGluc3RlYWQgb2YgYSBTdHJpbmcgYXMgb25seSBjb21tb24gaGVh
ZGVycworICAgICAgICBhcmUgaW4gdGhlIHdoaXRlbGlzdC4KKworICAgICAgICAoV2ViQ29yZTo6
aXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QpOgorICAgICAgICBDYWxsIGlzT25BY2Nl
c3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCgpIG9ubHkgZm9yIGNvbW1vbgor
ICAgICAgICBIVFRQIGhlYWRlcnMuCisKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmg6CisgICAgICAgIEhhdmUgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0
SGVhZGVyV2hpdGVsaXN0KCkgdGFrZSBhCisgICAgICAgIEhUVFBIZWFkZXJOYW1lIGluIGFyZ3Vt
ZW50IGluc3RlYWQgb2YgYSBTdHJpbmcgYXMgb25seSBjb21tb24gaGVhZGVycworICAgICAgICBh
cmUgaW4gdGhlIHdoaXRlbGlzdC4KKworICAgICAgICAqIGxvYWRlci9Dcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMpOgorICAgICAgICBD
YWxsIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCgpIG9ubHkg
Zm9yIGNvbW1vbgorICAgICAgICBIVFRQIGhlYWRlcnMuCisKKyAgICAgICAgKiBsb2FkZXIvRG9j
dW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnJlc3Bv
bnNlUmVjZWl2ZWQpOgorICAgICAgICBDYWxsIGh0dHBIZWFkZXJGaWVsZHMoKS5jb21tb25IZWFk
ZXJzKCkuZmluZCgpIGluc3RlYWQgb2YKKyAgICAgICAgaHR0cEhlYWRlckZpZWxkcygpLmZpbmQo
KSBhcyB3ZSBhcmUgbG9va2luZyBmb3IgYSBjb21tb24gaGVhZGVyLgorICAgICAgICBIVFRQSGVh
ZGVyTWFwOjpmaW5kKEhUVFBIZWFkZXJOYW1lKSB3YXMgcmVtb3ZlZCBub3cgdGhhdCB3ZSBoYXZl
IGEKKyAgICAgICAgSGFzaE1hcCBkZWRpY2F0ZWQgdG8gY29tbW9uIGhlYWRlcnMuCisKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZSk6CisgICAgICAgIFVwZGF0ZSBhcmd1
bWVudCB0eXBlIHRvIGJlIGEgSFRUUEhlYWRlck5hbWUgaW5zdGVhZCBvZiBhIFN0cmluZyBhcwor
ICAgICAgICBvbmx5IGNvbW1vbiBIVFRQIGhlYWRlcnMgY2FuIGJlIGlnbm9yZWQgZm9yIGNhY2hl
IHJldXNlLiBUaGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gYWxyZWFkeSBkZWFsdCB3aXRoIEhU
VFBIZWFkZXJOYW1lIHR5cGUgYW5kIGhhZCB0bworICAgICAgICBjYWxsIGZpbmRIVFRQSGVhZGVy
TmFtZSgpLiBUaGlzIGlzIG5vIGxvbmdlciBuZWVkZWQgbm93IHRoYXQgdGhlCisgICAgICAgIGNh
bGwgc2l0ZSBub3cgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gY29tbW9uIGhlYWRlcnMgaW4gSFRUUEhl
YWRlck5hbWUKKyAgICAgICAgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVz
b3VyY2U6OmNhblJldXNlKToKKyAgICAgICAgLSBPbmx5IGNhbGwgc2hvdWxkSWdub3JlSGVhZGVy
Rm9yQ2FjaGVSZXVzZSgpIGZvciBjb21tb24gSFRUUCBoZWFkZXJzLgorICAgICAgICAtIFNsaWdo
dGx5IG9wdGltaXplIHRoZSBzZWNvbmQgbG9vcCAodGhlIG9uZSBvdmVyIG9sZEhlYWRlck1hcCkg
dG8gb25seQorICAgICAgICAgIGNoZWNrIHRoYXQgdGhlIGtleSBpcyBwcmVzZW50IGluIG5ld0hl
YWRlck1hcCwgd2l0aG91dCBhY3R1YWxseQorICAgICAgICAgIGNvbXBhcmluZyB0aGUgU3RyaW5n
IHZhbHVlcy4gSWYgdGhlIFN0cmluZyB2YWx1ZXMgd2VyZSBkaWZmZXJlbnQsIHRoZQorICAgICAg
ICAgIGZpcnN0IGxvb3Agd291bGQgaGF2ZSBzZWVuIGl0IGFscmVhZHkgYW5kIHdlIHdvdWxkIGhh
dmUgcmV0dXJuZWQKKyAgICAgICAgICBlYXJseS4KKwogMjAxNC0xMC0yNyAgQW5kcmVhcyBLbGlu
ZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBjYW5Db250YWluRml4ZWRQb3Np
dGlvbk9iamVjdHMoKSB0byBSZW5kZXJFbGVtZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDNlNjY3ZTZiY2Zm
ZjNmYTgwMmFiMDBkMDA3YTM0ZmViMDJkN2Q3OTQuLmMxYzlhNzBmMmZhNTFmMzJjMDRmMTVmMjY3
MjcxODc2OGQ4YzRiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNC0xMC0yNSAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBzZXBhcmF0ZSBI
YXNoTWFwcyBmb3IgY29tbW9uIGFuZCB1bmNvbW1vbiBoZWFkZXJzIGluIEhUVFBIZWFkZXJNYXAK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODA3OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0
aGUgV0syIElQQyBIVFRQSGVhZGVyTWFwIHNlcmlhbGl6YXRpb24gLyBkZXNlcmlhbGl6YXRpb24g
Y29kZQorICAgICAgICB0byBsZXZlcmFnZSB0aGUgZmFjdCB0aGF0IEhUVFBIZWFkZXJNYXAgbm93
IHN0b3JlcyBjb21tb24gSFRUUCBoZWFkZXJzCisgICAgICAgIGFuZCB1bmNvbW1vbiBvbmUgaW4g
c2VwYXJhdGUgSGFzaE1hcHMuIFRoaXMgc3BlZWRzIHVwIGRlc2VyaWFsaXphdGlvbgorICAgICAg
ICBhcyB3ZSBubyBsb25nZXIgbmVlZCB0byBjYWxsIGZpbmRIVFRQSGVhZGVyTmFtZSgpIGZvciBl
dmVyeSBkZWNvZGVkCisgICAgICAgIGhlYWRlci4gV2UgYWxyZWFkeSBrbm93IGlmIHRoZSBoZWFk
ZXIgaXMgYSBjb21tb24gb25lIG9yIG5vdCwgYW5kIGlmCisgICAgICAgIGl0IGlzIHRoZW4gd2Ug
YWxyZWFkeSBoYXZlIGEgSFRUUEhlYWRlck5hbWUgdHlwZSBpbnN0ZWFkIG9mIGEgU3RyaW5nLgor
CisgICAgICAgIEkgc2VlIHRoYXQgd2Ugc3BlbmQgfjQwJSBsZXNzIHRpbWUgaW4gSFRUUEhlYWRl
ck1hcCBkZWNvZGluZyB3aGVuCisgICAgICAgIGxvYWRpbmcgaHR0cDovL2ZsaWNrci5jb20vZXhw
bG9yZSwgd2hpbGUgdGhlIGVuY29kaW5nIHRha2VzIGFib3V0CisgICAgICAgIHRoZSBzYW1lIGFt
b3VudCBvZiB0aW1lIGFzIGJlZm9yZS4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+
OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+Ojpk
ZWNvZGUpOgorCiAyMDE0LTEwLTI0ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCB0aGUgaU9TIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoVHJhaXRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKaW5kZXggMDM2
N2FkY2IxNjIxMGUwN2UyOTMyMTViYzYyZGRiNmNiYzZmYTkzMC4uZGQzMDc4ZTMyNDViMmUzYTA2
YjY3OWExYWU0N2Y0ZGQ2NDY3NjVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRy
YWl0cy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaApAQCAtODgsNiArODgsMTUg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8VD4KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShUIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgo
KSAtIDE7IH0KIH07CiAKKy8vIENhbiBiZSB1c2VkIHdpdGggc3Ryb25nIGVudW1zLCBhbGxvd3Mg
emVybyBhcyBrZXkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU3Ryb25nRW51bUhhc2hU
cmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0czxUPiB7CisgICAgdXNpbmcgVW5kZXJseWluZ1R5cGUg
PSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxUPjo6dHlwZTsKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgc3RhdGljIFQgZW1wdHlWYWx1
ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8VW5kZXJseWlu
Z1R5cGU+OjptYXgoKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUo
VCYgc2xvdCkgeyBzbG90ID0gc3RhdGljX2Nhc3Q8VD4oc3RkOjpudW1lcmljX2xpbWl0czxVbmRl
cmx5aW5nVHlwZT46Om1heCgpIC0gMSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShUIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBzdGF0aWNfY2FzdDxUPihzdGQ6Om51bWVyaWNf
bGltaXRzPFVuZGVybHlpbmdUeXBlPjo6bWF4KCkgLSAxKTsgfQorfTsKKwogdGVtcGxhdGU8dHlw
ZW5hbWUgUD4gc3RydWN0IEhhc2hUcmFpdHM8UCo+IDogR2VuZXJpY0hhc2hUcmFpdHM8UCo+IHsK
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKICAgICBzdGF0
aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoUComIHNsb3QpIHsgc2xvdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UCo+KC0xKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAzYWY0N2U0NWExNTZm
MWQ2ZDM1MTJiOTRmZjVlNDE5MGY2NTY0MGVlLi4yZDA2ZjYzOGU2ODhjYWUzYzczYTBhMGUzMDBj
NTU5MjkyZGU4MWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtODk0LDYgKzg5NCw3IEBAIF9f
Wk43V2ViQ29yZTIwVXNlckdlc3R1cmVJbmRpY2F0b3I3c19zdGF0ZUUKIF9fWk43V2ViQ29yZTIw
VXNlckdlc3R1cmVJbmRpY2F0b3JDMUVOU18yNlByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlRVBO
U184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yRDFFdgogX19a
TjdXZWJDb3JlMjBkZWxldGVFbXB0eURpcmVjdG9yeUVSS04zV1RGNlN0cmluZ0UKK19fWk43V2Vi
Q29yZTIwaHR0cEhlYWRlck5hbWVTdHJpbmdFTlNfMTRIVFRQSGVhZGVyTmFtZUUKIF9fWk43V2Vi
Q29yZTIwbG9va3NMaWtlQWJzb2x1dGVVUkxFUDhOU1N0cmluZwogX19aTjdXZWJDb3JlMjBtYWtl
UkdCQTMyRnJvbUZsb2F0c0VmZmZmCiBfX1pON1dlYkNvcmUyMHByZXZpb3VzTGluZVBvc2l0aW9u
RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FaU5TXzEyRWRpdGFibGVUeXBlRQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAppbmRleCA3ZTU3
OTlkNWU3ZDQ1ODRiZGE3ZTAzY2QzNmI4NDhjMzAyOWI4MGIwLi4yNzhhZTk3ODVmOTdmNjc5OGI4
ODVmMDNkYzhiYWNlOTNhMjAxZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcApAQCAtNDQsMjQgKzQ0LDI1IEBAIGJvb2wgaXNP
bkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0TWV0aG9kV2hpdGVsaXN0KGNvbnN0IFN0cmluZyYg
bWV0aG9kKQogICAgIHJldHVybiBtZXRob2QgPT0gIkdFVCIgfHwgbWV0aG9kID09ICJIRUFEIiB8
fCBtZXRob2QgPT0gIlBPU1QiOwogfQogCi1ib29sIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVx
dWVzdEhlYWRlcldoaXRlbGlzdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCitib29sIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChI
VFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShuYW1lLCAiYWNjZXB0IikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgImFjY2VwdC1sYW5ndWFnZSIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJjb250ZW50LWxhbmd1YWdlIikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgIm9yaWdpbiIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJyZWZl
cmVyIikpCisgICAgc3dpdGNoIChuYW1lKSB7CisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6QWNj
ZXB0OgorICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkFjY2VwdExhbmd1YWdlOgorICAgIGNhc2Ug
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMYW5ndWFnZToKKyAgICBjYXNlIEhUVFBIZWFkZXJOYW1l
OjpPcmlnaW46CisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6UmVmZXJlcjoKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAvLyBQcmVmbGlnaHQgaXMgcmVxdWlyZWQgZm9yIE1JTUUgdHlwZXMg
dGhhdCBjYW4gbm90IGJlIHNlbnQgdmlhIGZvcm0gc3VibWlzc2lvbi4KLSAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgImNvbnRlbnQtdHlwZSIpKSB7CisgICAgY2FzZSBIVFRQSGVhZGVy
TmFtZTo6Q29udGVudFR5cGU6IHsKKyAgICAgICAgLy8gUHJlZmxpZ2h0IGlzIHJlcXVpcmVkIGZv
ciBNSU1FIHR5cGVzIHRoYXQgY2FuIG5vdCBiZSBzZW50IHZpYSBmb3JtIHN1Ym1pc3Npb24uCiAg
ICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUodmFs
dWUpOwogICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJhcHBsaWNh
dGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKQogICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UobWltZVR5cGUsICJtdWx0aXBhcnQvZm9ybS1kYXRhIikKICAgICAgICAgICAgIHx8IGVx
dWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAidGV4dC9wbGFpbiIpOwogICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
fQogCiBib29sIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXApCkBAIC03MCw3ICs3MSw3IEBA
IGJvb2wgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBtZXRo
b2QsIGNvbnN0IEhUVFBIZWFkZXJNYXAmCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZv
ciAoY29uc3QgYXV0byYgaGVhZGVyIDogaGVhZGVyTWFwKSB7Ci0gICAgICAgIGlmICghaXNPbkFj
Y2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGhlYWRlci5rZXksIGhlYWRl
ci52YWx1ZSkpCisgICAgICAgIGlmICghaGVhZGVyLmtleUlzQ29tbW9uSGVhZGVyIHx8ICFpc09u
QWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaGVhZGVyLmtleUFzSFRU
UEhlYWRlck5hbWUsIGhlYWRlci52YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250
cm9sLmgKaW5kZXggZjAzNTRlNTEzMWUyZTlhNzE3Yzk1MmVlMjBkYTM5OGY5NTQ3MTRmNC4uOTBm
OWJlNmJmNTM1ZmQzMWNkNTU1ZGZjMWM0YTEyNDU5NDNiMDdmOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaApAQCAtMzcsMTMgKzM3LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xk
aW5nSGFzaD4gSFRUUEhlYWRlclNldDsKIAogY2xhc3MgSFRUUEhlYWRlck1hcDsKK2VudW0gY2xh
c3MgSFRUUEhlYWRlck5hbWU7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBSZXNvdXJj
ZVJlc3BvbnNlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGJvb2wgaXNTaW1wbGVDcm9zc09y
aWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEhUVFBIZWFkZXJN
YXAmKTsKIGJvb2wgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0TWV0aG9kV2hpdGVsaXN0
KGNvbnN0IFN0cmluZyYpOwotYm9vbCBpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFk
ZXJXaGl0ZWxpc3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKK2Jv
b2wgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KEhUVFBIZWFk
ZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIGJvb2wgaXNPbkFjY2Vzc0NvbnRyb2xSZXNw
b25zZUhlYWRlcldoaXRlbGlzdChjb25zdCBTdHJpbmcmKTsKIAogdm9pZCB1cGRhdGVSZXF1ZXN0
Rm9yQWNjZXNzQ29udHJvbChSZXNvdXJjZVJlcXVlc3QmLCBTZWN1cml0eU9yaWdpbiosIFN0b3Jl
ZENyZWRlbnRpYWxzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAppbmRleCA1MTZmMTFmMTYyYmVlYjMwMDJm
ZDZlZTA4Yzc0YjRkY2E4NTViMDgwLi5jYzBhODVlZjg0MmZkM2YzMmNiODdkZjk0NWY2Yzk0YWY5
M2JhOTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRSZXN1bHRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3Jp
Z2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCkBAIC0xMjcsNyArMTI3LDkgQEAgYm9vbCBDcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbTo6YWxsb3dzQ3Jvc3NPcmlnaW5NZXRob2Qo
Y29uc3QgU3RyaW5nJgogYm9vbCBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbTo6
YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFk
ZXJzLCBTdHJpbmcmIGVycm9yRGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgZm9yIChjb25zdCBh
dXRvJiBoZWFkZXIgOiByZXF1ZXN0SGVhZGVycykgewotICAgICAgICBpZiAoIW1faGVhZGVycy5j
b250YWlucyhoZWFkZXIua2V5KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVh
ZGVyV2hpdGVsaXN0KGhlYWRlci5rZXksIGhlYWRlci52YWx1ZSkpIHsKKyAgICAgICAgaWYgKGhl
YWRlci5rZXlJc0NvbW1vbkhlYWRlciAmJiBpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RI
ZWFkZXJXaGl0ZWxpc3QoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUsIGhlYWRlci52YWx1ZSkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29udGFpbnMo
aGVhZGVyLmtleSkpIHsKICAgICAgICAgICAgIGVycm9yRGVzY3JpcHRpb24gPSAiUmVxdWVzdCBo
ZWFkZXIgZmllbGQgIiArIGhlYWRlci5rZXkgKyAiIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1D
b250cm9sLUFsbG93LUhlYWRlcnMuIjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKaW5kZXggNmJlMjc1
MzgxZTZkMjY4MmM5MjQzMjM0ODRhYjNkNmU0NTRiMGJlYS4uNDBhZTU5NDRlYmQ3ZjU0N2I5NDVj
OTRhN2Q3ZDI5YzhiZjE5YWQzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwCkBAIC02MDUsOCArNjA1LDkgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6cmVzcG9uc2VS
ZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmUKICAgICBp
ZiAod2lsbExvYWRGYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBpdCA9IHJl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5maW5kKEhUVFBIZWFkZXJOYW1lOjpYRnJhbWVPcHRp
b25zKTsKLSAgICBpZiAoaXQgIT0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpKSB7
CisgICAgY29uc3QgYXV0byYgY29tbW9uSGVhZGVycyA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZHMoKS5jb21tb25IZWFkZXJzKCk7CisgICAgYXV0byBpdCA9IGNvbW1vbkhlYWRlcnMuZmluZChI
VFRQSGVhZGVyTmFtZTo6WEZyYW1lT3B0aW9ucyk7CisgICAgaWYgKGl0ICE9IGNvbW1vbkhlYWRl
cnMuZW5kKCkpIHsKICAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBpdC0+dmFsdWU7CiAgICAgICAg
IEFTU0VSVChtX21haW5SZXNvdXJjZSk7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciA9IG1faWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXIgPyBtX2lkZW50aWZp
ZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyIDogbV9tYWluUmVzb3VyY2UtPmlkZW50aWZp
ZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdS
ZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3Vy
Y2UuY3BwCmluZGV4IDkwNTRmZTc2YTRiYWI4MDEyYmQxNDdkNTYxMmE1N2Y4ZDA1MDM1MDguLjUw
MjFiYWZmMTNiMmZmNDcyOTk4MDc5MGYxNzVlY2VmNDVkZWU2YjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcApAQCAtMjAzLDEyICsy
MDMsOCBAQCB2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpzZXREYXRhQnVmZmVyaW5nUG9saWN5KERh
dGFCdWZmZXJpbmdQb2xpY3kgZGF0YUJ1ZmZlcmluZwogICAgIG1fb3B0aW9ucy5zZXREYXRhQnVm
ZmVyaW5nUG9saWN5KGRhdGFCdWZmZXJpbmdQb2xpY3kpOwogfQogCi1zdGF0aWMgYm9vbCBzaG91
bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNlKGNvbnN0IFN0cmluZyYgaGVhZGVyTmFtZSkKK3N0
YXRpYyBib29sIHNob3VsZElnbm9yZUhlYWRlckZvckNhY2hlUmV1c2UoSFRUUEhlYWRlck5hbWUg
bmFtZSkKIHsKLSAgICBIVFRQSGVhZGVyTmFtZSBuYW1lOwotICAgIGlmICghZmluZEhUVFBIZWFk
ZXJOYW1lKGhlYWRlck5hbWUsIG5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBz
d2l0Y2ggKG5hbWUpIHsKICAgICAvLyBGSVhNRTogVGhpcyBsaXN0IG9mIGhlYWRlcnMgdGhhdCBk
b24ndCBhZmZlY3QgY2FjaGUgcG9saWN5IGFsbW9zdCBjZXJ0YWlubHkgaXNuJ3QgY29tcGxldGUu
CiAgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6QWNjZXB0OgpAQCAtMjQ2LDEyICsyNDIsMjIgQEAg
Ym9vbCBDYWNoZWRSYXdSZXNvdXJjZTo6Y2FuUmV1c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBu
ZXdSZXF1ZXN0KSBjb25zdAogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9sZEhlYWRlcnMgPSBt
X3Jlc291cmNlUmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CiAKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGhlYWRlciA6IG5ld0hlYWRlcnMpIHsKLSAgICAgICAgaWYgKCFzaG91bGRJZ25vcmVIZWFk
ZXJGb3JDYWNoZVJldXNlKGhlYWRlci5rZXkpICYmIGhlYWRlci52YWx1ZSAhPSBvbGRIZWFkZXJz
LmdldChoZWFkZXIua2V5KSkKKyAgICAgICAgaWYgKGhlYWRlci5rZXlJc0NvbW1vbkhlYWRlcikg
eworICAgICAgICAgICAgaWYgKCFzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNlKGhlYWRl
ci5rZXlBc0hUVFBIZWFkZXJOYW1lKQorICAgICAgICAgICAgICAgICYmIGhlYWRlci52YWx1ZSAh
PSBvbGRIZWFkZXJzLmNvbW1vbkhlYWRlcnMoKS5nZXQoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5h
bWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICho
ZWFkZXIudmFsdWUgIT0gb2xkSGVhZGVycy51bmNvbW1vbkhlYWRlcnMoKS5nZXQoaGVhZGVyLmtl
eSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgLy8gRm9yIHRoaXMg
c2Vjb25kIGxvb3AsIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gY29tcGFyZSB2YWx1ZXMsIGNo
ZWNraW5nIHRoYXQgdGhlCisgICAgLy8ga2V5IGlzIGNvbnRhaW5lZCBpbiBuZXdIZWFkZXJzIGlz
IHN1ZmZpY2llbnQgZHVlIHRvIHRoZSBwcmV2aW91cyBsb29wLgogICAgIGZvciAoY29uc3QgYXV0
byYgaGVhZGVyIDogb2xkSGVhZGVycykgewotICAgICAgICBpZiAoIXNob3VsZElnbm9yZUhlYWRl
ckZvckNhY2hlUmV1c2UoaGVhZGVyLmtleSkgJiYgaGVhZGVyLnZhbHVlICE9IG5ld0hlYWRlcnMu
Z2V0KGhlYWRlci5rZXkpKQorICAgICAgICBpZiAoaGVhZGVyLmtleUlzQ29tbW9uSGVhZGVyKSB7
CisgICAgICAgICAgICBpZiAoIXNob3VsZElnbm9yZUhlYWRlckZvckNhY2hlUmV1c2UoaGVhZGVy
LmtleUFzSFRUUEhlYWRlck5hbWUpCisgICAgICAgICAgICAgICAgJiYgIW5ld0hlYWRlcnMuY29t
bW9uSGVhZGVycygpLmNvbnRhaW5zKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoIW5ld0hlYWRlcnMu
dW5jb21tb25IZWFkZXJzKCkuY29udGFpbnMoaGVhZGVyLmtleSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9IVFRQSGVhZGVyTWFwLmNwcAppbmRleCBiMmY1ZTBjZDUxY2NlMGI5NDlmNmFmMjhhMGY4MzI1
NWQwZTU4ZWYxLi5mMWEwZGM1NGRkZThlYjVmMmI1NGNlM2I3ZGFkZGVlODI4MDJlY2NjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAK
QEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVFRQSGVh
ZGVyTWFwLmgiCiAKLSNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlIDx1dGls
aXR5PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIApAQCAtNDgsNzUgKzQ3LDg1
IEBAIEhUVFBIZWFkZXJNYXA6On5IVFRQSGVhZGVyTWFwKCkKIHN0ZDo6dW5pcXVlX3B0cjxDcm9z
c1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBIVFRQSGVhZGVyTWFwOjpjb3B5RGF0YSgpIGNvbnN0
CiB7CiAgICAgYXV0byBkYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxDcm9zc1RocmVhZEhUVFBIZWFk
ZXJNYXBEYXRhPigpOwotICAgIGRhdGEtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9oZWFkZXJz
LnNpemUoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6ICp0aGlzKQotICAgICAg
ICBkYXRhLT51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3BhaXIoaGVhZGVyLmtleS5pc29sYXRl
ZENvcHkoKSwgaGVhZGVyLnZhbHVlLmlzb2xhdGVkQ29weSgpKSk7CisgICAgZGF0YS0+Y29tbW9u
SGVhZGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY29tbW9uSGVhZGVycy5zaXplKCkpOwor
ICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogbV9jb21tb25IZWFkZXJzKQorICAgICAgICBk
YXRhLT5jb21tb25IZWFkZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIu
a2V5LCBoZWFkZXIudmFsdWUuaXNvbGF0ZWRDb3B5KCkpKTsKKworICAgIGRhdGEtPnVuY29tbW9u
SGVhZGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fdW5jb21tb25IZWFkZXJzLnNpemUoKSk7
CisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBtX3VuY29tbW9uSGVhZGVycykKKyAgICAg
ICAgZGF0YS0+dW5jb21tb25IZWFkZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2VfcGFpciho
ZWFkZXIua2V5Lmlzb2xhdGVkQ29weSgpLCBoZWFkZXIudmFsdWUuaXNvbGF0ZWRDb3B5KCkpKTsK
IAogICAgIHJldHVybiBkYXRhOwogfQogCiB2b2lkIEhUVFBIZWFkZXJNYXA6OmFkb3B0KHN0ZDo6
dW5pcXVlX3B0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBkYXRhKQogewotICAgIG1f
aGVhZGVycy5jbGVhcigpOwotCi0gICAgZm9yIChhdXRvJiBoZWFkZXIgOiAqZGF0YSkKLSAgICAg
ICAgbV9oZWFkZXJzLmFkZChXVEY6Om1vdmUoaGVhZGVyLmZpcnN0KSwgV1RGOjptb3ZlKGhlYWRl
ci5zZWNvbmQpKTsKLX0KKyAgICBtX2NvbW1vbkhlYWRlcnMuY2xlYXIoKTsKKyAgICBtX3VuY29t
bW9uSGVhZGVycy5jbGVhcigpOwogCi1zdGF0aWMgU3RyaW5nIGludGVybkhUVFBIZWFkZXJOYW1l
U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZVN0cmluZykKLXsKLSAgICBIVFRQSGVhZGVyTmFtZSBo
ZWFkZXJOYW1lOwotICAgIGlmICghZmluZEhUVFBIZWFkZXJOYW1lKG5hbWVTdHJpbmcsIGhlYWRl
ck5hbWUpKQotICAgICAgICByZXR1cm4gbmFtZVN0cmluZzsKKyAgICBmb3IgKGF1dG8mIGhlYWRl
ciA6IGRhdGEtPmNvbW1vbkhlYWRlcnMpCisgICAgICAgIG1fY29tbW9uSGVhZGVycy5hZGQoaGVh
ZGVyLmZpcnN0LCBXVEY6Om1vdmUoaGVhZGVyLnNlY29uZCkpOwogCi0gICAgcmV0dXJuIGh0dHBI
ZWFkZXJOYW1lU3RyaW5nKGhlYWRlck5hbWUpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKKyAg
ICBmb3IgKGF1dG8mIGhlYWRlciA6IGRhdGEtPnVuY29tbW9uSGVhZGVycykKKyAgICAgICAgbV91
bmNvbW1vbkhlYWRlcnMuYWRkKFdURjo6bW92ZShoZWFkZXIuZmlyc3QpLCBXVEY6Om1vdmUoaGVh
ZGVyLnNlY29uZCkpOwogfQogCiBTdHJpbmcgSFRUUEhlYWRlck1hcDo6Z2V0KGNvbnN0IFN0cmlu
ZyYgbmFtZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9oZWFkZXJzLmdldChpbnRlcm5IVFRQSGVh
ZGVyTmFtZVN0cmluZyhuYW1lKSk7CisgICAgSFRUUEhlYWRlck5hbWUgaGVhZGVyTmFtZTsKKyAg
ICBpZiAoIWZpbmRIVFRQSGVhZGVyTmFtZShuYW1lLCBoZWFkZXJOYW1lKSkKKyAgICAgICAgcmV0
dXJuIG1fdW5jb21tb25IZWFkZXJzLmdldChuYW1lKTsKKyAgICByZXR1cm4gbV9jb21tb25IZWFk
ZXJzLmdldChoZWFkZXJOYW1lKTsKIH0KIAogdm9pZCBIVFRQSGVhZGVyTWFwOjpzZXQoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIG1faGVhZGVycy5zZXQo
aW50ZXJuSFRUUEhlYWRlck5hbWVTdHJpbmcobmFtZSksIHZhbHVlKTsKKyAgICBIVFRQSGVhZGVy
TmFtZSBoZWFkZXJOYW1lOworICAgIGlmICghZmluZEhUVFBIZWFkZXJOYW1lKG5hbWUsIGhlYWRl
ck5hbWUpKSB7CisgICAgICAgIG1fdW5jb21tb25IZWFkZXJzLnNldChuYW1lLCB2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb21tb25IZWFkZXJzLnNldChoZWFkZXJOYW1l
LCB2YWx1ZSk7CiB9CiAKIHZvaWQgSFRUUEhlYWRlck1hcDo6YWRkKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1faGVhZGVycy5h
ZGQoaW50ZXJuSFRUUEhlYWRlck5hbWVTdHJpbmcobmFtZSksIHZhbHVlKTsKLSAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSArICIsICIgKyB2YWx1ZTsKKyAgICBIVFRQSGVhZGVyTmFtZSBoZWFk
ZXJOYW1lOworICAgIGlmICghZmluZEhUVFBIZWFkZXJOYW1lKG5hbWUsIGhlYWRlck5hbWUpKSB7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV91bmNvbW1vbkhlYWRlcnMuYWRkKG5hbWUsIHZhbHVl
KTsKKyAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICsgIiwgIiArIHZhbHVlOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkZChoZWFkZXJOYW1lLCB2YWx1ZSk7CiB9CiAK
IFN0cmluZyBIVFRQSGVhZGVyTWFwOjpnZXQoSFRUUEhlYWRlck5hbWUgbmFtZSkgY29uc3QKIHsK
LSAgICBhdXRvIGl0ID0gZmluZChuYW1lKTsKLSAgICBpZiAoaXQgPT0gZW5kKCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBpdC0+dmFsdWU7CisgICAgcmV0dXJuIG1f
Y29tbW9uSGVhZGVycy5nZXQobmFtZSk7CiB9CiAKIHZvaWQgSFRUUEhlYWRlck1hcDo6c2V0KEhU
VFBIZWFkZXJOYW1lIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgbV9oZWFkZXJz
LnNldChodHRwSGVhZGVyTmFtZVN0cmluZyhuYW1lKS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCks
IHZhbHVlKTsKKyAgICBtX2NvbW1vbkhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTsKIH0KIAogYm9v
bCBIVFRQSGVhZGVyTWFwOjpjb250YWlucyhIVFRQSGVhZGVyTmFtZSBuYW1lKSBjb25zdAogewot
ICAgIHJldHVybiBtX2hlYWRlcnMuY29udGFpbnMoaHR0cEhlYWRlck5hbWVTdHJpbmcobmFtZSku
dG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKKyAgICByZXR1cm4gbV9jb21tb25IZWFkZXJzLmNv
bnRhaW5zKG5hbWUpOwogfQogCi1IVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBIVFRQSGVh
ZGVyTWFwOjpmaW5kKEhUVFBIZWFkZXJOYW1lIG5hbWUpIGNvbnN0Citib29sIEhUVFBIZWFkZXJN
YXA6OnJlbW92ZShIVFRQSGVhZGVyTmFtZSBuYW1lKQogewotICAgIHJldHVybiBtX2hlYWRlcnMu
ZmluZChodHRwSGVhZGVyTmFtZVN0cmluZyhuYW1lKS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkp
OworICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnMucmVtb3ZlKG5hbWUpOwogfQogCi1ib29sIEhU
VFBIZWFkZXJNYXA6OnJlbW92ZShIVFRQSGVhZGVyTmFtZSBuYW1lKQordm9pZCBIVFRQSGVhZGVy
TWFwOjphZGQoSFRUUEhlYWRlck5hbWUgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gbV9oZWFkZXJzLnJlbW92ZShodHRwSGVhZGVyTmFtZVN0cmluZyhuYW1lKS50b1N0
cmluZ1dpdGhvdXRDb3B5aW5nKCkpOworICAgIGF1dG8gcmVzdWx0ID0gbV9jb21tb25IZWFkZXJz
LmFkZChuYW1lLCB2YWx1ZSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKyAiLCAiICsg
dmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmgKaW5kZXggNmUxMDUxZTFmZDI4NjZhZmI2
MGM5ODhlYTJkMWFlNGUxMmMzNDVjZC4uNjM2YTNjNjVlZDY0N2ZlODcyNDVjOTlkNzZhNzRjNDlh
MGJkYzVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQ
SGVhZGVyTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVh
ZGVyTWFwLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYgSFRUUEhlYWRlck1hcF9oCiAjZGVm
aW5lIEhUVFBIZWFkZXJNYXBfaAogCisjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCiAjaW5j
bHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTM2LDE2ICszNyw4OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVu
dW0gY2xhc3MgSFRUUEhlYWRlck5hbWU7Ci0KLXR5cGVkZWYgVmVjdG9yPHN0ZDo6cGFpcjxTdHJp
bmcsIFN0cmluZz4+IENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE7CitzdHJ1Y3QgQ3Jvc3NU
aHJlYWRIVFRQSGVhZGVyTWFwRGF0YSB7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxIVFRQSGVhZGVy
TmFtZSwgU3RyaW5nPj4gY29tbW9uSGVhZGVyczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmlu
ZywgU3RyaW5nPj4gdW5jb21tb25IZWFkZXJzOworfTsKIAogLy8gRklYTUU6IE5vdCBldmVyeSBo
ZWFkZXIgZml0cyBpbnRvIGEgbWFwLiBOb3RhYmx5LCBtdWx0aXBsZSBTZXQtQ29va2llIGhlYWRl
ciBmaWVsZHMgYXJlIG5lZWRlZCB0byBzZXQgbXVsdGlwbGUgY29va2llcy4KIAogY2xhc3MgSFRU
UEhlYWRlck1hcCB7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nLCBDYXNlRm9s
ZGluZ0hhc2g+IEhhc2hNYXBUeXBlOwogcHVibGljOgotICAgIHR5cGVkZWYgSGFzaE1hcFR5cGU6
OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgSGFzaE1hcDxIVFRQ
SGVhZGVyTmFtZSwgU3RyaW5nLCBXVEY6OkludEhhc2g8SFRUUEhlYWRlck5hbWU+LCBXVEY6OlN0
cm9uZ0VudW1IYXNoVHJhaXRzPEhUVFBIZWFkZXJOYW1lPj4gQ29tbW9uSGVhZGVyc0hhc2hNYXBU
eXBlOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNo
PiBVbmNvbW1vbkhlYWRlcnNIYXNoTWFwVHlwZTsKKworICAgIGNsYXNzIEhUVFBIZWFkZXJNYXBD
b25zdEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEhUVFBIZWFkZXJNYXBDb25zdEl0
ZXJhdG9yKGNvbnN0IEhUVFBIZWFkZXJNYXAmIHRhYmxlLCBDb21tb25IZWFkZXJzSGFzaE1hcFR5
cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbW1vbkhlYWRlcnNJdCwgVW5jb21tb25IZWFkZXJzSGFzaE1h
cFR5cGU6OmNvbnN0X2l0ZXJhdG9yIHVuY29tbW9uSGVhZGVyc0l0KQorICAgICAgICAgICAgOiBt
X3RhYmxlKHRhYmxlKQorICAgICAgICAgICAgLCBtX2NvbW1vbkhlYWRlcnNJdChjb21tb25IZWFk
ZXJzSXQpCisgICAgICAgICAgICAsIG1fdW5jb21tb25IZWFkZXJzSXQodW5jb21tb25IZWFkZXJz
SXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVwZGF0ZUtleVZhbHVlKG1fY29tbW9uSGVhZGVy
c0l0KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBLZXlWYWx1ZSB7CisgICAgICAgICAg
ICBTdHJpbmcga2V5OworICAgICAgICAgICAgYm9vbCBrZXlJc0NvbW1vbkhlYWRlcjsKKyAgICAg
ICAgICAgIEhUVFBIZWFkZXJOYW1lIGtleUFzSFRUUEhlYWRlck5hbWU7CisgICAgICAgICAgICBT
dHJpbmcgdmFsdWU7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgS2V5VmFsdWUqIGdldCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCgqdGhpcyAhPSBtX3RhYmxlLmVu
ZCgpKTsKKyAgICAgICAgICAgIHJldHVybiAmbV9rZXlWYWx1ZTsKKyAgICAgICAgfQorICAgICAg
ICBjb25zdCBLZXlWYWx1ZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9Cisg
ICAgICAgIGNvbnN0IEtleVZhbHVlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7
IH0KKworICAgICAgICBIVFRQSGVhZGVyTWFwQ29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2NvbW1vbkhlYWRlcnNJdCAhPSBtX3RhYmxlLm1f
Y29tbW9uSGVhZGVycy5lbmQoKSkgeworICAgICAgICAgICAgICAgIGlmICh1cGRhdGVLZXlWYWx1
ZSgrK21fY29tbW9uSGVhZGVyc0l0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgKyttX3VuY29tbW9uSGVhZGVy
c0l0OworCisgICAgICAgICAgICB1cGRhdGVLZXlWYWx1ZShtX3VuY29tbW9uSGVhZGVyc0l0KTsK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBIVFRQSGVhZGVyTWFwQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBIVFRQSGVhZGVyTWFwQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnNJdCA9PSBvdGhlci5tX2NvbW1vbkhlYWRl
cnNJdCAmJiBtX3VuY29tbW9uSGVhZGVyc0l0ID09IG90aGVyLm1fdW5jb21tb25IZWFkZXJzSXQ7
CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgdXBkYXRlS2V5VmFsdWUo
Q29tbW9uSGVhZGVyc0hhc2hNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGl0ID09IG1fdGFibGUuY29tbW9uSGVhZGVycygpLmVuZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1fa2V5VmFsdWUua2V5ID0g
aHR0cEhlYWRlck5hbWVTdHJpbmcoaXQtPmtleSkudG9TdHJpbmdXaXRob3V0Q29weWluZygpOwor
ICAgICAgICAgICAgbV9rZXlWYWx1ZS5rZXlJc0NvbW1vbkhlYWRlciA9IHRydWU7CisgICAgICAg
ICAgICBtX2tleVZhbHVlLmtleUFzSFRUUEhlYWRlck5hbWUgPSBpdC0+a2V5OworICAgICAgICAg
ICAgbV9rZXlWYWx1ZS52YWx1ZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIGJvb2wgdXBkYXRlS2V5VmFsdWUoVW5jb21tb25IZWFkZXJz
SGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoaXQgPT0gbV90YWJsZS51bmNvbW1vbkhlYWRlcnMoKS5lbmQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBtX2tleVZhbHVlLmtleSA9IGl0LT5rZXk7Cisg
ICAgICAgICAgICBtX2tleVZhbHVlLmtleUlzQ29tbW9uSGVhZGVyID0gZmFsc2U7CisgICAgICAg
ICAgICBtX2tleVZhbHVlLnZhbHVlID0gaXQtPnZhbHVlOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtX3RhYmxlOwor
ICAgICAgICBDb21tb25IZWFkZXJzSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIG1fY29tbW9u
SGVhZGVyc0l0OworICAgICAgICBVbmNvbW1vbkhlYWRlcnNIYXNoTWFwVHlwZTo6Y29uc3RfaXRl
cmF0b3IgbV91bmNvbW1vbkhlYWRlcnNJdDsKKyAgICAgICAgS2V5VmFsdWUgbV9rZXlWYWx1ZTsK
KyAgICB9OworICAgIHR5cGVkZWYgSFRUUEhlYWRlck1hcENvbnN0SXRlcmF0b3IgY29uc3RfaXRl
cmF0b3I7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBIVFRQSGVhZGVyTWFwKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgfkhUVFBIZWFkZXJNYXAoKTsKQEAgLTU0LDEwICsxMjcsMTQgQEAgcHVibGljOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBjb3B5RGF0
YSgpIGNvbnN0OwogICAgIHZvaWQgYWRvcHQoc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFkSFRU
UEhlYWRlck1hcERhdGE+KTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
aGVhZGVycy5pc0VtcHR5KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGVh
ZGVycy5zaXplKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NvbW1v
bkhlYWRlcnMuaXNFbXB0eSgpICYmIG1fdW5jb21tb25IZWFkZXJzLmlzRW1wdHkoKTsgfQorICAg
IGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21tb25IZWFkZXJzLnNpemUoKSArIG1fdW5j
b21tb25IZWFkZXJzLnNpemUoKTsgfQogCi0gICAgdm9pZCBjbGVhcigpIHsgbV9oZWFkZXJzLmNs
ZWFyKCk7IH0KKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fY29tbW9uSGVhZGVy
cy5jbGVhcigpOworICAgICAgICBtX3VuY29tbW9uSGVhZGVycy5jbGVhcigpOworICAgIH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpOwpAQCAtNjUsMjMgKzE0MiwyNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgZ2V0KEhUVFBIZWFkZXJOYW1lKSBjb25zdDsKICAgICB2b2lkIHNldChI
VFRQSGVhZGVyTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBhZGQoSFRUUEhl
YWRlck5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIGJvb2wgY29udGFpbnMoSFRUUEhl
YWRlck5hbWUpIGNvbnN0OwotICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoSFRUUEhlYWRlck5hbWUp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmVtb3ZlKEhUVFBIZWFkZXJOYW1lKTsK
IAogICAgIC8vIEluc3RlYWQgb2YgcGFzc2luZyBhIHN0cmluZyBsaXRlcmFsIHRvIGFueSBvZiB0
aGVzZSBmdW5jdGlvbnMsIGp1c3QgdXNlIGEgSFRUUEhlYWRlck5hbWUgaW5zdGVhZC4KICAgICB0
ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiBTdHJpbmcgZ2V0KGNvbnN0IGNoYXIgKCYpW2xlbmd0aF0p
IGNvbnN0ID0gZGVsZXRlOwogICAgIHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+IHZvaWQgc2V0KGNv
bnN0IGNoYXIgKCYpW2xlbmd0aF0sIGNvbnN0IFN0cmluZyYpID0gZGVsZXRlOwogICAgIHRlbXBs
YXRlPHNpemVfdCBsZW5ndGg+IGJvb2wgY29udGFpbnMoY29uc3QgY2hhciAoJilbbGVuZ3RoXSkg
PSBkZWxldGU7Ci0gICAgdGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4gY29uc3RfaXRlcmF0b3IgZmlu
ZChjb25zdCBjaGFyKCYpW2xlbmd0aF0pID0gZGVsZXRlOwogICAgIHRlbXBsYXRlPHNpemVfdCBs
ZW5ndGg+IGJvb2wgcmVtb3ZlKGNvbnN0IGNoYXIgKCYpW2xlbmd0aF0pID0gZGVsZXRlOwogCi0g
ICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcnMuYmVnaW4o
KTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVycy5l
bmQoKTsgfQorICAgIGNvbnN0IENvbW1vbkhlYWRlcnNIYXNoTWFwVHlwZSYgY29tbW9uSGVhZGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fY29tbW9uSGVhZGVyczsgfQorICAgIGNvbnN0IFVuY29tbW9u
SGVhZGVyc0hhc2hNYXBUeXBlJiB1bmNvbW1vbkhlYWRlcnMoKSBjb25zdCB7IHJldHVybiBtX3Vu
Y29tbW9uSGVhZGVyczsgfQorICAgIENvbW1vbkhlYWRlcnNIYXNoTWFwVHlwZSYgY29tbW9uSGVh
ZGVycygpIHsgcmV0dXJuIG1fY29tbW9uSGVhZGVyczsgfQorICAgIFVuY29tbW9uSGVhZGVyc0hh
c2hNYXBUeXBlJiB1bmNvbW1vbkhlYWRlcnMoKSB7IHJldHVybiBtX3VuY29tbW9uSGVhZGVyczsg
fQorCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVy
YXRvcigqdGhpcywgbV9jb21tb25IZWFkZXJzLmJlZ2luKCksIG1fdW5jb21tb25IZWFkZXJzLmJl
Z2luKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3Rf
aXRlcmF0b3IoKnRoaXMsIG1fY29tbW9uSGVhZGVycy5lbmQoKSwgbV91bmNvbW1vbkhlYWRlcnMu
ZW5kKCkpOyB9CiAKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhUVFBIZWFkZXJN
YXAmIGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGIpCiAgICAgewotICAgICAgICByZXR1cm4gYS5t
X2hlYWRlcnMgPT0gYi5tX2hlYWRlcnM7CisgICAgICAgIHJldHVybiBhLm1fY29tbW9uSGVhZGVy
cyA9PSBiLm1fY29tbW9uSGVhZGVycyAmJiBhLm1fdW5jb21tb25IZWFkZXJzID09IGIubV91bmNv
bW1vbkhlYWRlcnM7CiAgICAgfQogCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBI
VFRQSGVhZGVyTWFwJiBhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBiKQpAQCAtOTAsMTAgKzE3MSw4
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgLy8gRklYTUU6IEluc3RlYWQgb2Yg
aGF2aW5nIGEgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4sIHdlIGNvdWxkIGhhdmUgdHdvIGhhc2gg
bWFwcywKLSAgICAvLyBvbmUgSGFzaE1hcDxIVFRQSGVhZGVyTmFtZSwgU3RyaW5nPiBmb3IgY29t
bW9uIGhlYWRlcnMgYW5kIGFub3RoZXIgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZm9yCi0gICAg
Ly8gbGVzcyBjb21tb24gaGVhZGVycy4KLSAgICBIYXNoTWFwVHlwZSBtX2hlYWRlcnM7CisgICAg
Q29tbW9uSGVhZGVyc0hhc2hNYXBUeXBlIG1fY29tbW9uSGVhZGVyczsKKyAgICBVbmNvbW1vbkhl
YWRlcnNIYXNoTWFwVHlwZSBtX3VuY29tbW9uSGVhZGVyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAKaW5kZXggYTYwMWNhODVkNTA1MjVlNDE4OTA1OGI5MzA4M2E5ZjEzMGRhY2JmNS4uNDYw
N2E0ZTU0NDRkYWQ1MDQzMTIzZmI0ZDVkMmRhNDBjYTJmYzM2MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKQEAgLTQ2Nyw4ICs0NjcsMTMg
QEAgYm9vbCBBcmd1bWVudENvZGVyPFBsdWdpbkluZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVy
JiBkZWNvZGVyLCBQbHVnaW5JbmZvJiBwbHUKIAogdm9pZCBBcmd1bWVudENvZGVyPEhUVFBIZWFk
ZXJNYXA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIVFRQSGVhZGVy
TWFwJiBoZWFkZXJNYXApCiB7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
aGVhZGVyTWFwLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBoZWFkZXJN
YXApIHsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihoZWFkZXJNYXAuY29t
bW9uSGVhZGVycygpLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBoZWFk
ZXJNYXAuY29tbW9uSGVhZGVycygpKSB7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShrZXlW
YWx1ZVBhaXIua2V5KTsKKyAgICAgICAgZW5jb2RlciA8PCBrZXlWYWx1ZVBhaXIudmFsdWU7Cisg
ICAgfQorICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhlYWRlck1hcC51bmNv
bW1vbkhlYWRlcnMoKS5zaXplKCkpOworICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogaGVh
ZGVyTWFwLnVuY29tbW9uSGVhZGVycygpKSB7CiAgICAgICAgIGVuY29kZXIgPDwga2V5VmFsdWVQ
YWlyLmtleTsKICAgICAgICAgZW5jb2RlciA8PCBrZXlWYWx1ZVBhaXIudmFsdWU7CiAgICAgfQpA
QCAtNDc2LDExICs0ODEsMjcgQEAgdm9pZCBBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIVFRQSGUKIAogYm9vbCBBcmd1
bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVy
LCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXApCiB7Ci0gICAgdWludDY0X3Qgc2l6ZTsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQorICAgIHVpbnQ2NF90IGNvbW1vbkhlYWRlcnNTaXpl
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tbW9uSGVhZGVyc1NpemUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbW1vbkhlYWRlcnNT
aXplOyArK2kpIHsKKyAgICAgICAgSFRUUEhlYWRlck5hbWUgbmFtZTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUVudW0obmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBoZWFkZXJNYXAuY29tbW9uSGVh
ZGVycygpLmFkZChuYW1lLCB2YWx1ZSk7CisgICAgfQorCisgICAgdWludDY0X3QgdW5jb21tb25I
ZWFkZXJzU2l6ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVuY29tbW9uSGVhZGVyc1NpemUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdW5jb21tb25IZWFkZXJzU2l6
ZTsgKytpKSB7CiAgICAgICAgIFN0cmluZyBuYW1lOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKG5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDg5LDcgKzUxMCw3IEBA
IGJvb2wgQXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciYgZGVjb2RlciwgSFRUUEhlYWRlck1hCiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFs
dWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGhlYWRlck1hcC5zZXQo
bmFtZSwgdmFsdWUpOworICAgICAgICBoZWFkZXJNYXAudW5jb21tb25IZWFkZXJzKCkuYWRkKG5h
bWUsIHZhbHVlKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240491</attachid>
            <date>2014-10-27 12:18:28 -0700</date>
            <delta_ts>2014-10-27 13:26:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138079-20141027121835.patch</filename>
            <type>text/plain</type>
            <size>29881</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk3M2ExOTYxYWE1YTFkOGVjNDA5NDQ1
NjUwOTRlZjQyZGNkOTc1YzIuLmE4MDZhODM5MTg4YTZiNTA5Y2I2ZjdmMjgxZGRlNWQ5MjEzZmEy
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMTAtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ugc2VwYXJhdGUgSGFzaE1hcHMgZm9yIGNvbW1vbiBh
bmQgdW5jb21tb24gaGVhZGVycyBpbiBIVFRQSGVhZGVyTWFwCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgwNzkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgSGFzaFRyYWl0cyBmb3IgQysrMTEgc3Ry
b25nIGVudW0gdHlwZXMuIFVzaW5nIGludGVnZXIgSGFzaFRyYWl0cyBmb3IKKyAgICAgICAgc3Ry
b25nIGVudW1zIHdvdWxkIGJlIGluY29udmVuaWVudCBhcyBpdCB3b3VsZCByZXF1aXJlIGNhc3Rp
bmcgYmV0d2VlbgorICAgICAgICBpbnRlZ2VyIGFuZCBzdHJvbmcgZW51bSB0eXBlcy4KKworICAg
ICAgICAqIHd0Zi9IYXNoVHJhaXRzLmg6CisgICAgICAgIChXVEY6OlN0cm9uZ0VudW1IYXNoVHJh
aXRzOjplbXB0eVZhbHVlKToKKyAgICAgICAgKFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM6OmNv
bnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRz
Ojppc0RlbGV0ZWRWYWx1ZSk6CisKIDIwMTQtMTAtMjUgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNz
Lndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHRpbWVsaW5lcyBzaG91
bGQgbm90IGNvdW50IHRpbWUgZWxhcHNlZCB3aGlsZSBwYXVzZWQgaW4gdGhlIGRlYnVnZ2VyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggMGZjZDIxYWJlNGE4MjkwY2E0MGM1ZWQ0NDE5NWZkNDkzNWViMGU2MS4uODVm
OGU4ZmEyMzNlMGE0OWI1ZmNiOTBiM2IyYWYzYmNlNzRjMjBmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDc1IEBACisyMDE0LTEwLTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIHNlcGFyYXRlIEhhc2hNYXBzIGZvciBjb21tb24gYW5kIHVuY29tbW9uIGhl
YWRlcnMgaW4gSFRUUEhlYWRlck1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM4MDc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIHNlcGFyYXRlIEhhc2hNYXBzIGZvciBjb21tb24gYW5kIHVuY29t
bW9uIGhlYWRlcnMgaW4gSFRUUEhlYWRlck1hcDoKKyAgICAgICAgLSBhIChmYXN0ZXIpIEhhc2hN
YXA8SFRUUEhlYWRlck1hcCwgU3RyaW5nPiBmb3IgY29tbW9uIEhUVFAgaGVhZGVycworICAgICAg
ICAtIGEgSGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBmb3IgdW5jb21t
b24gb25lcworCisgICAgICAgIFRoaXMgYXZvaWRzIGhhdmluZyB0byBjb25zdHJ1Y3QgU3RyaW5n
cyBmcm9tIEhUVFBIZWFkZXJNYXAgdmFsdWVzIGZvcgorICAgICAgICBzdG9yaW5nLiBUaGlzIGFs
c28gbWVhbnMgd2UgaGF2ZSBsZXNzIGlzb2xhdGVkIFN0cmluZyBjb3BpZXMgdG8gZG8gd2hlbgor
ICAgICAgICBjcmVhdGluZyBjcm9zcy10aHJlYWQgZGF0YS4gVGhlIGNvbW1vbiBoZWFkZXJzIEhh
c2hNYXAgc2hvdWxkIGFsc28gYmUKKyAgICAgICAgYSBiaXQgbW9yZSBlZmZpY2llbnQgZHVlIHRv
IGZhc3RlciBoYXNoaW5nIGFuZCBmYXN0ZXIga2V5IGNvbXBhcmlzb24gaW4KKyAgICAgICAgY2Fz
ZSBvZiBjb2xsaXNpb24uCisKKyAgICAgICAgU29tZSBjYWxscyBzaXRlcyBjYW4gYWxzbyBiZW5l
Zml0IGZyb20gaGF2aW5nIGRpcmVjdCBhY2Nlc3MgdG8gY29tbW9uCisgICAgICAgIGhlYWRlcnMg
b2YgdGhlIHJlcXVlc3QgaW4gSFRUUEhlYWRlck5hbWUgdHlwZS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgYSBuZXcgSFRUUEhlYWRlck1hcENvbnN0SXRlcmF0b3IgaXRlcmF0b3IgdHlwZSBm
b3IKKyAgICAgICAgSFRUUEhlYWRlck1hcCBzbyB0aGF0IGNhbGwgc2l0ZXMgdGhhdCBkbyBub3Qg
bmVlZCAvIHdhbnQgdG8gZGlzdGluZ3Vpc2gKKyAgICAgICAgY29tbW9uIC8gdW5jb21tb24gaGVh
ZGVycyBzdGlsbCBkbyBub3QgbmVlZCB0by4gVGhleSBjYW4ga2VlcCB1c2luZworICAgICAgICBt
b2Rlcm4gQysrIGxvb3BzIG92ZXIgSFRUUEhlYWRlck1hcCBvYmplY3RzIGFuZCBnZXQgPFN0cmlu
ZywgU3RyaW5nPgorICAgICAgICBrZXkvdmFsdWUgcGFpcnMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5B
Y2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzT25BY2Nlc3NDb250cm9sU2lt
cGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCk6CisgICAgICAgIEhhdmUgaXNPbkFjY2Vzc0NvbnRy
b2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KCkgdGFrZSBhCisgICAgICAgIEhUVFBIZWFk
ZXJOYW1lIGluIGFyZ3VtZW50IGluc3RlYWQgb2YgYSBTdHJpbmcgYXMgb25seSBjb21tb24gaGVh
ZGVycworICAgICAgICBhcmUgaW4gdGhlIHdoaXRlbGlzdC4KKworICAgICAgICAoV2ViQ29yZTo6
aXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QpOgorICAgICAgICBDYWxsIGlzT25BY2Nl
c3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCgpIG9ubHkgZm9yIGNvbW1vbgor
ICAgICAgICBIVFRQIGhlYWRlcnMuCisKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmg6CisgICAgICAgIEhhdmUgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0
SGVhZGVyV2hpdGVsaXN0KCkgdGFrZSBhCisgICAgICAgIEhUVFBIZWFkZXJOYW1lIGluIGFyZ3Vt
ZW50IGluc3RlYWQgb2YgYSBTdHJpbmcgYXMgb25seSBjb21tb24gaGVhZGVycworICAgICAgICBh
cmUgaW4gdGhlIHdoaXRlbGlzdC4KKworICAgICAgICAqIGxvYWRlci9Dcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMpOgorICAgICAgICBD
YWxsIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCgpIG9ubHkg
Zm9yIGNvbW1vbgorICAgICAgICBIVFRQIGhlYWRlcnMuCisKKyAgICAgICAgKiBsb2FkZXIvRG9j
dW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnJlc3Bv
bnNlUmVjZWl2ZWQpOgorICAgICAgICBDYWxsIGh0dHBIZWFkZXJGaWVsZHMoKS5jb21tb25IZWFk
ZXJzKCkuZmluZCgpIGluc3RlYWQgb2YKKyAgICAgICAgaHR0cEhlYWRlckZpZWxkcygpLmZpbmQo
KSBhcyB3ZSBhcmUgbG9va2luZyBmb3IgYSBjb21tb24gaGVhZGVyLgorICAgICAgICBIVFRQSGVh
ZGVyTWFwOjpmaW5kKEhUVFBIZWFkZXJOYW1lKSB3YXMgcmVtb3ZlZCBub3cgdGhhdCB3ZSBoYXZl
IGEKKyAgICAgICAgSGFzaE1hcCBkZWRpY2F0ZWQgdG8gY29tbW9uIGhlYWRlcnMuCisKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZSk6CisgICAgICAgIFVwZGF0ZSBhcmd1
bWVudCB0eXBlIHRvIGJlIGEgSFRUUEhlYWRlck5hbWUgaW5zdGVhZCBvZiBhIFN0cmluZyBhcwor
ICAgICAgICBvbmx5IGNvbW1vbiBIVFRQIGhlYWRlcnMgY2FuIGJlIGlnbm9yZWQgZm9yIGNhY2hl
IHJldXNlLiBUaGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gYWxyZWFkeSBkZWFsdCB3aXRoIEhU
VFBIZWFkZXJOYW1lIHR5cGUgYW5kIGhhZCB0bworICAgICAgICBjYWxsIGZpbmRIVFRQSGVhZGVy
TmFtZSgpLiBUaGlzIGlzIG5vIGxvbmdlciBuZWVkZWQgbm93IHRoYXQgdGhlCisgICAgICAgIGNh
bGwgc2l0ZSBub3cgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gY29tbW9uIGhlYWRlcnMgaW4gSFRUUEhl
YWRlck5hbWUKKyAgICAgICAgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVz
b3VyY2U6OmNhblJldXNlKToKKyAgICAgICAgLSBPbmx5IGNhbGwgc2hvdWxkSWdub3JlSGVhZGVy
Rm9yQ2FjaGVSZXVzZSgpIGZvciBjb21tb24gSFRUUCBoZWFkZXJzLgorICAgICAgICAtIFNsaWdo
dGx5IG9wdGltaXplIHRoZSBzZWNvbmQgbG9vcCAodGhlIG9uZSBvdmVyIG9sZEhlYWRlck1hcCkg
dG8gb25seQorICAgICAgICAgIGNoZWNrIHRoYXQgdGhlIGtleSBpcyBwcmVzZW50IGluIG5ld0hl
YWRlck1hcCwgd2l0aG91dCBhY3R1YWxseQorICAgICAgICAgIGNvbXBhcmluZyB0aGUgU3RyaW5n
IHZhbHVlcy4gSWYgdGhlIFN0cmluZyB2YWx1ZXMgd2VyZSBkaWZmZXJlbnQsIHRoZQorICAgICAg
ICAgIGZpcnN0IGxvb3Agd291bGQgaGF2ZSBzZWVuIGl0IGFscmVhZHkgYW5kIHdlIHdvdWxkIGhh
dmUgcmV0dXJuZWQKKyAgICAgICAgICBlYXJseS4KKwogMjAxNC0xMC0yNyAgQW5kcmVhcyBLbGlu
ZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBjYW5Db250YWluRml4ZWRQb3Np
dGlvbk9iamVjdHMoKSB0byBSZW5kZXJFbGVtZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDNlNjY3ZTZiY2Zm
ZjNmYTgwMmFiMDBkMDA3YTM0ZmViMDJkN2Q3OTQuLmMxYzlhNzBmMmZhNTFmMzJjMDRmMTVmMjY3
MjcxODc2OGQ4YzRiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNC0xMC0yNSAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBzZXBhcmF0ZSBI
YXNoTWFwcyBmb3IgY29tbW9uIGFuZCB1bmNvbW1vbiBoZWFkZXJzIGluIEhUVFBIZWFkZXJNYXAK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODA3OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0
aGUgV0syIElQQyBIVFRQSGVhZGVyTWFwIHNlcmlhbGl6YXRpb24gLyBkZXNlcmlhbGl6YXRpb24g
Y29kZQorICAgICAgICB0byBsZXZlcmFnZSB0aGUgZmFjdCB0aGF0IEhUVFBIZWFkZXJNYXAgbm93
IHN0b3JlcyBjb21tb24gSFRUUCBoZWFkZXJzCisgICAgICAgIGFuZCB1bmNvbW1vbiBvbmUgaW4g
c2VwYXJhdGUgSGFzaE1hcHMuIFRoaXMgc3BlZWRzIHVwIGRlc2VyaWFsaXphdGlvbgorICAgICAg
ICBhcyB3ZSBubyBsb25nZXIgbmVlZCB0byBjYWxsIGZpbmRIVFRQSGVhZGVyTmFtZSgpIGZvciBl
dmVyeSBkZWNvZGVkCisgICAgICAgIGhlYWRlci4gV2UgYWxyZWFkeSBrbm93IGlmIHRoZSBoZWFk
ZXIgaXMgYSBjb21tb24gb25lIG9yIG5vdCwgYW5kIGlmCisgICAgICAgIGl0IGlzIHRoZW4gd2Ug
YWxyZWFkeSBoYXZlIGEgSFRUUEhlYWRlck5hbWUgdHlwZSBpbnN0ZWFkIG9mIGEgU3RyaW5nLgor
CisgICAgICAgIEkgc2VlIHRoYXQgd2Ugc3BlbmQgfjQwJSBsZXNzIHRpbWUgaW4gSFRUUEhlYWRl
ck1hcCBkZWNvZGluZyB3aGVuCisgICAgICAgIGxvYWRpbmcgaHR0cDovL2ZsaWNrci5jb20vZXhw
bG9yZSwgd2hpbGUgdGhlIGVuY29kaW5nIHRha2VzIGFib3V0CisgICAgICAgIHRoZSBzYW1lIGFt
b3VudCBvZiB0aW1lIGFzIGJlZm9yZS4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+
OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+Ojpk
ZWNvZGUpOgorCiAyMDE0LTEwLTI0ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCB0aGUgaU9TIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoVHJhaXRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKaW5kZXggMDM2
N2FkY2IxNjIxMGUwN2UyOTMyMTViYzYyZGRiNmNiYzZmYTkzMC4uZGQzMDc4ZTMyNDViMmUzYTA2
YjY3OWExYWU0N2Y0ZGQ2NDY3NjVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRy
YWl0cy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaApAQCAtODgsNiArODgsMTUg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8VD4KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShUIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgo
KSAtIDE7IH0KIH07CiAKKy8vIENhbiBiZSB1c2VkIHdpdGggc3Ryb25nIGVudW1zLCBhbGxvd3Mg
emVybyBhcyBrZXkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU3Ryb25nRW51bUhhc2hU
cmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0czxUPiB7CisgICAgdXNpbmcgVW5kZXJseWluZ1R5cGUg
PSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxUPjo6dHlwZTsKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgc3RhdGljIFQgZW1wdHlWYWx1
ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8VW5kZXJseWlu
Z1R5cGU+OjptYXgoKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUo
VCYgc2xvdCkgeyBzbG90ID0gc3RhdGljX2Nhc3Q8VD4oc3RkOjpudW1lcmljX2xpbWl0czxVbmRl
cmx5aW5nVHlwZT46Om1heCgpIC0gMSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShUIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBzdGF0aWNfY2FzdDxUPihzdGQ6Om51bWVyaWNf
bGltaXRzPFVuZGVybHlpbmdUeXBlPjo6bWF4KCkgLSAxKTsgfQorfTsKKwogdGVtcGxhdGU8dHlw
ZW5hbWUgUD4gc3RydWN0IEhhc2hUcmFpdHM8UCo+IDogR2VuZXJpY0hhc2hUcmFpdHM8UCo+IHsK
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKICAgICBzdGF0
aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoUComIHNsb3QpIHsgc2xvdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UCo+KC0xKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAzYWY0N2U0NWExNTZm
MWQ2ZDM1MTJiOTRmZjVlNDE5MGY2NTY0MGVlLi4yZDA2ZjYzOGU2ODhjYWUzYzczYTBhMGUzMDBj
NTU5MjkyZGU4MWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtODk0LDYgKzg5NCw3IEBAIF9f
Wk43V2ViQ29yZTIwVXNlckdlc3R1cmVJbmRpY2F0b3I3c19zdGF0ZUUKIF9fWk43V2ViQ29yZTIw
VXNlckdlc3R1cmVJbmRpY2F0b3JDMUVOU18yNlByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlRVBO
U184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yRDFFdgogX19a
TjdXZWJDb3JlMjBkZWxldGVFbXB0eURpcmVjdG9yeUVSS04zV1RGNlN0cmluZ0UKK19fWk43V2Vi
Q29yZTIwaHR0cEhlYWRlck5hbWVTdHJpbmdFTlNfMTRIVFRQSGVhZGVyTmFtZUUKIF9fWk43V2Vi
Q29yZTIwbG9va3NMaWtlQWJzb2x1dGVVUkxFUDhOU1N0cmluZwogX19aTjdXZWJDb3JlMjBtYWtl
UkdCQTMyRnJvbUZsb2F0c0VmZmZmCiBfX1pON1dlYkNvcmUyMHByZXZpb3VzTGluZVBvc2l0aW9u
RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FaU5TXzEyRWRpdGFibGVUeXBlRQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAppbmRleCA3ZTU3
OTlkNWU3ZDQ1ODRiZGE3ZTAzY2QzNmI4NDhjMzAyOWI4MGIwLi42OWY2MGZjYzI5MmJkMTAzNGRi
ODFhNzE3YTlhZWFjNjk3ODEzNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcApAQCAtNDQsMjQgKzQ0LDI1IEBAIGJvb2wgaXNP
bkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0TWV0aG9kV2hpdGVsaXN0KGNvbnN0IFN0cmluZyYg
bWV0aG9kKQogICAgIHJldHVybiBtZXRob2QgPT0gIkdFVCIgfHwgbWV0aG9kID09ICJIRUFEIiB8
fCBtZXRob2QgPT0gIlBPU1QiOwogfQogCi1ib29sIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVx
dWVzdEhlYWRlcldoaXRlbGlzdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCitib29sIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChI
VFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShuYW1lLCAiYWNjZXB0IikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgImFjY2VwdC1sYW5ndWFnZSIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJjb250ZW50LWxhbmd1YWdlIikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgIm9yaWdpbiIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJyZWZl
cmVyIikpCisgICAgc3dpdGNoIChuYW1lKSB7CisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6QWNj
ZXB0OgorICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkFjY2VwdExhbmd1YWdlOgorICAgIGNhc2Ug
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMYW5ndWFnZToKKyAgICBjYXNlIEhUVFBIZWFkZXJOYW1l
OjpPcmlnaW46CisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6UmVmZXJlcjoKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAvLyBQcmVmbGlnaHQgaXMgcmVxdWlyZWQgZm9yIE1JTUUgdHlwZXMg
dGhhdCBjYW4gbm90IGJlIHNlbnQgdmlhIGZvcm0gc3VibWlzc2lvbi4KLSAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgImNvbnRlbnQtdHlwZSIpKSB7CisgICAgY2FzZSBIVFRQSGVhZGVy
TmFtZTo6Q29udGVudFR5cGU6IHsKKyAgICAgICAgLy8gUHJlZmxpZ2h0IGlzIHJlcXVpcmVkIGZv
ciBNSU1FIHR5cGVzIHRoYXQgY2FuIG5vdCBiZSBzZW50IHZpYSBmb3JtIHN1Ym1pc3Npb24uCiAg
ICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUodmFs
dWUpOwogICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJhcHBsaWNh
dGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKQogICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UobWltZVR5cGUsICJtdWx0aXBhcnQvZm9ybS1kYXRhIikKICAgICAgICAgICAgIHx8IGVx
dWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAidGV4dC9wbGFpbiIpOwogICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
fQogCiBib29sIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXApCkBAIC03MCw3ICs3MSw3IEBA
IGJvb2wgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBtZXRo
b2QsIGNvbnN0IEhUVFBIZWFkZXJNYXAmCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZv
ciAoY29uc3QgYXV0byYgaGVhZGVyIDogaGVhZGVyTWFwKSB7Ci0gICAgICAgIGlmICghaXNPbkFj
Y2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGhlYWRlci5rZXksIGhlYWRl
ci52YWx1ZSkpCisgICAgICAgIGlmICghaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUgfHwgIWlz
T25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChoZWFkZXIua2V5QXNI
VFRQSGVhZGVyTmFtZS52YWx1ZSgpLCBoZWFkZXIudmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3Nz
T3JpZ2luQWNjZXNzQ29udHJvbC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2lu
QWNjZXNzQ29udHJvbC5oCmluZGV4IGYwMzU0ZTUxMzFlMmU5YTcxN2M5NTJlZTIwZGEzOThmOTU0
NzE0ZjQuLjkwZjliZTZiZjUzNWZkMzFjZDU1NWRmYzFjNGExMjQ1OTQzYjA3ZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgKQEAgLTM3
LDEzICszNywxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5n
LCBDYXNlRm9sZGluZ0hhc2g+IEhUVFBIZWFkZXJTZXQ7CiAKIGNsYXNzIEhUVFBIZWFkZXJNYXA7
CitlbnVtIGNsYXNzIEhUVFBIZWFkZXJOYW1lOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xh
c3MgUmVzb3VyY2VSZXNwb25zZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBib29sIGlzU2lt
cGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBI
VFRQSGVhZGVyTWFwJik7CiBib29sIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdE1ldGhv
ZFdoaXRlbGlzdChjb25zdCBTdHJpbmcmKTsKLWJvb2wgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVS
ZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Citib29sIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlz
dChIVFRQSGVhZGVyTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiBib29sIGlzT25BY2Nlc3ND
b250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QoY29uc3QgU3RyaW5nJik7CiAKIHZvaWQgdXBk
YXRlUmVxdWVzdEZvckFjY2Vzc0NvbnRyb2woUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlPcmln
aW4qLCBTdG9yZWRDcmVkZW50aWFscyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKaW5kZXggNTE2ZjExZjE2
MmJlZWIzMDAyZmQ2ZWUwOGM3NGI0ZGNhODU1YjA4MC4uOGQxZWM0MmYzYTEwZjAyZmUwYTg5YTQy
YTE2NGFkNmZiZmM1NjUyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcApAQCAtMTI3LDcgKzEyNyw5IEBA
IGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3NzT3Jp
Z2luTWV0aG9kKGNvbnN0IFN0cmluZyYKIGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRD
YWNoZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiBy
ZXF1ZXN0SGVhZGVycywgU3RyaW5nJiBlcnJvckRlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGZv
ciAoY29uc3QgYXV0byYgaGVhZGVyIDogcmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgaWYgKCFt
X2hlYWRlcnMuY29udGFpbnMoaGVhZGVyLmtleSkgJiYgIWlzT25BY2Nlc3NDb250cm9sU2ltcGxl
UmVxdWVzdEhlYWRlcldoaXRlbGlzdChoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpKSB7CisgICAg
ICAgIGlmIChoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZSAmJiBpc09uQWNjZXNzQ29udHJvbFNp
bXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUudmFs
dWUoKSwgaGVhZGVyLnZhbHVlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
IW1faGVhZGVycy5jb250YWlucyhoZWFkZXIua2V5KSkgewogICAgICAgICAgICAgZXJyb3JEZXNj
cmlwdGlvbiA9ICJSZXF1ZXN0IGhlYWRlciBmaWVsZCAiICsgaGVhZGVyLmtleSArICIgaXMgbm90
IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcAppbmRleCA2YmUyNzUzODFlNmQyNjgyYzkyNDMyMzQ4NGFiM2Q2ZTQ1NGIwYmVhLi40
MGFlNTk0NGViZDdmNTQ3Yjk0NWM5NGE3ZDdkMjljOGJmMTlhZDMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKQEAgLTYwNSw4ICs2MDUsOSBAQCB2b2lkIERvY3Vt
ZW50TG9hZGVyOjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29u
c3QgUmVzb3VyY2VSZQogICAgIGlmICh3aWxsTG9hZEZhbGxiYWNrKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIGl0ID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmZpbmQoSFRUUEhl
YWRlck5hbWU6OlhGcmFtZU9wdGlvbnMpOwotICAgIGlmIChpdCAhPSByZXNwb25zZS5odHRwSGVh
ZGVyRmllbGRzKCkuZW5kKCkpIHsKKyAgICBjb25zdCBhdXRvJiBjb21tb25IZWFkZXJzID0gcmVz
cG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmNvbW1vbkhlYWRlcnMoKTsKKyAgICBhdXRvIGl0ID0g
Y29tbW9uSGVhZGVycy5maW5kKEhUVFBIZWFkZXJOYW1lOjpYRnJhbWVPcHRpb25zKTsKKyAgICBp
ZiAoaXQgIT0gY29tbW9uSGVhZGVycy5lbmQoKSkgewogICAgICAgICBTdHJpbmcgY29udGVudCA9
IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKG1fbWFpblJlc291cmNlKTsKICAgICAgICAgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJj
ZUxvYWRlciA/IG1faWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXIgOiBtX21h
aW5SZXNvdXJjZS0+aWRlbnRpZmllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKaW5kZXggOTA1NGZlNzZhNGJhYjgwMTJiZDE0N2Q1
NjEyYTU3ZjhkMDUwMzUwOC4uNWYyODEzMmFlOGRjZWRiMzExMWRmNzM5YzI2ZDk0MTkxMTc1ZDZl
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3Vy
Y2UuY3BwCkBAIC0yMDMsMTIgKzIwMyw4IEBAIHZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnNldERh
dGFCdWZmZXJpbmdQb2xpY3koRGF0YUJ1ZmZlcmluZ1BvbGljeSBkYXRhQnVmZmVyaW5nCiAgICAg
bV9vcHRpb25zLnNldERhdGFCdWZmZXJpbmdQb2xpY3koZGF0YUJ1ZmZlcmluZ1BvbGljeSk7CiB9
CiAKLXN0YXRpYyBib29sIHNob3VsZElnbm9yZUhlYWRlckZvckNhY2hlUmV1c2UoY29uc3QgU3Ry
aW5nJiBoZWFkZXJOYW1lKQorc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVS
ZXVzZShIVFRQSGVhZGVyTmFtZSBuYW1lKQogewotICAgIEhUVFBIZWFkZXJOYW1lIG5hbWU7Ci0g
ICAgaWYgKCFmaW5kSFRUUEhlYWRlck5hbWUoaGVhZGVyTmFtZSwgbmFtZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQogICAgIHN3aXRjaCAobmFtZSkgewogICAgIC8vIEZJWE1FOiBUaGlzIGxp
c3Qgb2YgaGVhZGVycyB0aGF0IGRvbid0IGFmZmVjdCBjYWNoZSBwb2xpY3kgYWxtb3N0IGNlcnRh
aW5seSBpc24ndCBjb21wbGV0ZS4KICAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHQ6CkBA
IC0yNDYsMTIgKzI0MiwyMiBAQCBib29sIENhY2hlZFJhd1Jlc291cmNlOjpjYW5SZXVzZShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpIGNvbnN0CiAgICAgY29uc3QgSFRUUEhlYWRl
ck1hcCYgb2xkSGVhZGVycyA9IG1fcmVzb3VyY2VSZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKTsK
IAogICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogbmV3SGVhZGVycykgewotICAgICAgICBp
ZiAoIXNob3VsZElnbm9yZUhlYWRlckZvckNhY2hlUmV1c2UoaGVhZGVyLmtleSkgJiYgaGVhZGVy
LnZhbHVlICE9IG9sZEhlYWRlcnMuZ2V0KGhlYWRlci5rZXkpKQorICAgICAgICBpZiAoaGVhZGVy
LmtleUFzSFRUUEhlYWRlck5hbWUpIHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkSWdub3JlSGVh
ZGVyRm9yQ2FjaGVSZXVzZShoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZS52YWx1ZSgpKQorICAg
ICAgICAgICAgICAgICYmIGhlYWRlci52YWx1ZSAhPSBvbGRIZWFkZXJzLmNvbW1vbkhlYWRlcnMo
KS5nZXQoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUudmFsdWUoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGhlYWRlci52YWx1ZSAhPSBvbGRI
ZWFkZXJzLnVuY29tbW9uSGVhZGVycygpLmdldChoZWFkZXIua2V5KSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKKyAgICAvLyBGb3IgdGhpcyBzZWNvbmQgbG9vcCwgd2UgZG9u
J3QgYWN0dWFsbHkgbmVlZCB0byBjb21wYXJlIHZhbHVlcywgY2hlY2tpbmcgdGhhdCB0aGUKKyAg
ICAvLyBrZXkgaXMgY29udGFpbmVkIGluIG5ld0hlYWRlcnMgaXMgc3VmZmljaWVudCBkdWUgdG8g
dGhlIHByZXZpb3VzIGxvb3AuCiAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBvbGRIZWFk
ZXJzKSB7Ci0gICAgICAgIGlmICghc2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZShoZWFk
ZXIua2V5KSAmJiBoZWFkZXIudmFsdWUgIT0gbmV3SGVhZGVycy5nZXQoaGVhZGVyLmtleSkpCisg
ICAgICAgIGlmIChoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZSkgeworICAgICAgICAgICAgaWYg
KCFzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNlKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJO
YW1lLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgJiYgIW5ld0hlYWRlcnMuY29tbW9uSGVhZGVy
cygpLmNvbnRhaW5zKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lLnZhbHVlKCkpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICghbmV3SGVhZGVycy51
bmNvbW1vbkhlYWRlcnMoKS5jb250YWlucyhoZWFkZXIua2V5KSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvSFRUUEhlYWRlck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBIZWFkZXJNYXAuY3BwCmluZGV4IGIyZjVlMGNkNTFjY2UwYjk0OWY2YWYyOGEwZjgzMjU1
ZDBlNThlZjEuLmYxYTBkYzU0ZGRlOGViNWYyYjU0Y2UzYjdkYWRkZWU4MjgwMmVjY2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcApA
QCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUVFBIZWFk
ZXJNYXAuaCIKIAotI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgPHV0aWxp
dHk+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCkBAIC00OCw3NSArNDcsODUg
QEAgSFRUUEhlYWRlck1hcDo6fkhUVFBIZWFkZXJNYXAoKQogc3RkOjp1bmlxdWVfcHRyPENyb3Nz
VGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IEhUVFBIZWFkZXJNYXA6OmNvcHlEYXRhKCkgY29uc3QK
IHsKICAgICBhdXRvIGRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPENyb3NzVGhyZWFkSFRUUEhlYWRl
ck1hcERhdGE+KCk7Ci0gICAgZGF0YS0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2hlYWRlcnMu
c2l6ZSgpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogKnRoaXMpCi0gICAgICAg
IGRhdGEtPnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIua2V5Lmlzb2xhdGVk
Q29weSgpLCBoZWFkZXIudmFsdWUuaXNvbGF0ZWRDb3B5KCkpKTsKKyAgICBkYXRhLT5jb21tb25I
ZWFkZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jb21tb25IZWFkZXJzLnNpemUoKSk7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBtX2NvbW1vbkhlYWRlcnMpCisgICAgICAgIGRh
dGEtPmNvbW1vbkhlYWRlcnMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGhlYWRlci5r
ZXksIGhlYWRlci52YWx1ZS5pc29sYXRlZENvcHkoKSkpOworCisgICAgZGF0YS0+dW5jb21tb25I
ZWFkZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV91bmNvbW1vbkhlYWRlcnMuc2l6ZSgpKTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IG1fdW5jb21tb25IZWFkZXJzKQorICAgICAg
ICBkYXRhLT51bmNvbW1vbkhlYWRlcnMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGhl
YWRlci5rZXkuaXNvbGF0ZWRDb3B5KCksIGhlYWRlci52YWx1ZS5pc29sYXRlZENvcHkoKSkpOwog
CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKIHZvaWQgSFRUUEhlYWRlck1hcDo6YWRvcHQoc3RkOjp1
bmlxdWVfcHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IGRhdGEpCiB7Ci0gICAgbV9o
ZWFkZXJzLmNsZWFyKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGhlYWRlciA6ICpkYXRhKQotICAgICAg
ICBtX2hlYWRlcnMuYWRkKFdURjo6bW92ZShoZWFkZXIuZmlyc3QpLCBXVEY6Om1vdmUoaGVhZGVy
LnNlY29uZCkpOwotfQorICAgIG1fY29tbW9uSGVhZGVycy5jbGVhcigpOworICAgIG1fdW5jb21t
b25IZWFkZXJzLmNsZWFyKCk7CiAKLXN0YXRpYyBTdHJpbmcgaW50ZXJuSFRUUEhlYWRlck5hbWVT
dHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lU3RyaW5nKQotewotICAgIEhUVFBIZWFkZXJOYW1lIGhl
YWRlck5hbWU7Ci0gICAgaWYgKCFmaW5kSFRUUEhlYWRlck5hbWUobmFtZVN0cmluZywgaGVhZGVy
TmFtZSkpCi0gICAgICAgIHJldHVybiBuYW1lU3RyaW5nOworICAgIGZvciAoYXV0byYgaGVhZGVy
IDogZGF0YS0+Y29tbW9uSGVhZGVycykKKyAgICAgICAgbV9jb21tb25IZWFkZXJzLmFkZChoZWFk
ZXIuZmlyc3QsIFdURjo6bW92ZShoZWFkZXIuc2Vjb25kKSk7CiAKLSAgICByZXR1cm4gaHR0cEhl
YWRlck5hbWVTdHJpbmcoaGVhZGVyTmFtZSkudG9TdHJpbmdXaXRob3V0Q29weWluZygpOworICAg
IGZvciAoYXV0byYgaGVhZGVyIDogZGF0YS0+dW5jb21tb25IZWFkZXJzKQorICAgICAgICBtX3Vu
Y29tbW9uSGVhZGVycy5hZGQoV1RGOjptb3ZlKGhlYWRlci5maXJzdCksIFdURjo6bW92ZShoZWFk
ZXIuc2Vjb25kKSk7CiB9CiAKIFN0cmluZyBIVFRQSGVhZGVyTWFwOjpnZXQoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICAgIHJldHVybiBtX2hlYWRlcnMuZ2V0KGludGVybkhUVFBIZWFk
ZXJOYW1lU3RyaW5nKG5hbWUpKTsKKyAgICBIVFRQSGVhZGVyTmFtZSBoZWFkZXJOYW1lOworICAg
IGlmICghZmluZEhUVFBIZWFkZXJOYW1lKG5hbWUsIGhlYWRlck5hbWUpKQorICAgICAgICByZXR1
cm4gbV91bmNvbW1vbkhlYWRlcnMuZ2V0KG5hbWUpOworICAgIHJldHVybiBtX2NvbW1vbkhlYWRl
cnMuZ2V0KGhlYWRlck5hbWUpOwogfQogCiB2b2lkIEhUVFBIZWFkZXJNYXA6OnNldChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgbV9oZWFkZXJzLnNldChp
bnRlcm5IVFRQSGVhZGVyTmFtZVN0cmluZyhuYW1lKSwgdmFsdWUpOworICAgIEhUVFBIZWFkZXJO
YW1lIGhlYWRlck5hbWU7CisgICAgaWYgKCFmaW5kSFRUUEhlYWRlck5hbWUobmFtZSwgaGVhZGVy
TmFtZSkpIHsKKyAgICAgICAgbV91bmNvbW1vbkhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbW1vbkhlYWRlcnMuc2V0KGhlYWRlck5hbWUs
IHZhbHVlKTsKIH0KIAogdm9pZCBIVFRQSGVhZGVyTWFwOjphZGQoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9oZWFkZXJzLmFk
ZChpbnRlcm5IVFRQSGVhZGVyTmFtZVN0cmluZyhuYW1lKSwgdmFsdWUpOwotICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlICsgIiwgIiArIHZhbHVlOworICAgIEhUVFBIZWFkZXJOYW1lIGhlYWRl
ck5hbWU7CisgICAgaWYgKCFmaW5kSFRUUEhlYWRlck5hbWUobmFtZSwgaGVhZGVyTmFtZSkpIHsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBtX3VuY29tbW9uSGVhZGVycy5hZGQobmFtZSwgdmFsdWUp
OworICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKyAiLCAiICsgdmFsdWU7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWRkKGhlYWRlck5hbWUsIHZhbHVlKTsKIH0KIAog
U3RyaW5nIEhUVFBIZWFkZXJNYXA6OmdldChIVFRQSGVhZGVyTmFtZSBuYW1lKSBjb25zdAogewot
ICAgIGF1dG8gaXQgPSBmaW5kKG5hbWUpOwotICAgIGlmIChpdCA9PSBlbmQoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICByZXR1cm4gbV9j
b21tb25IZWFkZXJzLmdldChuYW1lKTsKIH0KIAogdm9pZCBIVFRQSGVhZGVyTWFwOjpzZXQoSFRU
UEhlYWRlck5hbWUgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBtX2hlYWRlcnMu
c2V0KGh0dHBIZWFkZXJOYW1lU3RyaW5nKG5hbWUpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwg
dmFsdWUpOworICAgIG1fY29tbW9uSGVhZGVycy5zZXQobmFtZSwgdmFsdWUpOwogfQogCiBib29s
IEhUVFBIZWFkZXJNYXA6OmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lIG5hbWUpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1faGVhZGVycy5jb250YWlucyhodHRwSGVhZGVyTmFtZVN0cmluZyhuYW1lKS50
b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpOworICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnMuY29u
dGFpbnMobmFtZSk7CiB9CiAKLUhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIEhUVFBIZWFk
ZXJNYXA6OmZpbmQoSFRUUEhlYWRlck5hbWUgbmFtZSkgY29uc3QKK2Jvb2wgSFRUUEhlYWRlck1h
cDo6cmVtb3ZlKEhUVFBIZWFkZXJOYW1lIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1faGVhZGVycy5m
aW5kKGh0dHBIZWFkZXJOYW1lU3RyaW5nKG5hbWUpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7
CisgICAgcmV0dXJuIG1fY29tbW9uSGVhZGVycy5yZW1vdmUobmFtZSk7CiB9CiAKLWJvb2wgSFRU
UEhlYWRlck1hcDo6cmVtb3ZlKEhUVFBIZWFkZXJOYW1lIG5hbWUpCit2b2lkIEhUVFBIZWFkZXJN
YXA6OmFkZChIVFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAg
IHJldHVybiBtX2hlYWRlcnMucmVtb3ZlKGh0dHBIZWFkZXJOYW1lU3RyaW5nKG5hbWUpLnRvU3Ry
aW5nV2l0aG91dENvcHlpbmcoKSk7CisgICAgYXV0byByZXN1bHQgPSBtX2NvbW1vbkhlYWRlcnMu
YWRkKG5hbWUsIHZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArICIsICIgKyB2
YWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuaAppbmRleCA2ZTEwNTFlMWZkMjg2NmFmYjYw
Yzk4OGVhMmQxYWU0ZTEyYzM0NWNkLi5jYzExMmM0YmNiNzc1NTQ5YTI1ZTY4ODUxOTlkMGU0MGYy
N2FhNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBI
ZWFkZXJNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFk
ZXJNYXAuaApAQCAtMjcsOCArMjcsMTAgQEAKICNpZm5kZWYgSFRUUEhlYWRlck1hcF9oCiAjZGVm
aW5lIEhUVFBIZWFkZXJNYXBfaAogCisjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCiAjaW5j
bHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CkBA
IC0zNiwxNiArMzgsODYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIGNsYXNzIEhU
VFBIZWFkZXJOYW1lOwotCi10eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+
PiBDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhOworc3RydWN0IENyb3NzVGhyZWFkSFRUUEhl
YWRlck1hcERhdGEgeworICAgIFZlY3RvcjxzdGQ6OnBhaXI8SFRUUEhlYWRlck5hbWUsIFN0cmlu
Zz4+IGNvbW1vbkhlYWRlcnM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+
IHVuY29tbW9uSGVhZGVyczsKK307CiAKIC8vIEZJWE1FOiBOb3QgZXZlcnkgaGVhZGVyIGZpdHMg
aW50byBhIG1hcC4gTm90YWJseSwgbXVsdGlwbGUgU2V0LUNvb2tpZSBoZWFkZXIgZmllbGRzIGFy
ZSBuZWVkZWQgdG8gc2V0IG11bHRpcGxlIGNvb2tpZXMuCiAKIGNsYXNzIEhUVFBIZWFkZXJNYXAg
ewotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBI
YXNoTWFwVHlwZTsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEhhc2hNYXBUeXBlOjpjb25zdF9pdGVy
YXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8SFRUUEhlYWRlck5hbWUs
IFN0cmluZywgV1RGOjpJbnRIYXNoPEhUVFBIZWFkZXJOYW1lPiwgV1RGOjpTdHJvbmdFbnVtSGFz
aFRyYWl0czxIVFRQSGVhZGVyTmFtZT4+IENvbW1vbkhlYWRlcnNIYXNoTWFwOworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBVbmNvbW1vbkhlYWRl
cnNIYXNoTWFwOworCisgICAgY2xhc3MgSFRUUEhlYWRlck1hcENvbnN0SXRlcmF0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgSFRUUEhlYWRlck1hcENvbnN0SXRlcmF0b3IoY29uc3QgSFRUUEhl
YWRlck1hcCYgdGFibGUsIENvbW1vbkhlYWRlcnNIYXNoTWFwOjpjb25zdF9pdGVyYXRvciBjb21t
b25IZWFkZXJzSXQsIFVuY29tbW9uSGVhZGVyc0hhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIHVuY29t
bW9uSGVhZGVyc0l0KQorICAgICAgICAgICAgOiBtX3RhYmxlKHRhYmxlKQorICAgICAgICAgICAg
LCBtX2NvbW1vbkhlYWRlcnNJdChjb21tb25IZWFkZXJzSXQpCisgICAgICAgICAgICAsIG1fdW5j
b21tb25IZWFkZXJzSXQodW5jb21tb25IZWFkZXJzSXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHVwZGF0ZUtleVZhbHVlKG1fY29tbW9uSGVhZGVyc0l0KTsKKyAgICAgICAgfQorCisgICAgICAg
IHN0cnVjdCBLZXlWYWx1ZSB7CisgICAgICAgICAgICBTdHJpbmcga2V5OworICAgICAgICAgICAg
T3B0aW9uYWw8SFRUUEhlYWRlck5hbWU+IGtleUFzSFRUUEhlYWRlck5hbWU7CisgICAgICAgICAg
ICBTdHJpbmcgdmFsdWU7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgS2V5VmFsdWUqIGdl
dCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCgqdGhpcyAhPSBtX3RhYmxl
LmVuZCgpKTsKKyAgICAgICAgICAgIHJldHVybiAmbV9rZXlWYWx1ZTsKKyAgICAgICAgfQorICAg
ICAgICBjb25zdCBLZXlWYWx1ZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9
CisgICAgICAgIGNvbnN0IEtleVZhbHVlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0
KCk7IH0KKworICAgICAgICBIVFRQSGVhZGVyTWFwQ29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2NvbW1vbkhlYWRlcnNJdCAhPSBtX3RhYmxl
Lm1fY29tbW9uSGVhZGVycy5lbmQoKSkgeworICAgICAgICAgICAgICAgIGlmICh1cGRhdGVLZXlW
YWx1ZSgrK21fY29tbW9uSGVhZGVyc0l0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgKyttX3VuY29tbW9uSGVh
ZGVyc0l0OworCisgICAgICAgICAgICB1cGRhdGVLZXlWYWx1ZShtX3VuY29tbW9uSGVhZGVyc0l0
KTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBIVFRQSGVhZGVyTWFwQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBIVFRQSGVhZGVyTWFwQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnNJdCA9PSBvdGhlci5tX2NvbW1vbkhl
YWRlcnNJdCAmJiBtX3VuY29tbW9uSGVhZGVyc0l0ID09IG90aGVyLm1fdW5jb21tb25IZWFkZXJz
SXQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgdXBkYXRlS2V5VmFs
dWUoQ29tbW9uSGVhZGVyc0hhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoaXQgPT0gbV90YWJsZS5jb21tb25IZWFkZXJzKCkuZW5kKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbV9rZXlWYWx1ZS5rZXkgPSBo
dHRwSGVhZGVyTmFtZVN0cmluZyhpdC0+a2V5KS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7Cisg
ICAgICAgICAgICBtX2tleVZhbHVlLmtleUFzSFRUUEhlYWRlck5hbWUgPSBpdC0+a2V5OworICAg
ICAgICAgICAgbV9rZXlWYWx1ZS52YWx1ZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGJvb2wgdXBkYXRlS2V5VmFsdWUoVW5jb21tb25I
ZWFkZXJzSGFzaE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChpdCA9PSBtX3RhYmxlLnVuY29tbW9uSGVhZGVycygpLmVuZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1fa2V5VmFsdWUua2V5ID0gaXQtPmtleTsK
KyAgICAgICAgICAgIG1fa2V5VmFsdWUua2V5QXNIVFRQSGVhZGVyTmFtZSA9IE51bGxvcHQ7Cisg
ICAgICAgICAgICBtX2tleVZhbHVlLnZhbHVlID0gaXQtPnZhbHVlOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtX3Rh
YmxlOworICAgICAgICBDb21tb25IZWFkZXJzSGFzaE1hcDo6Y29uc3RfaXRlcmF0b3IgbV9jb21t
b25IZWFkZXJzSXQ7CisgICAgICAgIFVuY29tbW9uSGVhZGVyc0hhc2hNYXA6OmNvbnN0X2l0ZXJh
dG9yIG1fdW5jb21tb25IZWFkZXJzSXQ7CisgICAgICAgIEtleVZhbHVlIG1fa2V5VmFsdWU7Cisg
ICAgfTsKKyAgICB0eXBlZGVmIEhUVFBIZWFkZXJNYXBDb25zdEl0ZXJhdG9yIGNvbnN0X2l0ZXJh
dG9yOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgSFRUUEhlYWRlck1hcCgpOwogICAgIFdFQkNPUkVf
RVhQT1JUIH5IVFRQSGVhZGVyTWFwKCk7CkBAIC01NCwxMCArMTI2LDE0IEBAIHB1YmxpYzoKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4gY29weURhdGEo
KSBjb25zdDsKICAgICB2b2lkIGFkb3B0KHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZEhUVFBI
ZWFkZXJNYXBEYXRhPik7CiAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2hl
YWRlcnMuaXNFbXB0eSgpOyB9Ci0gICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2hlYWRl
cnMuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jb21tb25I
ZWFkZXJzLmlzRW1wdHkoKSAmJiBtX3VuY29tbW9uSGVhZGVycy5pc0VtcHR5KCk7IH0KKyAgICBp
bnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbW9uSGVhZGVycy5zaXplKCkgKyBtX3VuY29t
bW9uSGVhZGVycy5zaXplKCk7IH0KIAotICAgIHZvaWQgY2xlYXIoKSB7IG1faGVhZGVycy5jbGVh
cigpOyB9CisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX2NvbW1vbkhlYWRlcnMu
Y2xlYXIoKTsKKyAgICAgICAgbV91bmNvbW1vbkhlYWRlcnMuY2xlYXIoKTsKKyAgICB9CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZ2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZhbHVlKTsKQEAgLTY1LDIzICsxNDEsMjcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9F
WFBPUlQgU3RyaW5nIGdldChIVFRQSGVhZGVyTmFtZSkgY29uc3Q7CiAgICAgdm9pZCBzZXQoSFRU
UEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQgYWRkKEhUVFBIZWFk
ZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICBib29sIGNvbnRhaW5zKEhUVFBIZWFk
ZXJOYW1lKSBjb25zdDsKLSAgICBjb25zdF9pdGVyYXRvciBmaW5kKEhUVFBIZWFkZXJOYW1lKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHJlbW92ZShIVFRQSGVhZGVyTmFtZSk7CiAK
ICAgICAvLyBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBzdHJpbmcgbGl0ZXJhbCB0byBhbnkgb2YgdGhl
c2UgZnVuY3Rpb25zLCBqdXN0IHVzZSBhIEhUVFBIZWFkZXJOYW1lIGluc3RlYWQuCiAgICAgdGVt
cGxhdGU8c2l6ZV90IGxlbmd0aD4gU3RyaW5nIGdldChjb25zdCBjaGFyICgmKVtsZW5ndGhdKSBj
b25zdCA9IGRlbGV0ZTsKICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiB2b2lkIHNldChjb25z
dCBjaGFyICgmKVtsZW5ndGhdLCBjb25zdCBTdHJpbmcmKSA9IGRlbGV0ZTsKICAgICB0ZW1wbGF0
ZTxzaXplX3QgbGVuZ3RoPiBib29sIGNvbnRhaW5zKGNvbnN0IGNoYXIgKCYpW2xlbmd0aF0pID0g
ZGVsZXRlOwotICAgIHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+IGNvbnN0X2l0ZXJhdG9yIGZpbmQo
Y29uc3QgY2hhcigmKVtsZW5ndGhdKSA9IGRlbGV0ZTsKICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVu
Z3RoPiBib29sIHJlbW92ZShjb25zdCBjaGFyICgmKVtsZW5ndGhdKSA9IGRlbGV0ZTsKIAotICAg
IGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXJzLmJlZ2luKCk7
IH0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcnMuZW5k
KCk7IH0KKyAgICBjb25zdCBDb21tb25IZWFkZXJzSGFzaE1hcCYgY29tbW9uSGVhZGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fY29tbW9uSGVhZGVyczsgfQorICAgIGNvbnN0IFVuY29tbW9uSGVhZGVy
c0hhc2hNYXAmIHVuY29tbW9uSGVhZGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdW5jb21tb25IZWFk
ZXJzOyB9CisgICAgQ29tbW9uSGVhZGVyc0hhc2hNYXAmIGNvbW1vbkhlYWRlcnMoKSB7IHJldHVy
biBtX2NvbW1vbkhlYWRlcnM7IH0KKyAgICBVbmNvbW1vbkhlYWRlcnNIYXNoTWFwJiB1bmNvbW1v
bkhlYWRlcnMoKSB7IHJldHVybiBtX3VuY29tbW9uSGVhZGVyczsgfQorCisgICAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcigqdGhpcywgbV9jb21t
b25IZWFkZXJzLmJlZ2luKCksIG1fdW5jb21tb25IZWFkZXJzLmJlZ2luKCkpOyB9CisgICAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoKnRoaXMsIG1f
Y29tbW9uSGVhZGVycy5lbmQoKSwgbV91bmNvbW1vbkhlYWRlcnMuZW5kKCkpOyB9CiAKICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhUVFBIZWFkZXJNYXAmIGEsIGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIGIpCiAgICAgewotICAgICAgICByZXR1cm4gYS5tX2hlYWRlcnMgPT0gYi5tX2hl
YWRlcnM7CisgICAgICAgIHJldHVybiBhLm1fY29tbW9uSGVhZGVycyA9PSBiLm1fY29tbW9uSGVh
ZGVycyAmJiBhLm1fdW5jb21tb25IZWFkZXJzID09IGIubV91bmNvbW1vbkhlYWRlcnM7CiAgICAg
fQogCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIVFRQSGVhZGVyTWFwJiBhLCBj
b25zdCBIVFRQSGVhZGVyTWFwJiBiKQpAQCAtOTAsMTAgKzE3MCw4IEBAIHB1YmxpYzoKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgLy8gRklYTUU6IEluc3RlYWQgb2YgaGF2aW5nIGEgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4sIHdlIGNvdWxkIGhhdmUgdHdvIGhhc2ggbWFwcywKLSAgICAvLyBvbmUg
SGFzaE1hcDxIVFRQSGVhZGVyTmFtZSwgU3RyaW5nPiBmb3IgY29tbW9uIGhlYWRlcnMgYW5kIGFu
b3RoZXIgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZm9yCi0gICAgLy8gbGVzcyBjb21tb24gaGVh
ZGVycy4KLSAgICBIYXNoTWFwVHlwZSBtX2hlYWRlcnM7CisgICAgQ29tbW9uSGVhZGVyc0hhc2hN
YXAgbV9jb21tb25IZWFkZXJzOworICAgIFVuY29tbW9uSGVhZGVyc0hhc2hNYXAgbV91bmNvbW1v
bkhlYWRlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IGE2MDFjYTg1ZDUwNTI1
ZTQxODkwNThiOTMwODNhOWYxMzBkYWNiZjUuLjQ2MDdhNGU1NDQ0ZGFkNTA0MzEyM2ZiNGQ1ZDJk
YTQwY2EyZmMzNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCkBAIC00NjcsOCArNDY3LDEzIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxQbHVn
aW5JbmZvPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgUGx1Z2luSW5mbyYgcGx1
CiAKIHZvaWQgQXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlciwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVyTWFwKQogewotICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhlYWRlck1hcC5zaXplKCkpOwotICAgIGZv
ciAoYXV0byYga2V5VmFsdWVQYWlyIDogaGVhZGVyTWFwKSB7CisgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oaGVhZGVyTWFwLmNvbW1vbkhlYWRlcnMoKS5zaXplKCkpOworICAg
IGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogaGVhZGVyTWFwLmNvbW1vbkhlYWRlcnMoKSkgewor
ICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0oa2V5VmFsdWVQYWlyLmtleSk7CisgICAgICAgIGVu
Y29kZXIgPDwga2V5VmFsdWVQYWlyLnZhbHVlOworICAgIH0KKyAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihoZWFkZXJNYXAudW5jb21tb25IZWFkZXJzKCkuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IGhlYWRlck1hcC51bmNvbW1vbkhlYWRlcnMoKSkg
ewogICAgICAgICBlbmNvZGVyIDw8IGtleVZhbHVlUGFpci5rZXk7CiAgICAgICAgIGVuY29kZXIg
PDwga2V5VmFsdWVQYWlyLnZhbHVlOwogICAgIH0KQEAgLTQ3NiwxMSArNDgxLDI3IEBAIHZvaWQg
QXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5j
b2RlciwgY29uc3QgSFRUUEhlCiAKIGJvb2wgQXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgSFRUUEhlYWRlck1hcCYgaGVhZGVyTWFw
KQogewotICAgIHVpbnQ2NF90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkK
KyAgICB1aW50NjRfdCBjb21tb25IZWFkZXJzU2l6ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGNvbW1vbkhlYWRlcnNTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb21tb25IZWFkZXJzU2l6ZTsgKytpKSB7CisgICAgICAgIEhUVFBI
ZWFkZXJOYW1lIG5hbWU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKG5hbWUpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgaGVhZGVyTWFwLmNvbW1vbkhlYWRlcnMoKS5hZGQobmFtZSwgdmFsdWUpOwor
ICAgIH0KKworICAgIHVpbnQ2NF90IHVuY29tbW9uSGVhZGVyc1NpemU7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh1bmNvbW1vbkhlYWRlcnNTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHVuY29tbW9uSGVhZGVyc1NpemU7ICsraSkgewogICAgICAgICBTdHJpbmcg
bmFtZTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShuYW1lKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTQ4OSw3ICs1MTAsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8SFRUUEhl
YWRlck1hcD46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEhUVFBIZWFkZXJNYQog
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICBoZWFkZXJNYXAuc2V0KG5hbWUsIHZhbHVlKTsKKyAgICAgICAgaGVh
ZGVyTWFwLnVuY29tbW9uSGVhZGVycygpLmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240497</attachid>
            <date>2014-10-27 13:26:05 -0700</date>
            <delta_ts>2014-10-27 14:08:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138079-20141027132612.patch</filename>
            <type>text/plain</type>
            <size>29938</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1MjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk3M2ExOTYxYWE1YTFkOGVjNDA5NDQ1
NjUwOTRlZjQyZGNkOTc1YzIuLmU4MmY1OWJkYWQ5OTdlNWY5ZjFiYmQ1ODQxYzk5YzM2MmJiNmU2
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMTAtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ugc2VwYXJhdGUgSGFzaE1hcHMgZm9yIGNvbW1vbiBh
bmQgdW5jb21tb24gaGVhZGVycyBpbiBIVFRQSGVhZGVyTWFwCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgwNzkKKworICAgICAgICBSZXZpZXdlZCBi
eSBBbmRlcnMgQ2FybHNzb24uCisKKyAgICAgICAgQWRkIEhhc2hUcmFpdHMgZm9yIEMrKzExIHN0
cm9uZyBlbnVtIHR5cGVzLiBVc2luZyBpbnRlZ2VyIEhhc2hUcmFpdHMgZm9yCisgICAgICAgIHN0
cm9uZyBlbnVtcyB3b3VsZCBiZSBpbmNvbnZlbmllbnQgYXMgaXQgd291bGQgcmVxdWlyZSBjYXN0
aW5nIGJldHdlZW4KKyAgICAgICAgaW50ZWdlciBhbmQgc3Ryb25nIGVudW0gdHlwZXMuCisKKyAg
ICAgICAgKiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAgICAoV1RGOjpTdHJvbmdFbnVtSGFzaFRy
YWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzOjpj
b25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0
czo6aXNEZWxldGVkVmFsdWUpOgorCiAyMDE0LTEwLTI1ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bj
cy53YXNoaW5ndG9uLmVkdT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB0aW1lbGluZXMgc2hv
dWxkIG5vdCBjb3VudCB0aW1lIGVsYXBzZWQgd2hpbGUgcGF1c2VkIGluIHRoZSBkZWJ1Z2dlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDIzYjA2ZjM5N2FmYjIxZTIxZDdmNGY1ZjgwOTdiNzNjZjNiMGJmZDguLmM5
YTJiY2UxZmE5NjU2ZjNkYjJkMDgxM2RlYjE0NDBkNzNmODY3N2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw3NyBAQAogMjAxNC0xMC0yNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CisgICAgICAgIFVzZSBzZXBhcmF0ZSBIYXNoTWFwcyBmb3IgY29tbW9uIGFuZCB1bmNvbW1vbiBo
ZWFkZXJzIGluIEhUVFBIZWFkZXJNYXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzODA3OQorCisgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJs
c3Nvbi4KKworICAgICAgICBVc2Ugc2VwYXJhdGUgSGFzaE1hcHMgZm9yIGNvbW1vbiBhbmQgdW5j
b21tb24gaGVhZGVycyBpbiBIVFRQSGVhZGVyTWFwOgorICAgICAgICAtIGEgKGZhc3RlcikgSGFz
aE1hcDxIVFRQSGVhZGVyTWFwLCBTdHJpbmc+IGZvciBjb21tb24gSFRUUCBoZWFkZXJzCisgICAg
ICAgIC0gYSBIYXNoTWFwPFN0cmluZywgU3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IGZvciB1bmNv
bW1vbiBvbmVzCisKKyAgICAgICAgVGhpcyBhdm9pZHMgaGF2aW5nIHRvIGNvbnN0cnVjdCBTdHJp
bmdzIGZyb20gSFRUUEhlYWRlck1hcCB2YWx1ZXMgZm9yCisgICAgICAgIHN0b3JpbmcuIFRoaXMg
YWxzbyBtZWFucyB3ZSBoYXZlIGxlc3MgaXNvbGF0ZWQgU3RyaW5nIGNvcGllcyB0byBkbyB3aGVu
CisgICAgICAgIGNyZWF0aW5nIGNyb3NzLXRocmVhZCBkYXRhLiBUaGUgY29tbW9uIGhlYWRlcnMg
SGFzaE1hcCBzaG91bGQgYWxzbyBiZQorICAgICAgICBhIGJpdCBtb3JlIGVmZmljaWVudCBkdWUg
dG8gZmFzdGVyIGhhc2hpbmcgYW5kIGZhc3RlciBrZXkgY29tcGFyaXNvbiBpbgorICAgICAgICBj
YXNlIG9mIGNvbGxpc2lvbi4KKworICAgICAgICBTb21lIGNhbGxzIHNpdGVzIGNhbiBhbHNvIGJl
bmVmaXQgZnJvbSBoYXZpbmcgZGlyZWN0IGFjY2VzcyB0byBjb21tb24KKyAgICAgICAgaGVhZGVy
cyBvZiB0aGUgcmVxdWVzdCBpbiBIVFRQSGVhZGVyTmFtZSB0eXBlLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWRkcyBhIG5ldyBIVFRQSGVhZGVyTWFwQ29uc3RJdGVyYXRvciBpdGVyYXRvciB0eXBl
IGZvcgorICAgICAgICBIVFRQSGVhZGVyTWFwIHNvIHRoYXQgY2FsbCBzaXRlcyB0aGF0IGRvIG5v
dCBuZWVkIC8gd2FudCB0byBkaXN0aW5ndWlzaAorICAgICAgICBjb21tb24gLyB1bmNvbW1vbiBo
ZWFkZXJzIHN0aWxsIGRvIG5vdCBuZWVkIHRvLiBUaGV5IGNhbiBrZWVwIHVzaW5nCisgICAgICAg
IG1vZGVybiBDKysgbG9vcHMgb3ZlciBIVFRQSGVhZGVyTWFwIG9iamVjdHMgYW5kIGdldCA8U3Ry
aW5nLCBTdHJpbmc+CisgICAgICAgIGtleS92YWx1ZSBwYWlycy4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGxvYWRlci9Dcm9zc09yaWdp
bkFjY2Vzc0NvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNPbkFjY2Vzc0NvbnRyb2xT
aW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KToKKyAgICAgICAgSGF2ZSBpc09uQWNjZXNzQ29u
dHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoKSB0YWtlIGEKKyAgICAgICAgSFRUUEhl
YWRlck5hbWUgaW4gYXJndW1lbnQgaW5zdGVhZCBvZiBhIFN0cmluZyBhcyBvbmx5IGNvbW1vbiBo
ZWFkZXJzCisgICAgICAgIGFyZSBpbiB0aGUgd2hpdGVsaXN0LgorCisgICAgICAgIChXZWJDb3Jl
Ojppc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCk6CisgICAgICAgIENhbGwgaXNPbkFj
Y2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KCkgb25seSBmb3IgY29tbW9u
CisgICAgICAgIEhUVFAgaGVhZGVycy4KKworICAgICAgICAqIGxvYWRlci9Dcm9zc09yaWdpbkFj
Y2Vzc0NvbnRyb2wuaDoKKyAgICAgICAgSGF2ZSBpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVl
c3RIZWFkZXJXaGl0ZWxpc3QoKSB0YWtlIGEKKyAgICAgICAgSFRUUEhlYWRlck5hbWUgaW4gYXJn
dW1lbnQgaW5zdGVhZCBvZiBhIFN0cmluZyBhcyBvbmx5IGNvbW1vbiBoZWFkZXJzCisgICAgICAg
IGFyZSBpbiB0aGUgd2hpdGVsaXN0LgorCisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luUHJl
ZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVm
bGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyk6CisgICAgICAg
IENhbGwgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KCkgb25s
eSBmb3IgY29tbW9uCisgICAgICAgIEhUVFAgaGVhZGVycy4KKworICAgICAgICAqIGxvYWRlci9E
b2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6cmVz
cG9uc2VSZWNlaXZlZCk6CisgICAgICAgIENhbGwgaHR0cEhlYWRlckZpZWxkcygpLmNvbW1vbkhl
YWRlcnMoKS5maW5kKCkgaW5zdGVhZCBvZgorICAgICAgICBodHRwSGVhZGVyRmllbGRzKCkuZmlu
ZCgpIGFzIHdlIGFyZSBsb29raW5nIGZvciBhIGNvbW1vbiBoZWFkZXIuCisgICAgICAgIEhUVFBI
ZWFkZXJNYXA6OmZpbmQoSFRUUEhlYWRlck5hbWUpIHdhcyByZW1vdmVkIG5vdyB0aGF0IHdlIGhh
dmUgYQorICAgICAgICBIYXNoTWFwIGRlZGljYXRlZCB0byBjb21tb24gaGVhZGVycy4KKworICAg
ICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNlKToKKyAgICAgICAgVXBkYXRlIGFy
Z3VtZW50IHR5cGUgdG8gYmUgYSBIVFRQSGVhZGVyTmFtZSBpbnN0ZWFkIG9mIGEgU3RyaW5nIGFz
CisgICAgICAgIG9ubHkgY29tbW9uIEhUVFAgaGVhZGVycyBjYW4gYmUgaWdub3JlZCBmb3IgY2Fj
aGUgcmV1c2UuIFRoZQorICAgICAgICBpbXBsZW1lbnRhdGlvbiBhbHJlYWR5IGRlYWx0IHdpdGgg
SFRUUEhlYWRlck5hbWUgdHlwZSBhbmQgaGFkIHRvCisgICAgICAgIGNhbGwgZmluZEhUVFBIZWFk
ZXJOYW1lKCkuIFRoaXMgaXMgbm8gbG9uZ2VyIG5lZWRlZCBub3cgdGhhdCB0aGUKKyAgICAgICAg
Y2FsbCBzaXRlIG5vdyBoYXMgZGlyZWN0IGFjY2VzcyB0byBjb21tb24gaGVhZGVycyBpbiBIVFRQ
SGVhZGVyTmFtZQorICAgICAgICB0eXBlLgorCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdS
ZXNvdXJjZTo6Y2FuUmV1c2UpOgorICAgICAgICAtIE9ubHkgY2FsbCBzaG91bGRJZ25vcmVIZWFk
ZXJGb3JDYWNoZVJldXNlKCkgZm9yIGNvbW1vbiBIVFRQIGhlYWRlcnMuCisgICAgICAgIC0gU2xp
Z2h0bHkgb3B0aW1pemUgdGhlIHNlY29uZCBsb29wICh0aGUgb25lIG92ZXIgb2xkSGVhZGVyTWFw
KSB0byBvbmx5CisgICAgICAgICAgY2hlY2sgdGhhdCB0aGUga2V5IGlzIHByZXNlbnQgaW4gbmV3
SGVhZGVyTWFwLCB3aXRob3V0IGFjdHVhbGx5CisgICAgICAgICAgY29tcGFyaW5nIHRoZSBTdHJp
bmcgdmFsdWVzLiBJZiB0aGUgU3RyaW5nIHZhbHVlcyB3ZXJlIGRpZmZlcmVudCwgdGhlCisgICAg
ICAgICAgZmlyc3QgbG9vcCB3b3VsZCBoYXZlIHNlZW4gaXQgYWxyZWFkeSBhbmQgd2Ugd291bGQg
aGF2ZSByZXR1cm5lZAorICAgICAgICAgIGVhcmx5LgorCisyMDE0LTEwLTI3ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgUmVpbnRyb2R1Y2UgbnVsbCBjaGVjayBy
ZW1vdmVkIGluIHIxNzUyMjIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzODA4NwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggM2U2NjdlNmJjZmZmM2ZhODAyYWIwMGQw
MDdhMzRmZWIwMmQ3ZDc5NC4uNTEwZDA4ZGVmNjg1MzUwZTc3NjA0NTIxMTE5Y2NmNmMwZGI4ODU3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE0LTEwLTI1ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIHNlcGFyYXRlIEhhc2hNYXBzIGZvciBj
b21tb24gYW5kIHVuY29tbW9uIGhlYWRlcnMgaW4gSFRUUEhlYWRlck1hcAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MDc5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAgIFVwZGF0ZSB0aGUgV0syIElQQyBI
VFRQSGVhZGVyTWFwIHNlcmlhbGl6YXRpb24gLyBkZXNlcmlhbGl6YXRpb24gY29kZQorICAgICAg
ICB0byBsZXZlcmFnZSB0aGUgZmFjdCB0aGF0IEhUVFBIZWFkZXJNYXAgbm93IHN0b3JlcyBjb21t
b24gSFRUUCBoZWFkZXJzCisgICAgICAgIGFuZCB1bmNvbW1vbiBvbmUgaW4gc2VwYXJhdGUgSGFz
aE1hcHMuIFRoaXMgc3BlZWRzIHVwIGRlc2VyaWFsaXphdGlvbgorICAgICAgICBhcyB3ZSBubyBs
b25nZXIgbmVlZCB0byBjYWxsIGZpbmRIVFRQSGVhZGVyTmFtZSgpIGZvciBldmVyeSBkZWNvZGVk
CisgICAgICAgIGhlYWRlci4gV2UgYWxyZWFkeSBrbm93IGlmIHRoZSBoZWFkZXIgaXMgYSBjb21t
b24gb25lIG9yIG5vdCwgYW5kIGlmCisgICAgICAgIGl0IGlzIHRoZW4gd2UgYWxyZWFkeSBoYXZl
IGEgSFRUUEhlYWRlck5hbWUgdHlwZSBpbnN0ZWFkIG9mIGEgU3RyaW5nLgorCisgICAgICAgIEkg
c2VlIHRoYXQgd2Ugc3BlbmQgfjQwJSBsZXNzIHRpbWUgaW4gSFRUUEhlYWRlck1hcCBkZWNvZGlu
ZyB3aGVuCisgICAgICAgIGxvYWRpbmcgaHR0cDovL2ZsaWNrci5jb20vZXhwbG9yZSwgd2hpbGUg
dGhlIGVuY29kaW5nIHRha2VzIGFib3V0CisgICAgICAgIHRoZSBzYW1lIGFtb3VudCBvZiB0aW1l
IGFzIGJlZm9yZS4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
OgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjplbmNvZGUpOgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjpkZWNvZGUpOgorCiAy
MDE0LTEwLTI0ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIEZpeCB0aGUgaU9TIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJh
aXRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKaW5kZXggMDM2N2FkY2IxNjIxMGUw
N2UyOTMyMTViYzYyZGRiNmNiYzZmYTkzMC4uZGQzMDc4ZTMyNDViMmUzYTA2YjY3OWExYWU0N2Y0
ZGQ2NDY3NjVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaApAQCAtODgsNiArODgsMTUgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IFVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzIDogR2VuZXJp
Y0hhc2hUcmFpdHM8VD4KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShUIHZhbHVlKSB7
IHJldHVybiB2YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAtIDE7IH0KIH07
CiAKKy8vIENhbiBiZSB1c2VkIHdpdGggc3Ryb25nIGVudW1zLCBhbGxvd3MgemVybyBhcyBrZXku
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU3Ryb25nRW51bUhhc2hUcmFpdHMgOiBHZW5l
cmljSGFzaFRyYWl0czxUPiB7CisgICAgdXNpbmcgVW5kZXJseWluZ1R5cGUgPSB0eXBlbmFtZSBz
dGQ6OnVuZGVybHlpbmdfdHlwZTxUPjo6dHlwZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0
eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgc3RhdGljIFQgZW1wdHlWYWx1ZSgpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8VW5kZXJseWluZ1R5cGU+OjptYXgo
KSk7IH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVCYgc2xvdCkgeyBz
bG90ID0gc3RhdGljX2Nhc3Q8VD4oc3RkOjpudW1lcmljX2xpbWl0czxVbmRlcmx5aW5nVHlwZT46
Om1heCgpIC0gMSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShUIHZhbHVlKSB7
IHJldHVybiB2YWx1ZSA9PSBzdGF0aWNfY2FzdDxUPihzdGQ6Om51bWVyaWNfbGltaXRzPFVuZGVy
bHlpbmdUeXBlPjo6bWF4KCkgLSAxKTsgfQorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3Ry
dWN0IEhhc2hUcmFpdHM8UCo+IDogR2VuZXJpY0hhc2hUcmFpdHM8UCo+IHsKICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBjb25z
dHJ1Y3REZWxldGVkVmFsdWUoUComIHNsb3QpIHsgc2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UCo+
KC0xKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAzYWY0N2U0NWExNTZmMWQ2ZDM1MTJiOTRm
ZjVlNDE5MGY2NTY0MGVlLi4yZDA2ZjYzOGU2ODhjYWUzYzczYTBhMGUzMDBjNTU5MjkyZGU4MWZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtODk0LDYgKzg5NCw3IEBAIF9fWk43V2ViQ29yZTIw
VXNlckdlc3R1cmVJbmRpY2F0b3I3c19zdGF0ZUUKIF9fWk43V2ViQ29yZTIwVXNlckdlc3R1cmVJ
bmRpY2F0b3JDMUVOU18yNlByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlRVBOU184RG9jdW1lbnRF
CiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yRDFFdgogX19aTjdXZWJDb3JlMjBk
ZWxldGVFbXB0eURpcmVjdG9yeUVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTIwaHR0cEhl
YWRlck5hbWVTdHJpbmdFTlNfMTRIVFRQSGVhZGVyTmFtZUUKIF9fWk43V2ViQ29yZTIwbG9va3NM
aWtlQWJzb2x1dGVVUkxFUDhOU1N0cmluZwogX19aTjdXZWJDb3JlMjBtYWtlUkdCQTMyRnJvbUZs
b2F0c0VmZmZmCiBfX1pON1dlYkNvcmUyMHByZXZpb3VzTGluZVBvc2l0aW9uRVJLTlNfMTVWaXNp
YmxlUG9zaXRpb25FaU5TXzEyRWRpdGFibGVUeXBlRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAppbmRleCA3ZTU3OTlkNWU3ZDQ1ODRi
ZGE3ZTAzY2QzNmI4NDhjMzAyOWI4MGIwLi42OWY2MGZjYzI5MmJkMTAzNGRiODFhNzE3YTlhZWFj
Njk3ODEzNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5B
Y2Nlc3NDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5B
Y2Nlc3NDb250cm9sLmNwcApAQCAtNDQsMjQgKzQ0LDI1IEBAIGJvb2wgaXNPbkFjY2Vzc0NvbnRy
b2xTaW1wbGVSZXF1ZXN0TWV0aG9kV2hpdGVsaXN0KGNvbnN0IFN0cmluZyYgbWV0aG9kKQogICAg
IHJldHVybiBtZXRob2QgPT0gIkdFVCIgfHwgbWV0aG9kID09ICJIRUFEIiB8fCBtZXRob2QgPT0g
IlBPU1QiOwogfQogCi1ib29sIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldo
aXRlbGlzdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitib29sIGlz
T25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChIVFRQSGVhZGVyTmFt
ZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiYWNjZXB0IikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgImFj
Y2VwdC1sYW5ndWFnZSIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJjb250
ZW50LWxhbmd1YWdlIikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIm9yaWdp
biIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJyZWZlcmVyIikpCisgICAg
c3dpdGNoIChuYW1lKSB7CisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6QWNjZXB0OgorICAgIGNh
c2UgSFRUUEhlYWRlck5hbWU6OkFjY2VwdExhbmd1YWdlOgorICAgIGNhc2UgSFRUUEhlYWRlck5h
bWU6OkNvbnRlbnRMYW5ndWFnZToKKyAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpPcmlnaW46Cisg
ICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6UmVmZXJlcjoKICAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLyBQcmVmbGlnaHQgaXMgcmVxdWlyZWQgZm9yIE1JTUUgdHlwZXMgdGhhdCBjYW4gbm90
IGJlIHNlbnQgdmlhIGZvcm0gc3VibWlzc2lvbi4KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgImNvbnRlbnQtdHlwZSIpKSB7CisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6Q29udGVu
dFR5cGU6IHsKKyAgICAgICAgLy8gUHJlZmxpZ2h0IGlzIHJlcXVpcmVkIGZvciBNSU1FIHR5cGVz
IHRoYXQgY2FuIG5vdCBiZSBzZW50IHZpYSBmb3JtIHN1Ym1pc3Npb24uCiAgICAgICAgIFN0cmlu
ZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUodmFsdWUpOwogICAgICAg
ICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJhcHBsaWNhdGlvbi94LXd3dy1m
b3JtLXVybGVuY29kZWQiKQogICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5
cGUsICJtdWx0aXBhcnQvZm9ybS1kYXRhIikKICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdD
YXNlKG1pbWVUeXBlLCAidGV4dC9wbGFpbiIpOwogICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBib29sIGlz
U2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXApCkBAIC03MCw3ICs3MSw3IEBAIGJvb2wgaXNTaW1w
bGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEhU
VFBIZWFkZXJNYXAmCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoY29uc3QgYXV0
byYgaGVhZGVyIDogaGVhZGVyTWFwKSB7Ci0gICAgICAgIGlmICghaXNPbkFjY2Vzc0NvbnRyb2xT
aW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGhlYWRlci5rZXksIGhlYWRlci52YWx1ZSkpCisg
ICAgICAgIGlmICghaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUgfHwgIWlzT25BY2Nlc3NDb250
cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFt
ZS52YWx1ZSgpLCBoZWFkZXIudmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNz
Q29udHJvbC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJv
bC5oCmluZGV4IGYwMzU0ZTUxMzFlMmU5YTcxN2M5NTJlZTIwZGEzOThmOTU0NzE0ZjQuLjkwZjli
ZTZiZjUzNWZkMzFjZDU1NWRmYzFjNGExMjQ1OTQzYjA3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgKQEAgLTM3LDEzICszNywxNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGlu
Z0hhc2g+IEhUVFBIZWFkZXJTZXQ7CiAKIGNsYXNzIEhUVFBIZWFkZXJNYXA7CitlbnVtIGNsYXNz
IEhUVFBIZWFkZXJOYW1lOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VS
ZXNwb25zZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBib29sIGlzU2ltcGxlQ3Jvc3NPcmln
aW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFw
Jik7CiBib29sIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdE1ldGhvZFdoaXRlbGlzdChj
b25zdCBTdHJpbmcmKTsKLWJvb2wgaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVy
V2hpdGVsaXN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Citib29s
IGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChIVFRQSGVhZGVy
TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiBib29sIGlzT25BY2Nlc3NDb250cm9sUmVzcG9u
c2VIZWFkZXJXaGl0ZWxpc3QoY29uc3QgU3RyaW5nJik7CiAKIHZvaWQgdXBkYXRlUmVxdWVzdEZv
ckFjY2Vzc0NvbnRyb2woUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlPcmlnaW4qLCBTdG9yZWRD
cmVkZW50aWFscyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmln
aW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKaW5kZXggNTE2ZjExZjE2MmJlZWIzMDAyZmQ2
ZWUwOGM3NGI0ZGNhODU1YjA4MC4uOGQxZWM0MmYzYTEwZjAyZmUwYTg5YTQyYTE2NGFkNmZiZmM1
NjUyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlLmNwcApAQCAtMTI3LDcgKzEyNyw5IEBAIGJvb2wgQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luTWV0aG9kKGNv
bnN0IFN0cmluZyYKIGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFs
bG93c0Nyb3NzT3JpZ2luSGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0SGVhZGVy
cywgU3RyaW5nJiBlcnJvckRlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGZvciAoY29uc3QgYXV0
byYgaGVhZGVyIDogcmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29u
dGFpbnMoaGVhZGVyLmtleSkgJiYgIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRl
cldoaXRlbGlzdChoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpKSB7CisgICAgICAgIGlmIChoZWFk
ZXIua2V5QXNIVFRQSGVhZGVyTmFtZSAmJiBpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RI
ZWFkZXJXaGl0ZWxpc3QoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUudmFsdWUoKSwgaGVhZGVy
LnZhbHVlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIW1faGVhZGVycy5j
b250YWlucyhoZWFkZXIua2V5KSkgewogICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9ICJS
ZXF1ZXN0IGhlYWRlciBmaWVsZCAiICsgaGVhZGVyLmtleSArICIgaXMgbm90IGFsbG93ZWQgYnkg
QWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRl
eCA2YmUyNzUzODFlNmQyNjgyYzkyNDMyMzQ4NGFiM2Q2ZTQ1NGIwYmVhLi40MGFlNTk0NGViZDdm
NTQ3Yjk0NWM5NGE3ZDdkMjljOGJmMTlhZDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5jcHAKQEAgLTYwNSw4ICs2MDUsOSBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpy
ZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VS
ZQogICAgIGlmICh3aWxsTG9hZEZhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IGl0ID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmZpbmQoSFRUUEhlYWRlck5hbWU6OlhG
cmFtZU9wdGlvbnMpOwotICAgIGlmIChpdCAhPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCku
ZW5kKCkpIHsKKyAgICBjb25zdCBhdXRvJiBjb21tb25IZWFkZXJzID0gcmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkcygpLmNvbW1vbkhlYWRlcnMoKTsKKyAgICBhdXRvIGl0ID0gY29tbW9uSGVhZGVy
cy5maW5kKEhUVFBIZWFkZXJOYW1lOjpYRnJhbWVPcHRpb25zKTsKKyAgICBpZiAoaXQgIT0gY29t
bW9uSGVhZGVycy5lbmQoKSkgewogICAgICAgICBTdHJpbmcgY29udGVudCA9IGl0LT52YWx1ZTsK
ICAgICAgICAgQVNTRVJUKG1fbWFpblJlc291cmNlKTsKICAgICAgICAgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyID0gbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlciA/IG1f
aWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXIgOiBtX21haW5SZXNvdXJjZS0+
aWRlbnRpZmllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJhd1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
YXdSZXNvdXJjZS5jcHAKaW5kZXggOTA1NGZlNzZhNGJhYjgwMTJiZDE0N2Q1NjEyYTU3ZjhkMDUw
MzUwOC4uNWYyODEzMmFlOGRjZWRiMzExMWRmNzM5YzI2ZDk0MTkxMTc1ZDZlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCkBAIC0y
MDMsMTIgKzIwMyw4IEBAIHZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnNldERhdGFCdWZmZXJpbmdQ
b2xpY3koRGF0YUJ1ZmZlcmluZ1BvbGljeSBkYXRhQnVmZmVyaW5nCiAgICAgbV9vcHRpb25zLnNl
dERhdGFCdWZmZXJpbmdQb2xpY3koZGF0YUJ1ZmZlcmluZ1BvbGljeSk7CiB9CiAKLXN0YXRpYyBi
b29sIHNob3VsZElnbm9yZUhlYWRlckZvckNhY2hlUmV1c2UoY29uc3QgU3RyaW5nJiBoZWFkZXJO
YW1lKQorc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZShIVFRQSGVh
ZGVyTmFtZSBuYW1lKQogewotICAgIEhUVFBIZWFkZXJOYW1lIG5hbWU7Ci0gICAgaWYgKCFmaW5k
SFRUUEhlYWRlck5hbWUoaGVhZGVyTmFtZSwgbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQogICAgIHN3aXRjaCAobmFtZSkgewogICAgIC8vIEZJWE1FOiBUaGlzIGxpc3Qgb2YgaGVhZGVy
cyB0aGF0IGRvbid0IGFmZmVjdCBjYWNoZSBwb2xpY3kgYWxtb3N0IGNlcnRhaW5seSBpc24ndCBj
b21wbGV0ZS4KICAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHQ6CkBAIC0yNDYsMTIgKzI0
MiwyMiBAQCBib29sIENhY2hlZFJhd1Jlc291cmNlOjpjYW5SZXVzZShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIG5ld1JlcXVlc3QpIGNvbnN0CiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgb2xkSGVh
ZGVycyA9IG1fcmVzb3VyY2VSZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKTsKIAogICAgIGZvciAo
Y29uc3QgYXV0byYgaGVhZGVyIDogbmV3SGVhZGVycykgewotICAgICAgICBpZiAoIXNob3VsZEln
bm9yZUhlYWRlckZvckNhY2hlUmV1c2UoaGVhZGVyLmtleSkgJiYgaGVhZGVyLnZhbHVlICE9IG9s
ZEhlYWRlcnMuZ2V0KGhlYWRlci5rZXkpKQorICAgICAgICBpZiAoaGVhZGVyLmtleUFzSFRUUEhl
YWRlck5hbWUpIHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVS
ZXVzZShoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZS52YWx1ZSgpKQorICAgICAgICAgICAgICAg
ICYmIGhlYWRlci52YWx1ZSAhPSBvbGRIZWFkZXJzLmNvbW1vbkhlYWRlcnMoKS5nZXQoaGVhZGVy
LmtleUFzSFRUUEhlYWRlck5hbWUudmFsdWUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9IGVsc2UgaWYgKGhlYWRlci52YWx1ZSAhPSBvbGRIZWFkZXJzLnVuY29t
bW9uSGVhZGVycygpLmdldChoZWFkZXIua2V5KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKKyAgICAvLyBGb3IgdGhpcyBzZWNvbmQgbG9vcCwgd2UgZG9uJ3QgYWN0dWFsbHkg
bmVlZCB0byBjb21wYXJlIHZhbHVlcywgY2hlY2tpbmcgdGhhdCB0aGUKKyAgICAvLyBrZXkgaXMg
Y29udGFpbmVkIGluIG5ld0hlYWRlcnMgaXMgc3VmZmljaWVudCBkdWUgdG8gdGhlIHByZXZpb3Vz
IGxvb3AuCiAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBvbGRIZWFkZXJzKSB7Ci0gICAg
ICAgIGlmICghc2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZShoZWFkZXIua2V5KSAmJiBo
ZWFkZXIudmFsdWUgIT0gbmV3SGVhZGVycy5nZXQoaGVhZGVyLmtleSkpCisgICAgICAgIGlmICho
ZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZSkgeworICAgICAgICAgICAgaWYgKCFzaG91bGRJZ25v
cmVIZWFkZXJGb3JDYWNoZVJldXNlKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lLnZhbHVlKCkp
CisgICAgICAgICAgICAgICAgJiYgIW5ld0hlYWRlcnMuY29tbW9uSGVhZGVycygpLmNvbnRhaW5z
KGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lLnZhbHVlKCkpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICghbmV3SGVhZGVycy51bmNvbW1vbkhlYWRl
cnMoKS5jb250YWlucyhoZWFkZXIua2V5KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhl
YWRlck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJN
YXAuY3BwCmluZGV4IGIyZjVlMGNkNTFjY2UwYjk0OWY2YWYyOGEwZjgzMjU1ZDBlNThlZjEuLmYx
YTBkYzU0ZGRlOGViNWYyYjU0Y2UzYjdkYWRkZWU4MjgwMmVjY2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcApAQCAtMzEsNyArMzEs
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKIAot
I2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCkBAIC00OCw3NSArNDcsODUgQEAgSFRUUEhlYWRl
ck1hcDo6fkhUVFBIZWFkZXJNYXAoKQogc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFkSFRUUEhl
YWRlck1hcERhdGE+IEhUVFBIZWFkZXJNYXA6OmNvcHlEYXRhKCkgY29uc3QKIHsKICAgICBhdXRv
IGRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+KCk7
Ci0gICAgZGF0YS0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2hlYWRlcnMuc2l6ZSgpKTsKIAot
ICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogKnRoaXMpCi0gICAgICAgIGRhdGEtPnVuY2hl
Y2tlZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIua2V5Lmlzb2xhdGVkQ29weSgpLCBoZWFk
ZXIudmFsdWUuaXNvbGF0ZWRDb3B5KCkpKTsKKyAgICBkYXRhLT5jb21tb25IZWFkZXJzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9jb21tb25IZWFkZXJzLnNpemUoKSk7CisgICAgZm9yIChjb25z
dCBhdXRvJiBoZWFkZXIgOiBtX2NvbW1vbkhlYWRlcnMpCisgICAgICAgIGRhdGEtPmNvbW1vbkhl
YWRlcnMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGhlYWRlci5rZXksIGhlYWRlci52
YWx1ZS5pc29sYXRlZENvcHkoKSkpOworCisgICAgZGF0YS0+dW5jb21tb25IZWFkZXJzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV91bmNvbW1vbkhlYWRlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGhlYWRlciA6IG1fdW5jb21tb25IZWFkZXJzKQorICAgICAgICBkYXRhLT51bmNv
bW1vbkhlYWRlcnMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGhlYWRlci5rZXkuaXNv
bGF0ZWRDb3B5KCksIGhlYWRlci52YWx1ZS5pc29sYXRlZENvcHkoKSkpOwogCiAgICAgcmV0dXJu
IGRhdGE7CiB9CiAKIHZvaWQgSFRUUEhlYWRlck1hcDo6YWRvcHQoc3RkOjp1bmlxdWVfcHRyPENy
b3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IGRhdGEpCiB7Ci0gICAgbV9oZWFkZXJzLmNsZWFy
KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGhlYWRlciA6ICpkYXRhKQotICAgICAgICBtX2hlYWRlcnMu
YWRkKFdURjo6bW92ZShoZWFkZXIuZmlyc3QpLCBXVEY6Om1vdmUoaGVhZGVyLnNlY29uZCkpOwot
fQorICAgIG1fY29tbW9uSGVhZGVycy5jbGVhcigpOworICAgIG1fdW5jb21tb25IZWFkZXJzLmNs
ZWFyKCk7CiAKLXN0YXRpYyBTdHJpbmcgaW50ZXJuSFRUUEhlYWRlck5hbWVTdHJpbmcoY29uc3Qg
U3RyaW5nJiBuYW1lU3RyaW5nKQotewotICAgIEhUVFBIZWFkZXJOYW1lIGhlYWRlck5hbWU7Ci0g
ICAgaWYgKCFmaW5kSFRUUEhlYWRlck5hbWUobmFtZVN0cmluZywgaGVhZGVyTmFtZSkpCi0gICAg
ICAgIHJldHVybiBuYW1lU3RyaW5nOworICAgIGZvciAoYXV0byYgaGVhZGVyIDogZGF0YS0+Y29t
bW9uSGVhZGVycykKKyAgICAgICAgbV9jb21tb25IZWFkZXJzLmFkZChoZWFkZXIuZmlyc3QsIFdU
Rjo6bW92ZShoZWFkZXIuc2Vjb25kKSk7CiAKLSAgICByZXR1cm4gaHR0cEhlYWRlck5hbWVTdHJp
bmcoaGVhZGVyTmFtZSkudG9TdHJpbmdXaXRob3V0Q29weWluZygpOworICAgIGZvciAoYXV0byYg
aGVhZGVyIDogZGF0YS0+dW5jb21tb25IZWFkZXJzKQorICAgICAgICBtX3VuY29tbW9uSGVhZGVy
cy5hZGQoV1RGOjptb3ZlKGhlYWRlci5maXJzdCksIFdURjo6bW92ZShoZWFkZXIuc2Vjb25kKSk7
CiB9CiAKIFN0cmluZyBIVFRQSGVhZGVyTWFwOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dAogewotICAgIHJldHVybiBtX2hlYWRlcnMuZ2V0KGludGVybkhUVFBIZWFkZXJOYW1lU3RyaW5n
KG5hbWUpKTsKKyAgICBIVFRQSGVhZGVyTmFtZSBoZWFkZXJOYW1lOworICAgIGlmICghZmluZEhU
VFBIZWFkZXJOYW1lKG5hbWUsIGhlYWRlck5hbWUpKQorICAgICAgICByZXR1cm4gbV91bmNvbW1v
bkhlYWRlcnMuZ2V0KG5hbWUpOworICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnMuZ2V0KGhlYWRl
ck5hbWUpOwogfQogCiB2b2lkIEhUVFBIZWFkZXJNYXA6OnNldChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgbV9oZWFkZXJzLnNldChpbnRlcm5IVFRQSGVh
ZGVyTmFtZVN0cmluZyhuYW1lKSwgdmFsdWUpOworICAgIEhUVFBIZWFkZXJOYW1lIGhlYWRlck5h
bWU7CisgICAgaWYgKCFmaW5kSFRUUEhlYWRlck5hbWUobmFtZSwgaGVhZGVyTmFtZSkpIHsKKyAg
ICAgICAgbV91bmNvbW1vbkhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX2NvbW1vbkhlYWRlcnMuc2V0KGhlYWRlck5hbWUsIHZhbHVlKTsKIH0K
IAogdm9pZCBIVFRQSGVhZGVyTWFwOjphZGQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9oZWFkZXJzLmFkZChpbnRlcm5IVFRQ
SGVhZGVyTmFtZVN0cmluZyhuYW1lKSwgdmFsdWUpOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlICsgIiwgIiArIHZhbHVlOworICAgIEhUVFBIZWFkZXJOYW1lIGhlYWRlck5hbWU7CisgICAg
aWYgKCFmaW5kSFRUUEhlYWRlck5hbWUobmFtZSwgaGVhZGVyTmFtZSkpIHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBtX3VuY29tbW9uSGVhZGVycy5hZGQobmFtZSwgdmFsdWUpOworICAgICAgICBp
ZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKyAiLCAiICsgdmFsdWU7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgYWRkKGhlYWRlck5hbWUsIHZhbHVlKTsKIH0KIAogU3RyaW5nIEhUVFBI
ZWFkZXJNYXA6OmdldChIVFRQSGVhZGVyTmFtZSBuYW1lKSBjb25zdAogewotICAgIGF1dG8gaXQg
PSBmaW5kKG5hbWUpOwotICAgIGlmIChpdCA9PSBlbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotCi0gICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICByZXR1cm4gbV9jb21tb25IZWFkZXJz
LmdldChuYW1lKTsKIH0KIAogdm9pZCBIVFRQSGVhZGVyTWFwOjpzZXQoSFRUUEhlYWRlck5hbWUg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBtX2hlYWRlcnMuc2V0KGh0dHBIZWFk
ZXJOYW1lU3RyaW5nKG5hbWUpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdmFsdWUpOworICAg
IG1fY29tbW9uSGVhZGVycy5zZXQobmFtZSwgdmFsdWUpOwogfQogCiBib29sIEhUVFBIZWFkZXJN
YXA6OmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lIG5hbWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
aGVhZGVycy5jb250YWlucyhodHRwSGVhZGVyTmFtZVN0cmluZyhuYW1lKS50b1N0cmluZ1dpdGhv
dXRDb3B5aW5nKCkpOworICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnMuY29udGFpbnMobmFtZSk7
CiB9CiAKLUhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIEhUVFBIZWFkZXJNYXA6OmZpbmQo
SFRUUEhlYWRlck5hbWUgbmFtZSkgY29uc3QKK2Jvb2wgSFRUUEhlYWRlck1hcDo6cmVtb3ZlKEhU
VFBIZWFkZXJOYW1lIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1faGVhZGVycy5maW5kKGh0dHBIZWFk
ZXJOYW1lU3RyaW5nKG5hbWUpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7CisgICAgcmV0dXJu
IG1fY29tbW9uSGVhZGVycy5yZW1vdmUobmFtZSk7CiB9CiAKLWJvb2wgSFRUUEhlYWRlck1hcDo6
cmVtb3ZlKEhUVFBIZWFkZXJOYW1lIG5hbWUpCit2b2lkIEhUVFBIZWFkZXJNYXA6OmFkZChIVFRQ
SGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHJldHVybiBtX2hl
YWRlcnMucmVtb3ZlKGh0dHBIZWFkZXJOYW1lU3RyaW5nKG5hbWUpLnRvU3RyaW5nV2l0aG91dENv
cHlpbmcoKSk7CisgICAgYXV0byByZXN1bHQgPSBtX2NvbW1vbkhlYWRlcnMuYWRkKG5hbWUsIHZh
bHVlKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArICIsICIgKyB2YWx1ZTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBIZWFkZXJNYXAuaAppbmRleCA2ZTEwNTFlMWZkMjg2NmFmYjYwYzk4OGVhMmQxYWU0
ZTEyYzM0NWNkLi5jYzExMmM0YmNiNzc1NTQ5YTI1ZTY4ODUxOTlkMGU0MGYyN2FhNGEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuaApAQCAt
MjcsOCArMjcsMTAgQEAKICNpZm5kZWYgSFRUUEhlYWRlck1hcF9oCiAjZGVmaW5lIEhUVFBIZWFk
ZXJNYXBfaAogCisjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCiAjaW5jbHVkZSA8dXRpbGl0
eT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CkBAIC0zNiwxNiArMzgs
ODYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIGNsYXNzIEhUVFBIZWFkZXJOYW1l
OwotCi10eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBDcm9zc1RocmVh
ZEhUVFBIZWFkZXJNYXBEYXRhOworc3RydWN0IENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGEg
eworICAgIFZlY3RvcjxzdGQ6OnBhaXI8SFRUUEhlYWRlck5hbWUsIFN0cmluZz4+IGNvbW1vbkhl
YWRlcnM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHVuY29tbW9uSGVh
ZGVyczsKK307CiAKIC8vIEZJWE1FOiBOb3QgZXZlcnkgaGVhZGVyIGZpdHMgaW50byBhIG1hcC4g
Tm90YWJseSwgbXVsdGlwbGUgU2V0LUNvb2tpZSBoZWFkZXIgZmllbGRzIGFyZSBuZWVkZWQgdG8g
c2V0IG11bHRpcGxlIGNvb2tpZXMuCiAKIGNsYXNzIEhUVFBIZWFkZXJNYXAgewotICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBIYXNoTWFwVHlwZTsK
IHB1YmxpYzoKLSAgICB0eXBlZGVmIEhhc2hNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9p
dGVyYXRvcjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8SFRUUEhlYWRlck5hbWUsIFN0cmluZywgV1RG
OjpJbnRIYXNoPEhUVFBIZWFkZXJOYW1lPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxIVFRQ
SGVhZGVyTmFtZT4+IENvbW1vbkhlYWRlcnNIYXNoTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBVbmNvbW1vbkhlYWRlcnNIYXNoTWFwOwor
CisgICAgY2xhc3MgSFRUUEhlYWRlck1hcENvbnN0SXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgSFRUUEhlYWRlck1hcENvbnN0SXRlcmF0b3IoY29uc3QgSFRUUEhlYWRlck1hcCYgdGFi
bGUsIENvbW1vbkhlYWRlcnNIYXNoTWFwOjpjb25zdF9pdGVyYXRvciBjb21tb25IZWFkZXJzSXQs
IFVuY29tbW9uSGVhZGVyc0hhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIHVuY29tbW9uSGVhZGVyc0l0
KQorICAgICAgICAgICAgOiBtX3RhYmxlKHRhYmxlKQorICAgICAgICAgICAgLCBtX2NvbW1vbkhl
YWRlcnNJdChjb21tb25IZWFkZXJzSXQpCisgICAgICAgICAgICAsIG1fdW5jb21tb25IZWFkZXJz
SXQodW5jb21tb25IZWFkZXJzSXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVwZGF0ZUtleVZh
bHVlKG1fY29tbW9uSGVhZGVyc0l0KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBLZXlW
YWx1ZSB7CisgICAgICAgICAgICBTdHJpbmcga2V5OworICAgICAgICAgICAgT3B0aW9uYWw8SFRU
UEhlYWRlck5hbWU+IGtleUFzSFRUUEhlYWRlck5hbWU7CisgICAgICAgICAgICBTdHJpbmcgdmFs
dWU7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgS2V5VmFsdWUqIGdldCgpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCgqdGhpcyAhPSBtX3RhYmxlLmVuZCgpKTsKKyAg
ICAgICAgICAgIHJldHVybiAmbV9rZXlWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBL
ZXlWYWx1ZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisgICAgICAgIGNv
bnN0IEtleVZhbHVlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKworICAg
ICAgICBIVFRQSGVhZGVyTWFwQ29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX2NvbW1vbkhlYWRlcnNJdCAhPSBtX3RhYmxlLm1fY29tbW9uSGVh
ZGVycy5lbmQoKSkgeworICAgICAgICAgICAgICAgIGlmICh1cGRhdGVLZXlWYWx1ZSgrK21fY29t
bW9uSGVhZGVyc0l0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgKyttX3VuY29tbW9uSGVhZGVyc0l0OworCisg
ICAgICAgICAgICB1cGRhdGVLZXlWYWx1ZShtX3VuY29tbW9uSGVhZGVyc0l0KTsKKyAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBIVFRQSGVhZGVyTWFwQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIVFRQSGVh
ZGVyTWFwQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2NvbW1vbkhlYWRlcnNJdCA9PSBvdGhlci5tX2NvbW1vbkhlYWRlcnNJdCAmJiBt
X3VuY29tbW9uSGVhZGVyc0l0ID09IG90aGVyLm1fdW5jb21tb25IZWFkZXJzSXQ7CisgICAgICAg
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgdXBkYXRlS2V5VmFsdWUoQ29tbW9uSGVh
ZGVyc0hhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoaXQgPT0gbV90YWJsZS5jb21tb25IZWFkZXJzKCkuZW5kKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbV9rZXlWYWx1ZS5rZXkgPSBodHRwSGVhZGVyTmFt
ZVN0cmluZyhpdC0+a2V5KS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7CisgICAgICAgICAgICBt
X2tleVZhbHVlLmtleUFzSFRUUEhlYWRlck5hbWUgPSBpdC0+a2V5OworICAgICAgICAgICAgbV9r
ZXlWYWx1ZS52YWx1ZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGJvb2wgdXBkYXRlS2V5VmFsdWUoVW5jb21tb25IZWFkZXJzSGFzaE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpdCA9PSBt
X3RhYmxlLnVuY29tbW9uSGVhZGVycygpLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIG1fa2V5VmFsdWUua2V5ID0gaXQtPmtleTsKKyAgICAgICAgICAg
IG1fa2V5VmFsdWUua2V5QXNIVFRQSGVhZGVyTmFtZSA9IE51bGxvcHQ7CisgICAgICAgICAgICBt
X2tleVZhbHVlLnZhbHVlID0gaXQtPnZhbHVlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtX3RhYmxlOworICAgICAg
ICBDb21tb25IZWFkZXJzSGFzaE1hcDo6Y29uc3RfaXRlcmF0b3IgbV9jb21tb25IZWFkZXJzSXQ7
CisgICAgICAgIFVuY29tbW9uSGVhZGVyc0hhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIG1fdW5jb21t
b25IZWFkZXJzSXQ7CisgICAgICAgIEtleVZhbHVlIG1fa2V5VmFsdWU7CisgICAgfTsKKyAgICB0
eXBlZGVmIEhUVFBIZWFkZXJNYXBDb25zdEl0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgSFRUUEhlYWRlck1hcCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5IVFRQ
SGVhZGVyTWFwKCk7CkBAIC01NCwxMCArMTI2LDE0IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4gY29weURhdGEoKSBjb25zdDsKICAg
ICB2b2lkIGFkb3B0KHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRh
Pik7CiAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcnMuaXNFbXB0
eSgpOyB9Ci0gICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcnMuc2l6ZSgpOyB9
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jb21tb25IZWFkZXJzLmlzRW1w
dHkoKSAmJiBtX3VuY29tbW9uSGVhZGVycy5pc0VtcHR5KCk7IH0KKyAgICBpbnQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29tbW9uSGVhZGVycy5zaXplKCkgKyBtX3VuY29tbW9uSGVhZGVycy5z
aXplKCk7IH0KIAotICAgIHZvaWQgY2xlYXIoKSB7IG1faGVhZGVycy5jbGVhcigpOyB9CisgICAg
dm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX2NvbW1vbkhlYWRlcnMuY2xlYXIoKTsKKyAg
ICAgICAgbV91bmNvbW1vbkhlYWRlcnMuY2xlYXIoKTsKKyAgICB9CiAKICAgICBXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgZ2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsK
QEAgLTY1LDIzICsxNDEsMjcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGdldChIVFRQSGVhZGVyTmFtZSkgY29uc3Q7CiAgICAgdm9pZCBzZXQoSFRUUEhlYWRlck5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQgYWRkKEhUVFBIZWFkZXJOYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKICAgICBib29sIGNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lKSBjb25z
dDsKLSAgICBjb25zdF9pdGVyYXRvciBmaW5kKEhUVFBIZWFkZXJOYW1lKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHJlbW92ZShIVFRQSGVhZGVyTmFtZSk7CiAKICAgICAvLyBJbnN0
ZWFkIG9mIHBhc3NpbmcgYSBzdHJpbmcgbGl0ZXJhbCB0byBhbnkgb2YgdGhlc2UgZnVuY3Rpb25z
LCBqdXN0IHVzZSBhIEhUVFBIZWFkZXJOYW1lIGluc3RlYWQuCiAgICAgdGVtcGxhdGU8c2l6ZV90
IGxlbmd0aD4gU3RyaW5nIGdldChjb25zdCBjaGFyICgmKVtsZW5ndGhdKSBjb25zdCA9IGRlbGV0
ZTsKICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiB2b2lkIHNldChjb25zdCBjaGFyICgmKVts
ZW5ndGhdLCBjb25zdCBTdHJpbmcmKSA9IGRlbGV0ZTsKICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVu
Z3RoPiBib29sIGNvbnRhaW5zKGNvbnN0IGNoYXIgKCYpW2xlbmd0aF0pID0gZGVsZXRlOwotICAg
IHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgY2hhcigm
KVtsZW5ndGhdKSA9IGRlbGV0ZTsKICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiBib29sIHJl
bW92ZShjb25zdCBjaGFyICgmKVtsZW5ndGhdKSA9IGRlbGV0ZTsKIAotICAgIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXJzLmJlZ2luKCk7IH0KLSAgICBjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcnMuZW5kKCk7IH0KKyAgICBj
b25zdCBDb21tb25IZWFkZXJzSGFzaE1hcCYgY29tbW9uSGVhZGVycygpIGNvbnN0IHsgcmV0dXJu
IG1fY29tbW9uSGVhZGVyczsgfQorICAgIGNvbnN0IFVuY29tbW9uSGVhZGVyc0hhc2hNYXAmIHVu
Y29tbW9uSGVhZGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdW5jb21tb25IZWFkZXJzOyB9CisgICAg
Q29tbW9uSGVhZGVyc0hhc2hNYXAmIGNvbW1vbkhlYWRlcnMoKSB7IHJldHVybiBtX2NvbW1vbkhl
YWRlcnM7IH0KKyAgICBVbmNvbW1vbkhlYWRlcnNIYXNoTWFwJiB1bmNvbW1vbkhlYWRlcnMoKSB7
IHJldHVybiBtX3VuY29tbW9uSGVhZGVyczsgfQorCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcigqdGhpcywgbV9jb21tb25IZWFkZXJzLmJl
Z2luKCksIG1fdW5jb21tb25IZWFkZXJzLmJlZ2luKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoKnRoaXMsIG1fY29tbW9uSGVhZGVy
cy5lbmQoKSwgbV91bmNvbW1vbkhlYWRlcnMuZW5kKCkpOyB9CiAKICAgICBmcmllbmQgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEhUVFBIZWFkZXJNYXAmIGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGIp
CiAgICAgewotICAgICAgICByZXR1cm4gYS5tX2hlYWRlcnMgPT0gYi5tX2hlYWRlcnM7CisgICAg
ICAgIHJldHVybiBhLm1fY29tbW9uSGVhZGVycyA9PSBiLm1fY29tbW9uSGVhZGVycyAmJiBhLm1f
dW5jb21tb25IZWFkZXJzID09IGIubV91bmNvbW1vbkhlYWRlcnM7CiAgICAgfQogCiAgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIVFRQSGVhZGVyTWFwJiBhLCBjb25zdCBIVFRQSGVh
ZGVyTWFwJiBiKQpAQCAtOTAsMTAgKzE3MCw4IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgLy8gRklYTUU6IEluc3RlYWQgb2YgaGF2aW5nIGEgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4sIHdlIGNvdWxkIGhhdmUgdHdvIGhhc2ggbWFwcywKLSAgICAvLyBvbmUgSGFzaE1hcDxIVFRQ
SGVhZGVyTmFtZSwgU3RyaW5nPiBmb3IgY29tbW9uIGhlYWRlcnMgYW5kIGFub3RoZXIgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gZm9yCi0gICAgLy8gbGVzcyBjb21tb24gaGVhZGVycy4KLSAgICBI
YXNoTWFwVHlwZSBtX2hlYWRlcnM7CisgICAgQ29tbW9uSGVhZGVyc0hhc2hNYXAgbV9jb21tb25I
ZWFkZXJzOworICAgIFVuY29tbW9uSGVhZGVyc0hhc2hNYXAgbV91bmNvbW1vbkhlYWRlcnM7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IGE2MDFjYTg1ZDUwNTI1ZTQxODkwNThiOTMw
ODNhOWYxMzBkYWNiZjUuLjkyOTNjM2EzZjk5YWZlYWMwZTYxYzc1ZWQzODQ2NTY1MzcyNzY0YWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
CkBAIC00NjcsOCArNDY3LDEzIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxQbHVnaW5JbmZvPjo6ZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgUGx1Z2luSW5mbyYgcGx1CiAKIHZvaWQgQXJn
dW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVyTWFwKQogewotICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGhlYWRlck1hcC5zaXplKCkpOwotICAgIGZvciAoYXV0byYga2V5
VmFsdWVQYWlyIDogaGVhZGVyTWFwKSB7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oaGVhZGVyTWFwLmNvbW1vbkhlYWRlcnMoKS5zaXplKCkpOworICAgIGZvciAoY29uc3Qg
YXV0byYga2V5VmFsdWVQYWlyIDogaGVhZGVyTWFwLmNvbW1vbkhlYWRlcnMoKSkgeworICAgICAg
ICBlbmNvZGVyLmVuY29kZUVudW0oa2V5VmFsdWVQYWlyLmtleSk7CisgICAgICAgIGVuY29kZXIg
PDwga2V5VmFsdWVQYWlyLnZhbHVlOworICAgIH0KKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihoZWFkZXJNYXAudW5jb21tb25IZWFkZXJzKCkuc2l6ZSgpKTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IGhlYWRlck1hcC51bmNvbW1vbkhlYWRlcnMoKSkg
ewogICAgICAgICBlbmNvZGVyIDw8IGtleVZhbHVlUGFpci5rZXk7CiAgICAgICAgIGVuY29kZXIg
PDwga2V5VmFsdWVQYWlyLnZhbHVlOwogICAgIH0KQEAgLTQ3NiwxMSArNDgxLDI3IEBAIHZvaWQg
QXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5j
b2RlciwgY29uc3QgSFRUUEhlCiAKIGJvb2wgQXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgSFRUUEhlYWRlck1hcCYgaGVhZGVyTWFw
KQogewotICAgIHVpbnQ2NF90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkK
KyAgICB1aW50NjRfdCBjb21tb25IZWFkZXJzU2l6ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGNvbW1vbkhlYWRlcnNTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb21tb25IZWFkZXJzU2l6ZTsgKytpKSB7CisgICAgICAgIEhUVFBI
ZWFkZXJOYW1lIG5hbWU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKG5hbWUpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgaGVhZGVyTWFwLmNvbW1vbkhlYWRlcnMoKS5hZGQobmFtZSwgdmFsdWUpOwor
ICAgIH0KKworICAgIHVpbnQ2NF90IHVuY29tbW9uSGVhZGVyc1NpemU7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh1bmNvbW1vbkhlYWRlcnNTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHVuY29tbW9uSGVhZGVyc1NpemU7ICsraSkgewogICAgICAgICBTdHJpbmcg
bmFtZTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShuYW1lKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTQ4OSw3ICs1MTAsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8SFRUUEhl
YWRlck1hcD46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEhUVFBIZWFkZXJNYQog
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICBoZWFkZXJNYXAuc2V0KG5hbWUsIHZhbHVlKTsKKyAgICAgICAgaGVh
ZGVyTWFwLnVuY29tbW9uSGVhZGVycygpLmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHRydWU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>