<?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>177575</bug_id>
          
          <creation_ts>2017-09-27 15:40:15 -0700</creation_ts>
          <short_desc>Split some logic out of VisitedLinkStore and make it reusable</short_desc>
          <delta_ts>2017-10-09 10:21:24 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=174541</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>177776</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1353884</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-27 15:40:15 -0700</bug_when>
    <thetext>Split some logic out of VisitedLinkStore and make it reusable for other purposes than visited links and from other processes than the UIProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353889</commentid>
    <comment_count>1</comment_count>
      <attachid>322032</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-27 15:44:41 -0700</bug_when>
    <thetext>Created attachment 322032
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354172</commentid>
    <comment_count>2</comment_count>
      <attachid>322032</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-28 10:22:13 -0700</bug_when>
    <thetext>Comment on attachment 322032
Patch

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

&gt; Source/WebKit/Shared/LinkHashTable.h:35
&gt; +class LinkHashTable {

Since we&apos;re going to be using this for things that aren&apos;t links, could we call this something like SharedStringHashTable?

&gt; Source/WebKit/Shared/LinkHashTable.h:45
&gt; +    bool contains(WebCore::LinkHash) const;

Could we rename LinkHash to SharedStringHash?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354174</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-28 10:26:36 -0700</bug_when>
    <thetext>Specifically, I think we&apos;re going to be putting SecurityOrigins into the shared hash table for service workers, so they won&apos;t even be URLs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354183</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-28 10:39:20 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #3)
&gt; Specifically, I think we&apos;re going to be putting SecurityOrigins into the
&gt; shared hash table for service workers, so they won&apos;t even be URLs.

A SecurityOrigin can be stored as an URL and thus as a LinkHash as far as I can tell? Renaming LinkHash would make sense though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354186</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-28 10:41:30 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #3)
&gt; Specifically, I think we&apos;re going to be putting SecurityOrigins into the
&gt; shared hash table for service workers, so they won&apos;t even be URLs.(In reply to Chris Dumez from comment #4)
&gt; (In reply to Alex Christensen from comment #3)
&gt; &gt; Specifically, I think we&apos;re going to be putting SecurityOrigins into the
&gt; &gt; shared hash table for service workers, so they won&apos;t even be URLs.
&gt; 
&gt; A SecurityOrigin can be stored as an URL and thus as a LinkHash as far as I
&gt; can tell? Renaming LinkHash would make sense though.

Also, if we eventually store the scope (path), storing as a URL makes even more sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354187</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-28 10:42:24 -0700</bug_when>
    <thetext>Either way, it will be a String that is not a link.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354228</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-28 11:57:42 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #6)
&gt; Either way, it will be a String that is not a link.

How about renaming LinkHash to URLHash since it is constructed from a URL?
Then I&apos;d rename LinkHashTable to URLHashTable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354292</commentid>
    <comment_count>8</comment_count>
      <attachid>322032</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-28 14:29:59 -0700</bug_when>
    <thetext>Comment on attachment 322032
Patch

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

&gt; Source/WebKit/Shared/WebSharedLinkHashStore.h:36
&gt; +class WebSharedLinkHashStore {

Why the Web prefix? Seems like SharedLinkHashStore would be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354294</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-28 14:31:26 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #7)
&gt; (In reply to Alex Christensen from comment #6)
&gt; &gt; Either way, it will be a String that is not a link.
&gt; 
&gt; How about renaming LinkHash to URLHash since it is constructed from a URL?
&gt; Then I&apos;d rename LinkHashTable to URLHashTable.
It&apos;s constructed from a String.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354313</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-28 14:53:20 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #8)
&gt; Comment on attachment 322032 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=322032&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/Shared/WebSharedLinkHashStore.h:36
&gt; &gt; +class WebSharedLinkHashStore {
&gt; 
&gt; Why the Web prefix? Seems like SharedLinkHashStore would be fine.

Good to know. I have no idea when it is suitable to use the Web prefixed and when it is not :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354357</commentid>
    <comment_count>11</comment_count>
      <attachid>322136</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-28 16:09:44 -0700</bug_when>
    <thetext>Created attachment 322136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354358</commentid>
    <comment_count>12</comment_count>
      <attachid>322137</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-28 16:10:25 -0700</bug_when>
    <thetext>Created attachment 322137
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354361</commentid>
    <comment_count>13</comment_count>
      <attachid>322140</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-28 16:22:19 -0700</bug_when>
    <thetext>Created attachment 322140
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354372</commentid>
    <comment_count>14</comment_count>
      <attachid>322145</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-28 16:45:33 -0700</bug_when>
    <thetext>Created attachment 322145
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354423</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-28 19:56:31 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #10)
&gt; (In reply to Sam Weinig from comment #8)
&gt; &gt; Comment on attachment 322032 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=322032&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/Shared/WebSharedLinkHashStore.h:36
&gt; &gt; &gt; +class WebSharedLinkHashStore {
&gt; &gt; 
&gt; &gt; Why the Web prefix? Seems like SharedLinkHashStore would be fine.
&gt; 
&gt; Good to know. I have no idea when it is suitable to use the Web prefixed and
&gt; when it is not :)

Never. It was a mistake of my long forgotten youth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354445</commentid>
    <comment_count>16</comment_count>
      <attachid>322145</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-28 21:42:48 -0700</bug_when>
    <thetext>Comment on attachment 322145
Patch

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

&gt; Source/WebCore/platform/SharedStringHash.cpp:225
&gt; +static ALWAYS_INLINE void computeSharedStringHashInline(const URL&amp; base, const CharacterType* characters, unsigned length, Vector&lt;CharacterType, 512&gt;&amp; buffer)

It looks like this is specific to the visited links, since it does a bunch of stuff with URLs.  This should probably not be shared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354534</commentid>
    <comment_count>17</comment_count>
      <attachid>322145</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-29 08:48:45 -0700</bug_when>
    <thetext>Comment on attachment 322145
Patch

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

&gt;&gt; Source/WebCore/platform/SharedStringHash.cpp:225
&gt;&gt; +static ALWAYS_INLINE void computeSharedStringHashInline(const URL&amp; base, const CharacterType* characters, unsigned length, Vector&lt;CharacterType, 512&gt;&amp; buffer)
&gt; 
&gt; It looks like this is specific to the visited links, since it does a bunch of stuff with URLs.  This should probably not be shared.

It computes a SharedStringHash from a URL. Not sure I see anything wrong with using generic naming here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354673</commentid>
    <comment_count>18</comment_count>
      <attachid>322145</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-29 13:42:06 -0700</bug_when>
    <thetext>Comment on attachment 322145
Patch

I guess you&apos;re right.  r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354687</commentid>
    <comment_count>19</comment_count>
      <attachid>322145</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-29 14:14:14 -0700</bug_when>
    <thetext>Comment on attachment 322145
Patch

Clearing flags on attachment: 322145

Committed r222664: &lt;http://trac.webkit.org/changeset/222664&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354688</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-29 14:14:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354691</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-29 14:15:30 -0700</bug_when>
    <thetext>&lt;rdar://problem/34747281&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354940</commentid>
    <comment_count>22</comment_count>
      <attachid>322145</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-30 17:03:54 -0700</bug_when>
    <thetext>Comment on attachment 322145
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/SharedStringHash.cpp:225
&gt;&gt;&gt; +static ALWAYS_INLINE void computeSharedStringHashInline(const URL&amp; base, const CharacterType* characters, unsigned length, Vector&lt;CharacterType, 512&gt;&amp; buffer)
&gt;&gt; 
&gt;&gt; It looks like this is specific to the visited links, since it does a bunch of stuff with URLs.  This should probably not be shared.
&gt; 
&gt; It computes a SharedStringHash from a URL. Not sure I see anything wrong with using generic naming here.

I think the generic naming might not be great.

What makes this the hash of a URL a &quot;link hash&quot; is that when computing the hash of a URL, the code ignores things to allow links that are “equivalent” in a high level way have the same hash. It’s not just a hash of the contents of the URL, it’s a hash that goes out of its way to ignore certain classes of differences and guarantees that these equivalent sets of links have the same hashes. I don’t think the name “link hash” is exactly right for this either.

The second thing that makes this hash different from the other hashes we provide in WTF is that this is a hash that is intended to be used without a fall back to string comparison. We use this hash to check if URLs are the same and we don’t compare the URL strings at all. That’s why it has to be larger than 32 bits.

I don’t think that “shared string hash” makes it clear that the hash of a URL has these properties, nor that the hash of the strings does, so I’m not sure it’s a great name. A great name would make it clear that it’s a hash used for direct comparisons rather than a hash used along with actual equality comparisons, and that’s why it’s large, and could drive other tradeoffs. A great name might also make it clear that the URL function is specifically designed for “link coloring” and might not be appropriate for all cases of hashing URLs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355422</commentid>
    <comment_count>23</comment_count>
      <attachid>322145</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-10-02 13:01:41 -0700</bug_when>
    <thetext>Comment on attachment 322145
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/SharedStringHash.cpp:225
&gt;&gt;&gt;&gt; +static ALWAYS_INLINE void computeSharedStringHashInline(const URL&amp; base, const CharacterType* characters, unsigned length, Vector&lt;CharacterType, 512&gt;&amp; buffer)
&gt;&gt;&gt; 
&gt;&gt;&gt; It looks like this is specific to the visited links, since it does a bunch of stuff with URLs.  This should probably not be shared.
&gt;&gt; 
&gt;&gt; It computes a SharedStringHash from a URL. Not sure I see anything wrong with using generic naming here.
&gt; 
&gt; I think the generic naming might not be great.
&gt; 
&gt; What makes this the hash of a URL a &quot;link hash&quot; is that when computing the hash of a URL, the code ignores things to allow links that are “equivalent” in a high level way have the same hash. It’s not just a hash of the contents of the URL, it’s a hash that goes out of its way to ignore certain classes of differences and guarantees that these equivalent sets of links have the same hashes. I don’t think the name “link hash” is exactly right for this either.
&gt; 
&gt; The second thing that makes this hash different from the other hashes we provide in WTF is that this is a hash that is intended to be used without a fall back to string comparison. We use this hash to check if URLs are the same and we don’t compare the URL strings at all. That’s why it has to be larger than 32 bits.
&gt; 
&gt; I don’t think that “shared string hash” makes it clear that the hash of a URL has these properties, nor that the hash of the strings does, so I’m not sure it’s a great name. A great name would make it clear that it’s a hash used for direct comparisons rather than a hash used along with actual equality comparisons, and that’s why it’s large, and could drive other tradeoffs. A great name might also make it clear that the URL function is specifically designed for “link coloring” and might not be appropriate for all cases of hashing URLs.

I don&apos;t have a good name suggestion at the moment. How about I keep the previous naming (computeVisitedLinkHash) for this function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355424</commentid>
    <comment_count>24</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-02 13:04:15 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #23)
&gt; I don&apos;t have a good name suggestion at the moment. How about I keep the
&gt; previous naming (computeVisitedLinkHash) for this function?

Sounds OK to me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322032</attachid>
            <date>2017-09-27 15:44:41 -0700</date>
            <delta_ts>2017-09-28 16:09:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177575-20170927154441.patch</filename>
            <type>text/plain</type>
            <size>52302</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMxY2JiYTE0NTMxMGJhODY4
ZTY2OTg2YzgzYTQwOTg4YzdkZWZlOWQuLjc4ZWNmNGQ3M2VhYTgxMmQ0MWJiY2ZlMTM1MzM1Njcw
Yzk3NThhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTctMDktMjcgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBzb21lIGxvZ2ljIG91dCBv
ZiBWaXNpdGVkTGlua1N0b3JlIGFuZCBtYWtlIGl0IHJldXNhYmxlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc1NzUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCBzb21lIGxvZ2ljIG91dCBvZiBW
aXNpdGVkTGlua1N0b3JlIGFuZCBtYWtlIGl0IHJldXNhYmxlIGZvciBvdGhlciBwdXJwb3NlcyB0
aGFuCisgICAgICAgIHZpc2l0ZWQgbGlua3MgYW5kIGZyb20gb3RoZXIgcHJvY2Vzc2VzIHRoYW4g
dGhlIFVJUHJvY2Vzcy4KKworICAgICAgICBUaGUgcGxhbiBpcyB0byByZXVzZSB0aGUgbmV3IFdl
YlNoYXJlZExpbmtIYXNoU3RvcmUgZm9yIFNlcnZpY2UgV29ya2VyIHJlZ2lzdHJhdGlvbgorICAg
ICAgICBvbiBTdG9yYWdlUHJvY2VzcyBzaWRlIGFuZCBxdWVyeWluZyBvbiBXZWJDb250ZW50IHBy
b2Nlc3Mgc2lkZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFNoYXJl
ZC9MaW5rSGFzaFRhYmxlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1Zp
c2l0ZWRMaW5rVGFibGUuY3BwLgorICAgICAgICAoV2ViS2l0OjpMaW5rSGFzaFRhYmxlOjpMaW5r
SGFzaFRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6TGlua0hhc2hUYWJsZTo6fkxpbmtIYXNoVGFi
bGUpOgorICAgICAgICAoV2ViS2l0OjpMaW5rSGFzaFRhYmxlOjpzZXRTaGFyZWRNZW1vcnkpOgor
ICAgICAgICAoV2ViS2l0OjpMaW5rSGFzaFRhYmxlOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpM
aW5rSGFzaFRhYmxlOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkxpbmtIYXNo
VGFibGU6OmNsZWFyKToKKyAgICAgICAgKiBTaGFyZWQvTGlua0hhc2hUYWJsZS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmguCisgICAgICAgICog
U2hhcmVkL1dlYlNoYXJlZExpbmtIYXNoU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6bmV4dFBvd2VyT2YyKToKKyAgICAgICAgKFdlYktpdDo6dGFibGVTaXplRm9yS2V5Q291bnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRMaW5rSGFzaFN0b3JlOjpXZWJTaGFyZWRMaW5r
SGFzaFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkTGlua0hhc2hTdG9yZTo6Y3Jl
YXRlU2hhcmVkTWVtb3J5SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkTGlua0hh
c2hTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkTGlua0hhc2hTdG9yZTo6
Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRMaW5rSGFzaFN0b3JlOjpyZXNpemVU
YWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZExpbmtIYXNoU3RvcmU6OnBlbmRpbmdM
aW5rSGFzaGVzVGltZXJGaXJlZCk6CisgICAgICAgICogU2hhcmVkL1dlYlNoYXJlZExpbmtIYXNo
U3RvcmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1Zpc2l0ZWRMaW5rVGFi
bGUuaC4KKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkTGlua0hhc2hTdG9yZTo6Q2xpZW50Ojp+
Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkTGlua0hhc2hTdG9yZTo6aXNFbXB0
eSBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpWaXNpdGVkTGlua1N0b3JlOjpWaXNpdGVkTGlua1N0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6VmlzaXRlZExpbmtTdG9yZTo6YWRkUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgIChXZWJL
aXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZUFsbCk6CisgICAgICAgIChXZWJLaXQ6OlZpc2l0
ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rSGFzaEZyb21QYWdlKToKKyAgICAgICAgKFdlYktp
dDo6VmlzaXRlZExpbmtTdG9yZTo6c2VuZFN0b3JlSGFuZGxlVG9Qcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6VmlzaXRlZExpbmtTdG9yZTo6ZGlkSW52YWxpZGF0ZVNoYXJlZE1lbW9yeSk6Cisg
ICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OmRpZEFkZExpbmtIYXNoZXMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmg6CisgICAgICAgICogV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zp
c2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXI6OmlzTGlua1Zpc2l0ZWQpOgorICAgICAgICAoV2ViS2l0OjpWaXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlcjo6YWRkVmlzaXRlZExpbmspOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5oOgorCiAyMDE3LTA5LTI2
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UGFzcyBhIGNvbXBsZXRpb24gaGFuZGxlciBpbnN0ZWFkIG9mIGEgV2ViRnJhbWVQb2xpY3lMaXN0
ZW5lclByb3h5IGR1cmluZyBwb2xpY3kgZGVjaXNpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRleCAw
MmMzMmJlZWU2MjBjYjcxMmM2OTFlZDVmYmNjMjk5NDY3MGI4ZGE2Li4wOTM0ZjI1NjRjYzlkMWY0
NDBhNjM4NjVhOTZhMzNmYjJkOGFkYWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTE3MSw2ICsx
NzEsNyBAQCBzZXQoV2ViS2l0X1NPVVJDRVMKICAgICBTaGFyZWQvRm9udEluZm8uY3BwCiAgICAg
U2hhcmVkL0ZyYW1lSW5mb0RhdGEuY3BwCiAgICAgU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuY3Bw
CisgICAgU2hhcmVkL0xpbmtIYXNoVGFibGUuY3BwCiAgICAgU2hhcmVkL0xvYWRQYXJhbWV0ZXJz
LmNwcAogICAgIFNoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAKICAgICBTaGFyZWQvUGxh
dGZvcm1Qb3B1cE1lbnVEYXRhLmNwcApAQCAtMTgyLDcgKzE4Myw2IEBAIHNldChXZWJLaXRfU09V
UkNFUwogICAgIFNoYXJlZC9TdGF0aXN0aWNzRGF0YS5jcHAKICAgICBTaGFyZWQvVXBkYXRlSW5m
by5jcHAKICAgICBTaGFyZWQvVXNlckRhdGEuY3BwCi0gICAgU2hhcmVkL1Zpc2l0ZWRMaW5rVGFi
bGUuY3BwCiAgICAgU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCiAgICAgU2hhcmVk
L1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmNwcAogICAgIFNoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRSdWxlTGlzdERhdGEuY3BwCkBAIC0yMTEsNiArMjExLDcgQEAgc2V0KFdlYktpdF9TT1VS
Q0VTCiAgICAgU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCiAgICAgU2hh
cmVkL1dlYlJlbmRlckxheWVyLmNwcAogICAgIFNoYXJlZC9XZWJSZW5kZXJPYmplY3QuY3BwCisg
ICAgU2hhcmVkL1dlYlNoYXJlZExpbmtIYXNoU3RvcmUuY3BwCiAgICAgU2hhcmVkL1dlYlRvdWNo
RXZlbnQuY3BwCiAgICAgU2hhcmVkL1dlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5j
cHAKICAgICBTaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0xpbmtIYXNoVGFibGUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTGlua0hh
c2hUYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY1ZDkzYTJjMDgxMTEzNTk0Y2U2YTY5NzJhZjE1MDFi
M2U1MWM1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0xpbmtIYXNo
VGFibGUuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTGlua0hhc2hUYWJsZS5oIgorCisjaW5jbHVkZSAiU2hhcmVk
TWVtb3J5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworTGlua0hhc2hUYWJsZTo6TGlua0hhc2hUYWJsZSgpCit7Cit9CisKK0xpbmtIYXNoVGFi
bGU6On5MaW5rSGFzaFRhYmxlKCkKK3sKK30KKworI2lmICFBU1NFUlRfRElTQUJMRUQKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc1Bvd2VyT2YyKHVuc2lnbmVkIHYpCit7CisgICAgLy8gVGFrZW4gZnJv
bSBodHRwOi8vd3d3LmNzLnV0ay5lZHUvfnZvc2UvYy1zdHVmZi9iaXRoYWNrcy5odG1sCisgICAg
CisgICAgcmV0dXJuICEodiAmICh2IC0gMSkpICYmIHY7Cit9CisjZW5kaWYKKwordm9pZCBMaW5r
SGFzaFRhYmxlOjpzZXRTaGFyZWRNZW1vcnkoUmVmPFNoYXJlZE1lbW9yeT4mJiBzaGFyZWRNZW1v
cnkpCit7CisgICAgbV9zaGFyZWRNZW1vcnkgPSBXVEZNb3ZlKHNoYXJlZE1lbW9yeSk7CisgICAg
CisgICAgQVNTRVJUKG1fc2hhcmVkTWVtb3J5KTsKKyAgICBBU1NFUlQoIShtX3NoYXJlZE1lbW9y
eS0+c2l6ZSgpICUgc2l6ZW9mKExpbmtIYXNoKSkpOworCisgICAgbV90YWJsZSA9IHN0YXRpY19j
YXN0PExpbmtIYXNoKj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSk7CisgICAgbV90YWJsZVNpemUg
PSBtX3NoYXJlZE1lbW9yeS0+c2l6ZSgpIC8gc2l6ZW9mKExpbmtIYXNoKTsKKyAgICBBU1NFUlQo
aXNQb3dlck9mMihtX3RhYmxlU2l6ZSkpOworICAgIAorICAgIG1fdGFibGVTaXplTWFzayA9IG1f
dGFibGVTaXplIC0gMTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBkb3VibGVIYXNoKHVu
c2lnbmVkIGtleSkKK3sKKyAgICBrZXkgPSB+a2V5ICsgKGtleSA+PiAyMyk7CisgICAga2V5IF49
IChrZXkgPDwgMTIpOworICAgIGtleSBePSAoa2V5ID4+IDcpOworICAgIGtleSBePSAoa2V5IDw8
IDIpOworICAgIGtleSBePSAoa2V5ID4+IDIwKTsKKyAgICByZXR1cm4ga2V5OworfQorICAgIAor
Ym9vbCBMaW5rSGFzaFRhYmxlOjphZGQoTGlua0hhc2ggbGlua0hhc2gpCit7CisgICAgQVNTRVJU
KG1fc2hhcmVkTWVtb3J5KTsKKworICAgIGludCBrID0gMDsKKyAgICBMaW5rSGFzaCogdGFibGUg
PSBtX3RhYmxlOworICAgIGludCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKKyAgICB1bnNp
Z25lZCBoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmtIYXNoKTsKKyAgICBpbnQgaSA9IGgg
JiBzaXplTWFzazsKKworICAgIExpbmtIYXNoKiBlbnRyeTsKKyAgICB3aGlsZSAoMSkgeworICAg
ICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKworICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGJ1Y2tl
dCBpcyBlbXB0eS4KKyAgICAgICAgaWYgKCEqZW50cnkpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2FtZSBsaW5rIGhhc2ggaXMgaW4gdGhlIHRhYmxlIGFs
cmVhZHkuCisgICAgICAgIGlmICgqZW50cnkgPT0gbGlua0hhc2gpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFrKQorICAgICAgICAgICAgayA9IDEgfCBkb3VibGVI
YXNoKGgpOworICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgIH0KKworICAgICpl
bnRyeSA9IGxpbmtIYXNoOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIExpbmtIYXNoVGFi
bGU6OmNvbnRhaW5zKExpbmtIYXNoIGxpbmtIYXNoKSBjb25zdAoreworICAgIGlmICghbV9zaGFy
ZWRNZW1vcnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBrID0gMDsKKyAgICBM
aW5rSGFzaCogdGFibGUgPSBtX3RhYmxlOworICAgIGludCBzaXplTWFzayA9IG1fdGFibGVTaXpl
TWFzazsKKyAgICB1bnNpZ25lZCBoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmtIYXNoKTsK
KyAgICBpbnQgaSA9IGggJiBzaXplTWFzazsKKyAgICAKKyAgICBMaW5rSGFzaCogZW50cnk7Cisg
ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZW50cnkgPSB0YWJsZSArIGk7CisKKyAgICAgICAgLy8g
Q2hlY2sgaWYgd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSB0YWJsZS4KKyAgICAgICAgaWYg
KCEqZW50cnkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGlmICgqZW50
cnkgPT0gbGlua0hhc2gpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghaykKKyAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAg
aSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgTGlua0hhc2hUYWJsZTo6Y2xlYXIoKQoreworICAgIG1fdGFibGVTaXplID0gMDsKKyAg
ICBtX3RhYmxlU2l6ZU1hc2sgPSAwOworICAgIG1fc2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9MaW5rSGFzaFRhYmxlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9MaW5rSGFzaFRhYmxlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTkzYzZhNWMxNjAzYjAxYTA2YzkyZDdjYTJmY2E4YWI4ZGY4Zjc5MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0xpbmtIYXNoVGFibGUuaApAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PFdlYkNvcmUvTGlua0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBTaGFyZWRNZW1vcnk7CisKK2NsYXNzIExpbmtIYXNoVGFibGUg
eworcHVibGljOgorICAgIExpbmtIYXNoVGFibGUoKTsKKyAgICB+TGlua0hhc2hUYWJsZSgpOwor
CisgICAgdm9pZCBzZXRTaGFyZWRNZW1vcnkoUmVmPFNoYXJlZE1lbW9yeT4mJik7CisKKyAgICAv
LyBDYW4gb25seSBiZSBjYWxsZWQgaWYgdGhlIHVuZGVybHlpbmcgc2hhcmVkIG1lbW9yeSBpcyBp
biByZWFkIC8gd3JpdGUgbW9kZS4KKyAgICBib29sIGFkZChXZWJDb3JlOjpMaW5rSGFzaCk7CisK
KyAgICBib29sIGNvbnRhaW5zKFdlYkNvcmU6OkxpbmtIYXNoKSBjb25zdDsKKworICAgIFNoYXJl
ZE1lbW9yeSogc2hhcmVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRNZW1vcnkuZ2V0
KCk7IH0KKyAgICB2b2lkIGNsZWFyKCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFNoYXJlZE1l
bW9yeT4gbV9zaGFyZWRNZW1vcnk7CisKKyAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZSB7IDAgfTsK
KyAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZU1hc2sgeyAwIH07CisgICAgV2ViQ29yZTo6TGlua0hh
c2gqIG1fdGFibGUgeyBudWxscHRyIH07Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Zp
c2l0ZWRMaW5rVGFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmIxMWI3
M2NmMmQ3N2FiODBmNTMzMjY5MWZiODdlZDJiYjJmMDljLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Zpc2l0ZWRMaW5r
VGFibGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVmlzaXRlZExpbmtUYWJsZS5oIgotCi0jaW5j
bHVkZSAiU2hhcmVkTWVtb3J5LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotVmlzaXRlZExpbmtUYWJsZTo6VmlzaXRlZExpbmtUYWJsZSgpCi0g
ICAgOiBtX3RhYmxlU2l6ZSgwKQotICAgICwgbV90YWJsZVNpemVNYXNrKDApCi0gICAgLCBtX3Rh
YmxlKG51bGxwdHIpCi17Ci19Ci0KLVZpc2l0ZWRMaW5rVGFibGU6On5WaXNpdGVkTGlua1RhYmxl
KCkKLXsKLX0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Bv
d2VyT2YyKHVuc2lnbmVkIHYpCi17Ci0gICAgLy8gVGFrZW4gZnJvbSBodHRwOi8vd3d3LmNzLnV0
ay5lZHUvfnZvc2UvYy1zdHVmZi9iaXRoYWNrcy5odG1sCi0gICAgCi0gICAgcmV0dXJuICEodiAm
ICh2IC0gMSkpICYmIHY7Ci19Ci0jZW5kaWYKLQotdm9pZCBWaXNpdGVkTGlua1RhYmxlOjpzZXRT
aGFyZWRNZW1vcnkoUmVmPFNoYXJlZE1lbW9yeT4mJiBzaGFyZWRNZW1vcnkpCi17Ci0gICAgbV9z
aGFyZWRNZW1vcnkgPSBXVEZNb3ZlKHNoYXJlZE1lbW9yeSk7Ci0gICAgCi0gICAgQVNTRVJUKG1f
c2hhcmVkTWVtb3J5KTsKLSAgICBBU1NFUlQoIShtX3NoYXJlZE1lbW9yeS0+c2l6ZSgpICUgc2l6
ZW9mKExpbmtIYXNoKSkpOwotCi0gICAgbV90YWJsZSA9IHN0YXRpY19jYXN0PExpbmtIYXNoKj4o
bV9zaGFyZWRNZW1vcnktPmRhdGEoKSk7Ci0gICAgbV90YWJsZVNpemUgPSBtX3NoYXJlZE1lbW9y
eS0+c2l6ZSgpIC8gc2l6ZW9mKExpbmtIYXNoKTsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX3Rh
YmxlU2l6ZSkpOwotICAgIAotICAgIG1fdGFibGVTaXplTWFzayA9IG1fdGFibGVTaXplIC0gMTsK
LX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBkb3VibGVIYXNoKHVuc2lnbmVkIGtleSkKLXsK
LSAgICBrZXkgPSB+a2V5ICsgKGtleSA+PiAyMyk7Ci0gICAga2V5IF49IChrZXkgPDwgMTIpOwot
ICAgIGtleSBePSAoa2V5ID4+IDcpOwotICAgIGtleSBePSAoa2V5IDw8IDIpOwotICAgIGtleSBe
PSAoa2V5ID4+IDIwKTsKLSAgICByZXR1cm4ga2V5OwotfQotICAgIAotYm9vbCBWaXNpdGVkTGlu
a1RhYmxlOjphZGRMaW5rSGFzaChMaW5rSGFzaCBsaW5rSGFzaCkKLXsKLSAgICBBU1NFUlQobV9z
aGFyZWRNZW1vcnkpOwotCi0gICAgaW50IGsgPSAwOwotICAgIExpbmtIYXNoKiB0YWJsZSA9IG1f
dGFibGU7Ci0gICAgaW50IHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNrOwotICAgIHVuc2lnbmVk
IGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGlua0hhc2gpOwotICAgIGludCBpID0gaCAmIHNp
emVNYXNrOwotICAKLSAgICBMaW5rSGFzaCogZW50cnk7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAg
ICAgZW50cnkgPSB0YWJsZSArIGk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBidWNrZXQg
aXMgZW1wdHkuCi0gICAgICAgIGlmICghKmVudHJ5KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNhbWUgbGluayBoYXNoIGlzIGluIHRoZSB0YWJsZSBhbHJl
YWR5LgotICAgICAgICBpZiAoKmVudHJ5ID09IGxpbmtIYXNoKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGlmICghaykKLSAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFz
aChoKTsKLSAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKLSAgICB9Ci0KLSAgICAqZW50
cnkgPSBsaW5rSGFzaDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWaXNpdGVkTGlua1Rh
YmxlOjppc0xpbmtWaXNpdGVkKExpbmtIYXNoIGxpbmtIYXNoKSBjb25zdAotewotICAgIGlmICgh
bV9zaGFyZWRNZW1vcnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBrID0gMDsK
LSAgICBMaW5rSGFzaCogdGFibGUgPSBtX3RhYmxlOwotICAgIGludCBzaXplTWFzayA9IG1fdGFi
bGVTaXplTWFzazsKLSAgICB1bnNpZ25lZCBoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmtI
YXNoKTsKLSAgICBpbnQgaSA9IGggJiBzaXplTWFzazsKLSAgICAKLSAgICBMaW5rSGFzaCogZW50
cnk7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgZW50cnkgPSB0YWJsZSArIGk7Ci0KLSAgICAg
ICAgLy8gQ2hlY2sgaWYgd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSB0YWJsZS4KLSAgICAg
ICAgaWYgKCEqZW50cnkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGlm
ICgqZW50cnkgPT0gbGlua0hhc2gpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghaykKLSAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKLSAg
ICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgVmlzaXRlZExpbmtUYWJsZTo6Y2xlYXIoKQotewotICAgIG1fdGFibGVTaXpl
ID0gMDsKLSAgICBtX3RhYmxlU2l6ZU1hc2sgPSAwOwotICAgIG1fc2hhcmVkTWVtb3J5ID0gbnVs
bHB0cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9WaXNp
dGVkTGlua1RhYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOTEyNjc1ODE1
NGMxODk0OWQ0NWQyODUwYTMxYjFjZmU5NGVjMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvVmlzaXRlZExpbmtUYWJs
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
VmlzaXRlZExpbmtUYWJsZV9oCi0jZGVmaW5lIFZpc2l0ZWRMaW5rVGFibGVfaAotCi0jaW5jbHVk
ZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFNoYXJlZE1lbW9yeTsKLQotY2xhc3MgVmlzaXRlZExpbmtU
YWJsZSB7Ci1wdWJsaWM6Ci0gICAgVmlzaXRlZExpbmtUYWJsZSgpOwotICAgIH5WaXNpdGVkTGlu
a1RhYmxlKCk7Ci0KLSAgICB2b2lkIHNldFNoYXJlZE1lbW9yeShSZWY8U2hhcmVkTWVtb3J5PiYm
KTsKLQotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIFVJIHByb2Nl
c3MuCi0gICAgYm9vbCBhZGRMaW5rSGFzaChXZWJDb3JlOjpMaW5rSGFzaCk7Ci0KLSAgICBib29s
IGlzTGlua1Zpc2l0ZWQoV2ViQ29yZTo6TGlua0hhc2gpIGNvbnN0OwotCi0gICAgU2hhcmVkTWVt
b3J5KiBzaGFyZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZE1lbW9yeS5nZXQoKTsg
fQotICAgIHZvaWQgY2xlYXIoKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5
PiBtX3NoYXJlZE1lbW9yeTsKLQotICAgIHVuc2lnbmVkIG1fdGFibGVTaXplOwotICAgIHVuc2ln
bmVkIG1fdGFibGVTaXplTWFzazsKLSAgICBXZWJDb3JlOjpMaW5rSGFzaCogbV90YWJsZTsKLX07
Ci0KLX0KLQotI2VuZGlmIC8vIFZpc2l0ZWRMaW5rVGFibGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViU2hhcmVkTGlua0hhc2hTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJTaGFyZWRMaW5rSGFzaFN0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NThhOTQ1Zjhi
YTcxZWMxYzQyZWM2NjczNmNkNDUzOWFmMWViY2ExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViU2hhcmVkTGlua0hhc2hTdG9yZS5jcHAKQEAgLTAsMCArMSwxNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJT
aGFyZWRMaW5rSGFzaFN0b3JlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworY29uc3QgdW5zaWduZWQgdmlzaXRlZExpbmtIYXNoVGFibGVNYXhM
b2FkID0gMjsKKworc3RhdGljIHVuc2lnbmVkIG5leHRQb3dlck9mMih1bnNpZ25lZCB2KQorewor
ICAgIC8vIFRha2VuIGZyb20gaHR0cDovL3d3dy5jcy51dGsuZWR1L352b3NlL2Mtc3R1ZmYvYml0
aGFja3MuaHRtbAorICAgIC8vIERldmlzZWQgYnkgU2VhbiBBbmRlcnNvbiwgU2VwZW1iZXIgMTQs
IDIwMDEKKworICAgIHYtLTsKKyAgICB2IHw9IHYgPj4gMTsKKyAgICB2IHw9IHYgPj4gMjsKKyAg
ICB2IHw9IHYgPj4gNDsKKyAgICB2IHw9IHYgPj4gODsKKyAgICB2IHw9IHYgPj4gMTY7CisgICAg
disrOworCisgICAgcmV0dXJuIHY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB0YWJsZVNpemVGb3JL
ZXlDb3VudCh1bnNpZ25lZCBrZXlDb3VudCkKK3sKKyAgICAvLyBXZSB3YW50IHRoZSB0YWJsZSB0
byBiZSBhdCBsZWFzdCBoYWxmIGVtcHR5LgorICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSA9IG5leHRQ
b3dlck9mMihrZXlDb3VudCAqIHZpc2l0ZWRMaW5rSGFzaFRhYmxlTWF4TG9hZCk7CisKKyAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgdGFibGUgc2l6ZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBhIHBh
Z2UuCisgICAgc2l6ZV90IG1pbmltdW1UYWJsZVNpemUgPSBTaGFyZWRNZW1vcnk6OnN5c3RlbVBh
Z2VTaXplKCkgLyBzaXplb2YoTGlua0hhc2gpOworICAgIGlmICh0YWJsZVNpemUgPCBtaW5pbXVt
VGFibGVTaXplKQorICAgICAgICByZXR1cm4gbWluaW11bVRhYmxlU2l6ZTsKKworICAgIHJldHVy
biB0YWJsZVNpemU7Cit9CisKK1dlYlNoYXJlZExpbmtIYXNoU3RvcmU6OldlYlNoYXJlZExpbmtI
YXNoU3RvcmUoQ2xpZW50JiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBt
X3BlbmRpbmdMaW5rSGFzaGVzVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViU2hhcmVk
TGlua0hhc2hTdG9yZTo6cGVuZGluZ0xpbmtIYXNoZXNUaW1lckZpcmVkKQoreworfQorCitib29s
IFdlYlNoYXJlZExpbmtIYXNoU3RvcmU6OmNyZWF0ZVNoYXJlZE1lbW9yeUhhbmRsZShTaGFyZWRN
ZW1vcnk6OkhhbmRsZSYgaGFuZGxlKQoreworICAgIHJldHVybiBtX3RhYmxlLnNoYXJlZE1lbW9y
eSgpLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRP
bmx5KTsKK30KKwordm9pZCBXZWJTaGFyZWRMaW5rSGFzaFN0b3JlOjphZGQoTGlua0hhc2ggbGlu
a0hhc2gpCit7CisgICAgbV9wZW5kaW5nTGlua0hhc2hlcy5hZGQobGlua0hhc2gpOworCisgICAg
aWYgKCFtX3BlbmRpbmdMaW5rSGFzaGVzVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9wZW5k
aW5nTGlua0hhc2hlc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCit2b2lkIFdlYlNoYXJl
ZExpbmtIYXNoU3RvcmU6OmNsZWFyKCkKK3sKKyAgICBtX3BlbmRpbmdMaW5rSGFzaGVzVGltZXIu
c3RvcCgpOworICAgIG1fcGVuZGluZ0xpbmtIYXNoZXMuY2xlYXIoKTsKKyAgICBtX2tleUNvdW50
ID0gMDsKKyAgICBtX3RhYmxlU2l6ZSA9IDA7CisgICAgbV90YWJsZS5jbGVhcigpOworfQorCit2
b2lkIFdlYlNoYXJlZExpbmtIYXNoU3RvcmU6OnJlc2l6ZVRhYmxlKHVuc2lnbmVkIG5ld1RhYmxl
U2l6ZSkKK3sKKyAgICBhdXRvIG5ld1RhYmxlTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0
ZShuZXdUYWJsZVNpemUgKiBzaXplb2YoTGlua0hhc2gpKTsKKyAgICBpZiAoIW5ld1RhYmxlTWVt
b3J5KSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIHNoYXJlZCBtZW1v
cnkgZm9yIHZpc2l0ZWQgbGluayB0YWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbWVtc2V0KG5ld1RhYmxlTWVtb3J5LT5kYXRhKCksIDAsIG5ld1RhYmxlTWVtb3J5LT5zaXpl
KCkpOworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gY3VycmVudFRhYmxlTWVtb3J5ID0gbV90
YWJsZS5zaGFyZWRNZW1vcnkoKTsKKyAgICB1bnNpZ25lZCBjdXJyZW50VGFibGVTaXplID0gbV90
YWJsZVNpemU7CisKKyAgICBtX3RhYmxlLnNldFNoYXJlZE1lbW9yeShuZXdUYWJsZU1lbW9yeS5y
ZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBtX3RhYmxlU2l6ZSA9IG5ld1RhYmxlU2l6ZTsKKworICAg
IGlmIChjdXJyZW50VGFibGVNZW1vcnkpIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJyZW50
VGFibGVTaXplLCBjdXJyZW50VGFibGVNZW1vcnktPnNpemUoKSA9PSBjdXJyZW50VGFibGVTaXpl
ICogc2l6ZW9mKExpbmtIYXNoKSk7CisKKyAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUgY3VycmVu
dCBoYXNoIHRhYmxlIGFuZCByZS1hZGQgYWxsIGVudHJpZXMgdG8gdGhlIG5ldyBoYXNoIHRhYmxl
LgorICAgICAgICBjb25zdCBMaW5rSGFzaCogY3VycmVudExpbmtIYXNoZXMgPSBzdGF0aWNfY2Fz
dDxjb25zdCBMaW5rSGFzaCo+KGN1cnJlbnRUYWJsZU1lbW9yeS0+ZGF0YSgpKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGN1cnJlbnRUYWJsZVNpemU7ICsraSkgeworICAgICAg
ICAgICAgYXV0byBsaW5rSGFzaCA9IGN1cnJlbnRMaW5rSGFzaGVzW2ldOworICAgICAgICAgICAg
aWYgKCFsaW5rSGFzaCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
Ym9vbCBkaWRBZGRMaW5rSGFzaCA9IG1fdGFibGUuYWRkKGxpbmtIYXNoKTsKKworICAgICAgICAg
ICAgLy8gSXQgc2hvdWxkIGFsd2F5cyBiZSBwb3NzaWJsZSB0byBhZGQgdGhlIGxpbmsgaGFzaCB0
byBhIG5ldyB0YWJsZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGlkQWRkTGlua0hhc2gs
IGRpZEFkZExpbmtIYXNoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgbGlu
a0hhc2ggOiBtX3BlbmRpbmdMaW5rSGFzaGVzKSB7CisgICAgICAgIGlmIChtX3RhYmxlLmFkZChs
aW5rSGFzaCkpCisgICAgICAgICAgICArK21fa2V5Q291bnQ7CisgICAgfQorICAgIG1fcGVuZGlu
Z0xpbmtIYXNoZXMuY2xlYXIoKTsKKworICAgIG1fY2xpZW50LmRpZEludmFsaWRhdGVTaGFyZWRN
ZW1vcnkoKTsKK30KKwordm9pZCBXZWJTaGFyZWRMaW5rSGFzaFN0b3JlOjpwZW5kaW5nTGlua0hh
c2hlc1RpbWVyRmlyZWQoKQoreworICAgIHVuc2lnbmVkIGN1cnJlbnRUYWJsZVNpemUgPSBtX3Rh
YmxlU2l6ZTsKKyAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSB0YWJsZVNpemVGb3JLZXlDb3Vu
dChtX2tleUNvdW50ICsgbV9wZW5kaW5nTGlua0hhc2hlcy5zaXplKCkpOworCisgICAgbmV3VGFi
bGVTaXplID0gc3RkOjptYXgoY3VycmVudFRhYmxlU2l6ZSwgbmV3VGFibGVTaXplKTsKKworICAg
IGlmIChjdXJyZW50VGFibGVTaXplICE9IG5ld1RhYmxlU2l6ZSkgeworICAgICAgICByZXNpemVU
YWJsZShuZXdUYWJsZVNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9y
PFdlYkNvcmU6OkxpbmtIYXNoPiBhZGRlZExpbmtIYXNoZXM7CisgICAgYWRkZWRMaW5rSGFzaGVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9wZW5kaW5nTGlua0hhc2hlcy5zaXplKCkpOworICAg
IGZvciAoYXV0byYgbGlua0hhc2ggOiBtX3BlbmRpbmdMaW5rSGFzaGVzKSB7CisgICAgICAgIGlm
IChtX3RhYmxlLmFkZChsaW5rSGFzaCkpIHsKKyAgICAgICAgICAgIGFkZGVkTGlua0hhc2hlcy51
bmNoZWNrZWRBcHBlbmQobGlua0hhc2gpOworICAgICAgICAgICAgKyttX2tleUNvdW50OworICAg
ICAgICB9CisgICAgfQorCisgICAgbV9wZW5kaW5nTGlua0hhc2hlcy5jbGVhcigpOworCisgICAg
aWYgKCFhZGRlZExpbmtIYXNoZXMuaXNFbXB0eSgpKQorICAgICAgICBtX2NsaWVudC5kaWRBZGRM
aW5rSGFzaGVzKGFkZGVkTGlua0hhc2hlcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViU2hhcmVkTGlua0hhc2hTdG9yZS5o
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViU2hhcmVkTGlua0hhc2hTdG9yZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmEyZTAyN2M2YzRjNzFjMjUxNmE0ZWMzNTBiMzUyODlkY2EyNzRiZTkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJTaGFyZWRMaW5rSGFzaFN0b3JlLmgKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJMaW5rSGFzaFRhYmxlLmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNoYXJlZExp
bmtIYXNoU3RvcmUgeworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
SW52YWxpZGF0ZVNoYXJlZE1lbW9yeSgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEFk
ZExpbmtIYXNoZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYpID0gMDsKKyAgICB9
OworCisgICAgV2ViU2hhcmVkTGlua0hhc2hTdG9yZShDbGllbnQmKTsKKworICAgIGJvb2wgY3Jl
YXRlU2hhcmVkTWVtb3J5SGFuZGxlKFNoYXJlZE1lbW9yeTo6SGFuZGxlJik7CisgICAgdm9pZCBh
ZGQoV2ViQ29yZTo6TGlua0hhc2gpOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2tleUNvdW50OyB9CisKK3ByaXZhdGU6CisgICAgdm9p
ZCByZXNpemVUYWJsZSh1bnNpZ25lZCBuZXdUYWJsZVNpemUpOworICAgIHZvaWQgcGVuZGluZ0xp
bmtIYXNoZXNUaW1lckZpcmVkKCk7CisKKyAgICBDbGllbnQmIG1fY2xpZW50OworICAgIHVuc2ln
bmVkIG1fa2V5Q291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV90YWJsZVNpemUgeyAwIH07Cisg
ICAgTGlua0hhc2hUYWJsZSBtX3RhYmxlOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6TGlua0hhc2gs
IFdlYkNvcmU6OkxpbmtIYXNoSGFzaD4gbV9wZW5kaW5nTGlua0hhc2hlczsKKyAgICBSdW5Mb29w
OjpUaW1lcjxXZWJTaGFyZWRMaW5rSGFzaFN0b3JlPiBtX3BlbmRpbmdMaW5rSGFzaGVzVGltZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
VmlzaXRlZExpbmtTdG9yZS5jcHAKaW5kZXggYmQwMDJjMDZmNjQxMTJkYmQ1OTA2Y2E3MDRjYzZl
YjMxNzk5MjczNi4uZWNiZjQzYTQwM2I5M2JmMDgwZTA0YWRjY2U2MThiZDkyOTk2ZDE2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOSArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmUuaCIK
IAotI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmVN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKICNpbmNsdWRlICJWaXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKQEAgLTM4LDggKzM2LDYgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMg
Y29uc3QgaW50IHZpc2l0ZWRMaW5rVGFibGVNYXhMb2FkID0gMjsKLQogUmVmPFZpc2l0ZWRMaW5r
U3RvcmU+IFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgVmlzaXRlZExpbmtTdG9yZSk7CkBAIC01NCw5ICs1MCw3IEBAIFZpc2l0ZWRMaW5rU3Rv
cmU6On5WaXNpdGVkTGlua1N0b3JlKCkKIH0KIAogVmlzaXRlZExpbmtTdG9yZTo6VmlzaXRlZExp
bmtTdG9yZSgpCi0gICAgOiBtX2tleUNvdW50KDApCi0gICAgLCBtX3RhYmxlU2l6ZSgwKQotICAg
ICwgbV9wZW5kaW5nVmlzaXRlZExpbmtzVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVmlz
aXRlZExpbmtTdG9yZTo6cGVuZGluZ1Zpc2l0ZWRMaW5rc1RpbWVyRmlyZWQpCisgICAgOiBtX2xp
bmtIYXNoU3RvcmUoKnRoaXMpCiB7CiB9CiAKQEAgLTY5LDEyICs2MywxMCBAQCB2b2lkIFZpc2l0
ZWRMaW5rU3RvcmU6OmFkZFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogCiAgICAg
cHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rU3RvcmU6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgaWRlbnRpZmllcigpLCAqdGhpcyk7CiAKLSAgICBpZiAoIW1f
a2V5Q291bnQpCisgICAgaWYgKG1fbGlua0hhc2hTdG9yZS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVChtX3RhYmxlLnNoYXJlZE1lbW9yeSgpKTsKLQotICAgIHNlbmRU
YWJsZShwcm9jZXNzKTsKKyAgICBzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MocHJvY2Vzcyk7CiB9
CiAKIHZvaWQgVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkm
IHByb2Nlc3MpCkBAIC04NywxOSArNzksMTIgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpyZW1v
dmVQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIAogdm9pZCBWaXNpdGVkTGlua1N0
b3JlOjphZGRWaXNpdGVkTGlua0hhc2goTGlua0hhc2ggbGlua0hhc2gpCiB7Ci0gICAgbV9wZW5k
aW5nVmlzaXRlZExpbmtzLmFkZChsaW5rSGFzaCk7Ci0KLSAgICBpZiAoIW1fcGVuZGluZ1Zpc2l0
ZWRMaW5rc1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fcGVuZGluZ1Zpc2l0ZWRMaW5rc1Rp
bWVyLnN0YXJ0T25lU2hvdCgwX3MpOworICAgIG1fbGlua0hhc2hTdG9yZS5hZGQobGlua0hhc2gp
OwogfQogCiB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZUFsbCgpCiB7Ci0gICAgbV9wZW5k
aW5nVmlzaXRlZExpbmtzVGltZXIuc3RvcCgpOwotICAgIG1fcGVuZGluZ1Zpc2l0ZWRMaW5rcy5j
bGVhcigpOwotICAgIG1fa2V5Q291bnQgPSAwOwotICAgIG1fdGFibGVTaXplID0gMDsKLSAgICBt
X3RhYmxlLmNsZWFyKCk7CisgICAgbV9saW5rSGFzaFN0b3JlLmNsZWFyKCk7CiAKICAgICBmb3Ig
KFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7CiAgICAgICAgIEFTU0VS
VChwcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsK
QEAgLTExOSw3ICsxMDQsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OndlYlByb2Nlc3NEaWRD
bG9zZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgSVBDOjpDb25uZQogCiB2b2lkIFZpc2l0
ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rSGFzaEZyb21QYWdlKHVpbnQ2NF90IHBhZ2VJRCwg
TGlua0hhc2ggbGlua0hhc2gpCiB7Ci0gICAgaWYgKFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5
ID0gV2ViUHJvY2Vzc1Byb3h5Ojp3ZWJQYWdlKHBhZ2VJRCkpIHsKKyAgICBpZiAoYXV0byogd2Vi
UGFnZVByb3h5ID0gV2ViUHJvY2Vzc1Byb3h5Ojp3ZWJQYWdlKHBhZ2VJRCkpIHsKICAgICAgICAg
aWYgKCF3ZWJQYWdlUHJveHktPmFkZHNWaXNpdGVkTGlua3MoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xMjcsMTI1ICsxMTIsMzUgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3JlOjph
ZGRWaXNpdGVkTGlua0hhc2hGcm9tUGFnZSh1aW50NjRfdCBwYWdlSUQsIExpbmtIYXNoIGxpbmsK
ICAgICBhZGRWaXNpdGVkTGlua0hhc2gobGlua0hhc2gpOwogfQogCi1zdGF0aWMgdW5zaWduZWQg
bmV4dFBvd2VyT2YyKHVuc2lnbmVkIHYpCit2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OnNlbmRTdG9y
ZUhhbmRsZVRvUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiB7Ci0gICAgLy8gVGFr
ZW4gZnJvbSBodHRwOi8vd3d3LmNzLnV0ay5lZHUvfnZvc2UvYy1zdHVmZi9iaXRoYWNrcy5odG1s
Ci0gICAgLy8gRGV2aXNlZCBieSBTZWFuIEFuZGVyc29uLCBTZXBlbWJlciAxNCwgMjAwMQotICAg
IAotICAgIHYtLTsKLSAgICB2IHw9IHYgPj4gMTsKLSAgICB2IHw9IHYgPj4gMjsKLSAgICB2IHw9
IHYgPj4gNDsKLSAgICB2IHw9IHYgPj4gODsKLSAgICB2IHw9IHYgPj4gMTY7Ci0gICAgdisrOwot
ICAgIAotICAgIHJldHVybiB2OworICAgIEFTU0VSVChwcm9jZXNzLnByb2Nlc3NQb29sKCkucHJv
Y2Vzc2VzKCkuY29udGFpbnMoJnByb2Nlc3MpKTsKKworICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxl
IGhhbmRsZTsKKyAgICBpZiAoIW1fbGlua0hhc2hTdG9yZS5jcmVhdGVTaGFyZWRNZW1vcnlIYW5k
bGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJvY2Vzcy5zZW5kKE1lc3NhZ2Vz
OjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6U2V0VmlzaXRlZExpbmtUYWJsZShoYW5kbGUp
LCBpZGVudGlmaWVyKCkpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgdGFibGVTaXplRm9yS2V5Q291
bnQodW5zaWduZWQga2V5Q291bnQpCit2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OmRpZEludmFsaWRh
dGVTaGFyZWRNZW1vcnkoKQogewotICAgIC8vIFdlIHdhbnQgdGhlIHRhYmxlIHRvIGJlIGF0IGxl
YXN0IGhhbGYgZW1wdHkuCi0gICAgdW5zaWduZWQgdGFibGVTaXplID0gbmV4dFBvd2VyT2YyKGtl
eUNvdW50ICogdmlzaXRlZExpbmtUYWJsZU1heExvYWQpOwotCi0gICAgLy8gRW5zdXJlIHRoYXQg
dGhlIHRhYmxlIHNpemUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgYSBwYWdlLgotICAgIHNpemVf
dCBtaW5pbXVtVGFibGVTaXplID0gU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpIC8gc2l6
ZW9mKExpbmtIYXNoKTsKLSAgICBpZiAodGFibGVTaXplIDwgbWluaW11bVRhYmxlU2l6ZSkKLSAg
ICAgICAgcmV0dXJuIG1pbmltdW1UYWJsZVNpemU7Ci0gICAgCi0gICAgcmV0dXJuIHRhYmxlU2l6
ZTsKKyAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQorICAg
ICAgICBzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MoKnByb2Nlc3MpOwogfQogCi12b2lkIFZpc2l0
ZWRMaW5rU3RvcmU6OnBlbmRpbmdWaXNpdGVkTGlua3NUaW1lckZpcmVkKCkKK3ZvaWQgVmlzaXRl
ZExpbmtTdG9yZTo6ZGlkQWRkTGlua0hhc2hlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6TGlua0hh
c2g+JiBsaW5rSGFzaGVzKQogewotICAgIHVuc2lnbmVkIGN1cnJlbnRUYWJsZVNpemUgPSBtX3Rh
YmxlU2l6ZTsKLSAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSB0YWJsZVNpemVGb3JLZXlDb3Vu
dChtX2tleUNvdW50ICsgbV9wZW5kaW5nVmlzaXRlZExpbmtzLnNpemUoKSk7Ci0KLSAgICBuZXdU
YWJsZVNpemUgPSBzdGQ6Om1heChjdXJyZW50VGFibGVTaXplLCBuZXdUYWJsZVNpemUpOwotCi0g
ICAgaWYgKGN1cnJlbnRUYWJsZVNpemUgIT0gbmV3VGFibGVTaXplKSB7Ci0gICAgICAgIHJlc2l6
ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0
b3I8V2ViQ29yZTo6TGlua0hhc2g+IGFkZGVkVmlzaXRlZExpbmtzOwotCi0gICAgZm9yIChhdXRv
JiBsaW5rSGFzaCA6IG1fcGVuZGluZ1Zpc2l0ZWRMaW5rcykgewotICAgICAgICBpZiAobV90YWJs
ZS5hZGRMaW5rSGFzaChsaW5rSGFzaCkpIHsKLSAgICAgICAgICAgIGFkZGVkVmlzaXRlZExpbmtz
LmFwcGVuZChsaW5rSGFzaCk7Ci0gICAgICAgICAgICArK21fa2V5Q291bnQ7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBtX3BlbmRpbmdWaXNpdGVkTGlua3MuY2xlYXIoKTsKLQotICAgIGlmIChh
ZGRlZFZpc2l0ZWRMaW5rcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQo
IWxpbmtIYXNoZXMuaXNFbXB0eSgpKTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9j
ZXNzIDogbV9wcm9jZXNzZXMpIHsKICAgICAgICAgQVNTRVJUKHByb2Nlc3MtPnByb2Nlc3NQb29s
KCkucHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2VzcykpOwogCi0gICAgICAgIGlmIChhZGRlZFZp
c2l0ZWRMaW5rcy5zaXplKCkgPiAyMCkKKyAgICAgICAgaWYgKGxpbmtIYXNoZXMuc2l6ZSgpID4g
MjApCiAgICAgICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1RhYmxl
Q29udHJvbGxlcjo6QWxsVmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoKSwgaWRlbnRpZmllcigpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6VmlzaXRl
ZExpbmtUYWJsZUNvbnRyb2xsZXI6OlZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKGFkZGVkVmlzaXRl
ZExpbmtzKSwgaWRlbnRpZmllcigpKTsKLSAgICB9Ci19Ci0KLXZvaWQgVmlzaXRlZExpbmtTdG9y
ZTo6cmVzaXplVGFibGUodW5zaWduZWQgbmV3VGFibGVTaXplKQotewotICAgIGF1dG8gbmV3VGFi
bGVNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKG5ld1RhYmxlU2l6ZSAqIHNpemVvZihM
aW5rSGFzaCkpOwotCi0gICAgaWYgKCFuZXdUYWJsZU1lbW9yeSkgewotICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IGZvciB2aXNpdGVkIGxpbmsgdGFi
bGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1lbXNldChuZXdUYWJsZU1lbW9y
eS0+ZGF0YSgpLCAwLCBuZXdUYWJsZU1lbW9yeS0+c2l6ZSgpKTsKLQotICAgIFJlZlB0cjxTaGFy
ZWRNZW1vcnk+IGN1cnJlbnRUYWJsZU1lbW9yeSA9IG1fdGFibGUuc2hhcmVkTWVtb3J5KCk7Ci0g
ICAgdW5zaWduZWQgY3VycmVudFRhYmxlU2l6ZSA9IG1fdGFibGVTaXplOwotCi0gICAgbV90YWJs
ZS5zZXRTaGFyZWRNZW1vcnkobmV3VGFibGVNZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAg
bV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7Ci0KLSAgICBpZiAoY3VycmVudFRhYmxlTWVtb3J5
KSB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudFRhYmxlU2l6ZSwgY3VycmVudFRhYmxl
TWVtb3J5LT5zaXplKCkgPT0gY3VycmVudFRhYmxlU2l6ZSAqIHNpemVvZihMaW5rSGFzaCkpOwot
Ci0gICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGN1cnJlbnQgaGFzaCB0YWJsZSBhbmQgcmUtYWRk
IGFsbCBlbnRyaWVzIHRvIHRoZSBuZXcgaGFzaCB0YWJsZS4KLSAgICAgICAgY29uc3QgTGlua0hh
c2gqIGN1cnJlbnRMaW5rSGFzaGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGlua0hhc2gqPihjdXJy
ZW50VGFibGVNZW1vcnktPmRhdGEoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjdXJyZW50VGFibGVTaXplOyArK2kpIHsKLSAgICAgICAgICAgIExpbmtIYXNoIGxpbmtIYXNo
ID0gY3VycmVudExpbmtIYXNoZXNbaV07Ci0KLSAgICAgICAgICAgIGlmICghbGlua0hhc2gpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGJvb2wgZGlkQWRkTGlua0hh
c2ggPSBtX3RhYmxlLmFkZExpbmtIYXNoKGxpbmtIYXNoKTsKLQotICAgICAgICAgICAgLy8gSXQg
c2hvdWxkIGFsd2F5cyBiZSBwb3NzaWJsZSB0byBhZGQgdGhlIGxpbmsgaGFzaCB0byBhIG5ldyB0
YWJsZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGlkQWRkTGlua0hhc2gsIGRpZEFkZExp
bmtIYXNoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoYXV0byYgbGlua0hhc2ggOiBt
X3BlbmRpbmdWaXNpdGVkTGlua3MpIHsKLSAgICAgICAgaWYgKG1fdGFibGUuYWRkTGlua0hhc2go
bGlua0hhc2gpKQotICAgICAgICAgICAgbV9rZXlDb3VudCsrOworICAgICAgICAgICAgcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OlZpc2l0ZWRMaW5r
U3RhdGVDaGFuZ2VkKGxpbmtIYXNoZXMpLCBpZGVudGlmaWVyKCkpOwogICAgIH0KLSAgICBtX3Bl
bmRpbmdWaXNpdGVkTGlua3MuY2xlYXIoKTsKLQotICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBw
cm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHNlbmRUYWJsZSgqcHJvY2Vzcyk7Ci19Ci0K
LXZvaWQgVmlzaXRlZExpbmtTdG9yZTo6c2VuZFRhYmxlKFdlYlByb2Nlc3NQcm94eSYgcHJvY2Vz
cykKLXsKLSAgICBBU1NFUlQocHJvY2Vzcy5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRh
aW5zKCZwcm9jZXNzKSk7Ci0KLSAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0gICAg
aWYgKCFtX3RhYmxlLnNoYXJlZE1lbW9yeSgpLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRN
ZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJv
Y2Vzcy5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6U2V0VmlzaXRl
ZExpbmtUYWJsZShoYW5kbGUpLCBpZGVudGlmaWVyKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuaAppbmRleCA1
YzZhZDhkZDJmNmVkMWZhZTM1ODZhMWUxY2QwZTQzMjcyZjVlZGJlLi45NmQzNzAzZTFiNzA0N2My
OTk2NjdhZWJhYmY1Yzk4NzRjYTgxY2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9WaXNpdGVkTGlua1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlz
aXRlZExpbmtTdG9yZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIzLDI3ICsyMywyNCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgVmlzaXRlZExpbmtTdG9yZV9oCi0jZGVmaW5lIFZp
c2l0ZWRMaW5rU3RvcmVfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIK
ICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlICJWaXNpdGVkTGlua1RhYmxl
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0xpZmV0
aW1lT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0xpbmtIYXNoLmg+CisjaW5jbHVkZSAi
V2ViU2hhcmVkTGlua0hhc2hTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvSWRlbnRpZmllZC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQcm94
eTsKICAgICAKLWNsYXNzIFZpc2l0ZWRMaW5rU3RvcmUgZmluYWwgOiBwdWJsaWMgQVBJOjpPYmpl
Y3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpWaXNpdGVkTGlua1N0b3JlPiwgcHJpdmF0ZSBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciwgcHVibGljIFdlYlByb2Nlc3NMaWZldGltZU9ic2VydmVyLCBwdWJs
aWMgSWRlbnRpZmllZDxWaXNpdGVkTGlua1N0b3JlPiAgeworY2xhc3MgVmlzaXRlZExpbmtTdG9y
ZSBmaW5hbCA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlZpc2l0
ZWRMaW5rU3RvcmU+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyLCBwdWJsaWMgV2ViUHJv
Y2Vzc0xpZmV0aW1lT2JzZXJ2ZXIsIHB1YmxpYyBJZGVudGlmaWVkPFZpc2l0ZWRMaW5rU3RvcmU+
LCBwcml2YXRlIFdlYlNoYXJlZExpbmtIYXNoU3RvcmU6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxWaXNpdGVkTGlua1N0b3JlPiBjcmVhdGUoKTsKIApAQCAtNTgsMjkgKzU1LDIy
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKSBmaW5hbDsKIAogICAgIC8vIFdlYlByb2Nlc3NMaWZldGltZU9ic2VydmVy
Ci0gICAgdm9pZCB3ZWJQcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYs
IElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwotICAgIHZvaWQgd2ViUHJvY2Vzc0RpZENsb3Nl
Q29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsK
KyAgICB2b2lkIHdlYlByb2Nlc3NXaWxsT3BlbkNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5Jiwg
SVBDOjpDb25uZWN0aW9uJikgZmluYWw7CisgICAgdm9pZCB3ZWJQcm9jZXNzRGlkQ2xvc2VDb25u
ZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOwogCi0gICAg
dm9pZCBhZGRWaXNpdGVkTGlua0hhc2hGcm9tUGFnZSh1aW50NjRfdCBwYWdlSUQsIFdlYkNvcmU6
OkxpbmtIYXNoKTsKKyAgICAvLyBXZWJTaGFyZWRMaW5rSGFzaFN0b3JlOjpDbGllbnQKKyAgICB2
b2lkIGRpZEludmFsaWRhdGVTaGFyZWRNZW1vcnkoKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZExp
bmtIYXNoZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYpIGZpbmFsOwogCi0gICAg
dm9pZCBwZW5kaW5nVmlzaXRlZExpbmtzVGltZXJGaXJlZCgpOworICAgIHZvaWQgYWRkVmlzaXRl
ZExpbmtIYXNoRnJvbVBhZ2UodWludDY0X3QgcGFnZUlELCBXZWJDb3JlOjpMaW5rSGFzaCk7CiAK
LSAgICB2b2lkIHJlc2l6ZVRhYmxlKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSk7Ci0gICAgdm9pZCBz
ZW5kVGFibGUoV2ViUHJvY2Vzc1Byb3h5Jik7CisgICAgdm9pZCBzZW5kU3RvcmVIYW5kbGVUb1By
b2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Jik7CiAKICAgICBIYXNoU2V0PFdlYlByb2Nlc3NQcm94eSo+
IG1fcHJvY2Vzc2VzOwotCi0gICAgdW5zaWduZWQgbV9rZXlDb3VudDsKLSAgICB1bnNpZ25lZCBt
X3RhYmxlU2l6ZTsKLSAgICBWaXNpdGVkTGlua1RhYmxlIG1fdGFibGU7Ci0KLSAgICBIYXNoU2V0
PFdlYkNvcmU6OkxpbmtIYXNoLCBXZWJDb3JlOjpMaW5rSGFzaEhhc2g+IG1fcGVuZGluZ1Zpc2l0
ZWRMaW5rczsKLSAgICBSdW5Mb29wOjpUaW1lcjxWaXNpdGVkTGlua1N0b3JlPiBtX3BlbmRpbmdW
aXNpdGVkTGlua3NUaW1lcjsKKyAgICBXZWJTaGFyZWRMaW5rSGFzaFN0b3JlIG1fbGlua0hhc2hT
dG9yZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVmlzaXRlZExp
bmtTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA2MmE0YjcyMmI2ZDYzMmUyMmU0OThkZmM2YjU4ZTRhMGFhNDExMTZmLi41YWY0
Mzk0MmMwNzJiOTY5MjA1N2VhMDAyMmRkMTI4MDE1YmFmMzAzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE1Myw4ICsxNTMsNiBAQAog
CQkxQTBFQzkwNzEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRUM5MDUx
MjRDMEFCODAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLzsgfTsKIAkJ
MUEwRUM5MEYxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRUM5
MEQxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oICov
OyB9OwogCQkxQTBFQzkxMDEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBMEVDOTBFMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXIuY3BwICovOyB9OwotCQkxQTBGMjlDQjEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRlZExp
bmtUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTBGMjlDOTEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRlZExpbmtUYWJsZS5jcHAgKi87IH07
Ci0JCTFBMEYyOUNDMTIwQjM3MTYwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1RhYmxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBGMjlDQTEyMEIzNzE2
MDA1M0QxQjkgLyogVmlzaXRlZExpbmtUYWJsZS5oICovOyB9OwogCQkxQTBGMjlFMzEyMEI0NDQy
MDA1M0QxQjkgLyogVmlzaXRlZExpbmtTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBGMjlFMTEyMEI0NDQyMDA1M0QxQjkgLyogVmlzaXRl
ZExpbmtTdG9yZS5jcHAgKi87IH07CiAJCTFBMEYyOUU0MTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNp
dGVkTGlua1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTBGMjlFMjEyMEI0NDQyMDA1M0QxQjkgLyogVmlzaXRlZExpbmtTdG9yZS5oICovOyB9
OwogCQkxQTE0RjhFMTFENzRDODM0MDA2Q0JFQzYgLyogRnJhbWVJbmZvRGF0YS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTE0RjhERjFENzRDODM0
MDA2Q0JFQzYgLyogRnJhbWVJbmZvRGF0YS5jcHAgKi87IH07CkBAIC0xMzcxLDYgKzEzNjksOCBA
QAogCQk4MzcyREIyODFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuY3BwICovOyB9OwogCQk4MzcyREIyOTFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNM
b2dnaW5nQ2xpZW50LmggKi87IH07CiAJCTgzNzJEQjJGMUE2NzdENEEwMEM2OTdDNSAvKiBXS0Rp
YWdub3N0aWNMb2dnaW5nUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMkUxQTY3N0Q0QTAwQzY5N0M1IC8qIFdLRGlhZ25vc3Rp
Y0xvZ2dpbmdSZXN1bHRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJODM3Q0E1RTExRjdDNUNGRDAwRDlCRDIyIC8qIExpbmtIYXNoVGFibGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3Q0E1
REYxRjdDNUNGMDAwRDlCRDIyIC8qIExpbmtIYXNoVGFibGUuY3BwICovOyB9OworCQk4MzdDQTVF
MjFGN0M1Q0ZEMDBEOUJEMjIgLyogTGlua0hhc2hUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3Q0E1RTAxRjdDNUNGMjAwRDlCRDIyIC8qIExp
bmtIYXNoVGFibGUuaCAqLzsgfTsKIAkJODM4OTFCNjMxQTY4QjM0MjAwMzBGMzg2IC8qIEFQSURp
YWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4Mzg5MUI2MjFBNjhCMzQyMDAzMEYzODYgLyogQVBJRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQuaCAqLzsgfTsKIAkJODM4OTFCNjkxQTY4QkVCQzAwMzBGMzg2IC8qIF9XS0Rp
YWdub3N0aWNMb2dnaW5nRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgzODkxQjY4MUE2OEJFQkMwMDMwRjM4NiAvKiBfV0tEaWFnbm9zdGlj
TG9nZ2luZ0RlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJODM4OTFCNkMxQTY4QzMwQjAwMzBGMzg2IC8qIERpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
Mzg5MUI2QTFBNjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsg
fTsKQEAgLTEzODMsNiArMTM4Myw4IEBACiAJCTgzQkRDQ0I5MUFDNUZEQjYwMDNGNjQ0MSAvKiBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgzQkRDQ0I4MUFDNUZEQjYwMDNGNjQ0MSAvKiBOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzLmNwcCAqLzsgfTsKIAkJODNCRkFDNDIxRDk2MTM3QzAwNDMzNDkwIC8qIEJsb2JE
b3dubG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODNCRkFDNDAxRDk2MTM2MDAwNDMzNDkwIC8qIEJsb2JEb3dubG9hZENsaWVudC5oICov
OyB9OwogCQk4M0JGQUM0MzFEOTYxMzdDMDA0MzM0OTAgLyogQmxvYkRvd25sb2FkQ2xpZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzQkZBQzQx
MUQ5NjEzNjAwMDQzMzQ5MCAvKiBCbG9iRG93bmxvYWRDbGllbnQuY3BwICovOyB9OworCQk4M0M4
NDQ5QTFGN0M0RUEyMDBDMzgwNUIgLyogV2ViU2hhcmVkTGlua0hhc2hTdG9yZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4M0M4NDQ5ODFGN0M0RTlD
MDBDMzgwNUIgLyogV2ViU2hhcmVkTGlua0hhc2hTdG9yZS5jcHAgKi87IH07CisJCTgzQzg0NDlC
MUY3QzRFQTIwMEMzODA1QiAvKiBXZWJTaGFyZWRMaW5rSGFzaFN0b3JlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4M0M4NDQ5OTFGN0M0RTlEMDBDMzgw
NUIgLyogV2ViU2hhcmVkTGlua0hhc2hTdG9yZS5oICovOyB9OwogCQk4M0Q0NTRENzFCRTlEM0M0
MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzRDQ1NEQ2MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3Jr
TG9hZENsaWVudC5oICovOyB9OwogCQk4M0VFNTc1QjFEQjdENjExMDBDNzRDNTAgLyogV2ViVmFs
aWRhdGlvbk1lc3NhZ2VDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODNFRTU3NTkxREI3RDYwNjAwQzc0QzUwIC8qIFdlYlZhbGlkYXRpb25N
ZXNzYWdlQ2xpZW50LmNwcCAqLzsgfTsKIAkJODNFRTU3NUMxREI3RDYxMTAwQzc0QzUwIC8qIFdl
YlZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4M0VFNTc1QTFEQjdENjA2MDBDNzRDNTAgLyogV2ViVmFsaWRhdGlv
bk1lc3NhZ2VDbGllbnQuaCAqLzsgfTsKQEAgLTIzNjUsOCArMjM2Nyw2IEBACiAJCTFBMEVDOTA1
MTI0QzBBQjgwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMEVDOTBEMTI0QzBBRjUwMDdFRjRBNSAv
KiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBMEVDOTBFMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMUEwRjI5QzkxMjBCMzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rVGFi
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlzaXRlZExpbmtU
YWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMEYyOUNBMTIwQjM3MTYw
MDUzRDFCOSAvKiBWaXNpdGVkTGlua1RhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZpc2l0ZWRMaW5rVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUEwRjI5RTExMjBCNDQ0MjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rU3RvcmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlzaXRlZExpbmtTdG9yZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMEYyOUUyMTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNp
dGVkTGlua1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0ZWRM
aW5rU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUExNEY4REYxRDc0Qzgz
NDAwNkNCRUM2IC8qIEZyYW1lSW5mb0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRnJhbWVJbmZvRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0zNzIyLDYgKzM3MjIsOCBAQAogCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2Vi
UGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTgzNzJEQjJFMUE2NzdENEEwMEM2OTdDNSAvKiBXS0RpYWdub3N0aWNMb2dnaW5n
UmVzdWx0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0RpYWdub3N0
aWNMb2dnaW5nUmVzdWx0VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzdD
QTVERjFGN0M1Q0YwMDBEOUJEMjIgLyogTGlua0hhc2hUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5rSGFzaFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODM3Q0E1RTAxRjdDNUNGMjAwRDlCRDIyIC8qIExpbmtIYXNoVGFibGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlua0hhc2hUYWJsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Mzg5MUI2MjFBNjhCMzQyMDAzMEYzODYgLyogQVBJ
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQVBJRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODM4OTFCNjgxQTY4QkVCQzAwMzBGMzg2IC8qIF9XS0RpYWdub3N0aWNMb2dnaW5nRGVs
ZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLRGlhZ25vc3RpY0xv
Z2dpbmdEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Mzg5MUI2QTFB
NjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3MzQsNiArMzczNiw4IEBACiAJCTgzQkRDQ0I4MUFDNUZE
QjYwMDNGNjQ0MSAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4M0JGQUM0MDFEOTYxMzYwMDA0MzM0OTAgLyogQmxvYkRv
d25sb2FkQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJsb2JEb3du
bG9hZENsaWVudC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9h
ZENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4M0JGQUM0MTFEOTYxMzYw
MDA0MzM0OTAgLyogQmxvYkRvd25sb2FkQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEJsb2JEb3dubG9hZENsaWVudC5jcHA7IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODNDODQ0OTgxRjdDNEU5QzAwQzM4MDVCIC8qIFdlYlNoYXJlZExpbmtIYXNo
U3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU2hhcmVk
TGlua0hhc2hTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzQzg0NDk5
MUY3QzRFOUQwMEMzODA1QiAvKiBXZWJTaGFyZWRMaW5rSGFzaFN0b3JlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNoYXJlZExpbmtIYXNoU3RvcmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODNENDU0RDYxQkU5RDNDNDAwNkM5M0JEIC8qIE5ldHdvcmtM
b2FkQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtMb2Fk
Q2xpZW50Lmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4M0VFNTc1OTFEQjdENjA2MDBDNzRDNTAgLyogV2Vi
VmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4M0VFNTc1QTFEQjdENjA2MDBDNzRDNTAgLyogV2ViVmFsaWRhdGlvbk1l
c3NhZ2VDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmFsaWRh
dGlvbk1lc3NhZ2VDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5OTMs
NiArNDk5Nyw4IEBACiAJCQkJQkNDRjZCMjMxMkM5M0U3QTAwOEY5QzM1IC8qIEltYWdlT3B0aW9u
cy5oICovLAogCQkJCTFBOTJEQzEyMTJGOEJBQjkwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0
LmNwcCAqLywKIAkJCQkxQTkyREMxMDEyRjhCQTQ2MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4
dC5oICovLAorCQkJCTgzN0NBNURGMUY3QzVDRjAwMEQ5QkQyMiAvKiBMaW5rSGFzaFRhYmxlLmNw
cCAqLywKKwkJCQk4MzdDQTVFMDFGN0M1Q0YyMDBEOUJEMjIgLyogTGlua0hhc2hUYWJsZS5oICov
LAogCQkJCTJEMTA4NzVFMUQyQzU3M0UwMEI4NUY4MiAvKiBMb2FkUGFyYW1ldGVycy5jcHAgKi8s
CiAJCQkJMkQxMDg3NUYxRDJDNTczRTAwQjg1RjgyIC8qIExvYWRQYXJhbWV0ZXJzLmggKi8sCiAJ
CQkJMkQ1MDM2NkExQkNERTE3OTAwRTIwQkIzIC8qIE5hdGl2ZVdlYkdlc3R1cmVFdmVudC5oICov
LApAQCAtNTAzMSw4ICs1MDM3LDYgQEAKIAkJCQkxQUMxMzM2NjE4NTY1QjU3MDBGM0VDMDUgLyog
VXNlckRhdGEuaCAqLywKIAkJCQkyNjg0MDU0QTE4Qjg2NkZGMDAyMkMzOEIgLyogVmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlSW5mby5jcHAgKi8sCiAJCQkJMjY4NDA1NDIxOEI4NUE2MzAwMjJDMzhC
IC8qIFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8uaCAqLywKLQkJCQkxQTBGMjlDOTEyMEIz
NzE2MDA1M0QxQjkgLyogVmlzaXRlZExpbmtUYWJsZS5jcHAgKi8sCi0JCQkJMUEwRjI5Q0ExMjBC
MzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rVGFibGUuaCAqLywKIAkJCQk1MThEMkNBQjEyRDUx
NTNCMDAzQkI5M0IgLyogV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgKi8sCiAJCQkJNTE4RDJD
QUMxMkQ1MTUzQjAwM0JCOTNCIC8qIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCAqLywKIAkJCQlC
Q0Y1MDcyNjEyNDMyOUFBMDA1OTU1QUUgLyogV2ViQ2VydGlmaWNhdGVJbmZvLmggKi8sCkBAIC01
MDkxLDYgKzUwOTUsOCBAQAogCQkJCTM3OTQ4NDAyMTUwQzM1MDYwMEU1MkNFOSAvKiBXZWJSZW5k
ZXJMYXllci5oICovLAogCQkJCTM3NjA4ODFDMTUwNDEzRTkwMEZDODJDNyAvKiBXZWJSZW5kZXJP
YmplY3QuY3BwICovLAogCQkJCTM3NjA4ODFEMTUwNDEzRTkwMEZDODJDNyAvKiBXZWJSZW5kZXJP
YmplY3QuaCAqLywKKwkJCQk4M0M4NDQ5ODFGN0M0RTlDMDBDMzgwNUIgLyogV2ViU2hhcmVkTGlu
a0hhc2hTdG9yZS5jcHAgKi8sCisJCQkJODNDODQ0OTkxRjdDNEU5RDAwQzM4MDVCIC8qIFdlYlNo
YXJlZExpbmtIYXNoU3RvcmUuaCAqLywKIAkJCQk1MTFGN0QzRjFFQjFCQ0VFMDBFNDdCODMgLyog
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwICovLAogCQkJCTUxMUY3RDQwMUVCMUJDRUUw
MEU0N0I4MyAvKiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oICovLAogCQkJCTVDOUU1NjdG
MURGNzkzMDkwMEM5RUUzMyAvKiBXZWJzaXRlUG9saWNpZXMuaCAqLywKQEAgLTg1NzMsNiArODU3
OSw3IEBACiAJCQkJNDEzMDc1QUQxREU4NUY1ODAwMzlFQzY5IC8qIExpYldlYlJUQ1NvY2tldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEQzQ1OUMxRTNEQkIyODAwQjExRjUxIC8qIExpYldlYlJU
Q1NvY2tldENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzMDc1QjIxREU4NUY1ODAwMzlF
QzY5IC8qIExpYldlYlJUQ1NvY2tldEZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTgzN0NB
NUUyMUY3QzVDRkQwMEQ5QkQyMiAvKiBMaW5rSGFzaFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRDEwODc2MTFEMkM1NzNFMDBCODVGODIgLyogTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBMUQ4QkEyMTczMUEzNjMwMDE0MURBNCAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4QzcyOEQxNzM4NDc3QzAwMEE2NTU0IC8qIExvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODA2LDcgKzg4MTMs
NiBAQAogCQkJCTJERDVBNzI5MUVCRjA4RDUwMDlCQTU5NyAvKiBWaXNpYmxlV2ViUGFnZUNvdW50
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMEYyOUU0MTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNp
dGVkTGlua1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTYwMjI0RDE4QzE2QjlGMDBDM0U4
QzkgLyogVmlzaXRlZExpbmtTdG9yZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTBG
MjlDQzEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRlZExpbmtUYWJsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFGNENFRjAxOEJDNDgxODAwQkMyRDM0IC8qIFZpc2l0ZWRMaW5rVGFibGVDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThFN0QzRDE4QzE1MTQ5MDA1QTcwMkEgLyogVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFB
OUJBRTExODRGRkFDNzAwM0I2QkM2IC8qIFdlYWtPYmpDUHRyLmggaW4gSGVhZGVycyAqLywKQEAg
LTg5NzUsNiArODk4MSw3IEBACiAJCQkJN0MzNjFENzMxOTI3RkEzNjAwMzZBNTlEIC8qIFdlYlNj
cmlwdE1lc3NhZ2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlEM0I5NDg0OTExRkY0QjY1
MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUJF
QjYyQzFGM0E1QUQ3MDA1MDI5QjkgLyogV2ViU2VydmljZVdvcmtlclByb3ZpZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk4M0M4NDQ5QjFGN0M0RUEyMDBDMzgwNUIgLyogV2ViU2hhcmVkTGlua0hh
c2hTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0ODMyRDcxQTlDREY5NjAwOEI0REZFIC8q
IFdlYnNpdGVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQ4MzJEMTFBOUJEQzJGMDA4QjRE
RkUgLyogV2Vic2l0ZURhdGFSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTNDMkFBMUEz
MjU3MzAwMDRFOEM3MCAvKiBXZWJzaXRlRGF0YVN0b3JlLmggaW4gSGVhZGVycyAqLywKQEAgLTEw
MTMyLDYgKzEwMTM5LDcgQEAKIAkJCQk0MTMwNzVBRTFERTg1RjU4MDAzOUVDNjkgLyogTGliV2Vi
UlRDU29ja2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxREM0NTlCMUUzREJCMjgwMEIxMUY1
MSAvKiBMaWJXZWJSVENTb2NrZXRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDEzMDc1
QjExREU4NUY1ODAwMzlFQzY5IC8qIExpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJODM3Q0E1RTExRjdDNUNGRDAwRDlCRDIyIC8qIExpbmtIYXNoVGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkQxMDg3NjAxRDJDNTczRTAwQjg1RjgyIC8qIExvYWRQYXJh
bWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEMTA4NzYzMUQyQzY0MUIwMEI4NUY4MiAv
KiBMb2FkUGFyYW1ldGVyc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExRDhCQTExNzMx
QTM2MzAwMTQxREE0IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMTA0MDUsNyArMTA0MTMsNiBAQAogCQkJCTI2ODQwNTRDMThCODZDMzUwMDIyQzM4QiAvKiBW
aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMEYy
OUUzMTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBNjAyMjRDMThDMTZCOUYwMEMzRThDOSAvKiBWaXNpdGVkTGlua1N0b3JlTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBMEYyOUNCMTIwQjM3MTYwMDUzRDFC
OSAvKiBWaXNpdGVkTGlua1RhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjRDRUVGMThC
QzQ4MTgwMEJDMkQzNCAvKiBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQThFN0QzQzE4QzE1MTQ5MDA1QTcwMkEgLyogVmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0VEQTEyRTIx
NTJDRDFBRTAwRDlFMDhEIC8qIFdlYkFsdGVybmF0aXZlVGV4dENsaWVudC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTEwNjE2LDYgKzEwNjIzLDcgQEAKIAkJCQk3QzM2MUQ3MjE5MjdGQTM2MDAzNkE1
OUQgLyogV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDNC
OTQ4NDgxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MUJFQjYyQjFGM0E1QUQ3MDA1MDI5QjkgLyogV2ViU2VydmljZVdvcmtlclBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTgzQzg0NDlBMUY3QzRFQTIwMEMzODA1QiAv
KiBXZWJTaGFyZWRMaW5rSGFzaFN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNDgzMkQ2
MUE5Q0RGOTYwMDhCNERGRSAvKiBXZWJzaXRlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTQ4MzJEOTFBOUQxRkQyMDA4QjRERkUgLyogV2Vic2l0ZURhdGFSZWNvcmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUE1M0MyQTkxQTMyNTcyQjAwNEU4QzcwIC8qIFdlYnNpdGVEYXRhU3RvcmUu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAKaW5kZXggNmU4
YjA2ZGZiOGQzZDVmMGJjZDUzZDUwODgxOTU4NGM4ZjM3MTExNS4uMTBjMzYxOTk3MDhhMTExMjE5
YTlhYTM0NDQyOWZhMjA4N2QyZGJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcApA
QCAtNzMsMTIgKzczLDEyIEBAIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjp+VmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXIoKQogCiBib29sIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpp
c0xpbmtWaXNpdGVkKFBhZ2UmLCBMaW5rSGFzaCBsaW5rSGFzaCwgY29uc3QgVVJMJiwgY29uc3Qg
QXRvbWljU3RyaW5nJikKIHsKLSAgICByZXR1cm4gbV92aXNpdGVkTGlua1RhYmxlLmlzTGlua1Zp
c2l0ZWQobGlua0hhc2gpOworICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rVGFibGUuY29udGFpbnMo
bGlua0hhc2gpOwogfQogCiB2b2lkIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjphZGRWaXNp
dGVkTGluayhQYWdlJiBwYWdlLCBMaW5rSGFzaCBsaW5rSGFzaCkKIHsKLSAgICBpZiAobV92aXNp
dGVkTGlua1RhYmxlLmlzTGlua1Zpc2l0ZWQobGlua0hhc2gpKQorICAgIGlmIChtX3Zpc2l0ZWRM
aW5rVGFibGUuY29udGFpbnMobGlua0hhc2gpKQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJQ
YWdlKiB3ZWJQYWdlID0gV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKCZwYWdlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxl
Q29udHJvbGxlci5oCmluZGV4IGQ2ZTgyYmY3ZGU1MzQwZGFiZTUxOGQ4M2FlMjFmZmUzNjhhOTFh
ZWIuLmYzNzY2MWY5Nzg0MjQ1YjRlMmVmNTU3N2I4ZDBhMWFhZGU4YTRkY2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtU
YWJsZUNvbnRyb2xsZXIuaApAQCAtMjUsOSArMjUsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkxpbmtIYXNoVGFibGUuaCIKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNp
bmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKLSNpbmNsdWRlICJWaXNpdGVkTGlua1RhYmxlLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9WaXNpdGVkTGlua1N0b3JlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewpAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlQWxsVmlzaXRlZExp
bmtzKCk7CiAKICAgICB1aW50NjRfdCBtX2lkZW50aWZpZXI7Ci0gICAgVmlzaXRlZExpbmtUYWJs
ZSBtX3Zpc2l0ZWRMaW5rVGFibGU7CisgICAgTGlua0hhc2hUYWJsZSBtX3Zpc2l0ZWRMaW5rVGFi
bGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322136</attachid>
            <date>2017-09-28 16:09:44 -0700</date>
            <delta_ts>2017-09-28 16:10:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177575-20170928160943.patch</filename>
            <type>text/plain</type>
            <size>119546</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmJlZjZjOThjMjQ2YWVh
MDBlMmZhZDkwOGJmYjA2NzMxMDEzNjM4NC4uZjJmNGY1Y2MxOGY3ZGY5NTVkN2E4MGZhYTE4NjY3
ZGQxZWFlZTg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE3LTA5LTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgc29tZSBsb2dpYyBv
dXQgb2YgVmlzaXRlZExpbmtTdG9yZSBhbmQgbWFrZSBpdCByZXVzYWJsZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTc1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIExpbmtIYXNoIHRvIFNo
YXJlZFN0cmluZ0hhc2ggdG8gbWFrZSBpdCBtb3JlIHJldXNhYmxlLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKiBkb20vVmlzaXRl
ZExpbmtTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsaW5rSGFzaEZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yTGlu
ayk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3Rh
dGVTbG93Q2FzZSk6CisgICAgICAgICogZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9y
RWxlbWVudDo6dmlzaXRlZExpbmtIYXNoIGNvbnN0KToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlD
bGllbnRzLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkVmlzaXRlZExpbmspOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayk6CisgICAg
ICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RvcmU6OmludmFsaWRhdGVTdHlsZXNGb3JM
aW5rKToKKyAgICAgICAgKiBwYWdlL1Zpc2l0ZWRMaW5rU3RvcmUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9TaGFyZWRTdHJpbmdIYXNoLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xpbmtIYXNoLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Om5lZWRzVHJhaWxpbmdTbGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2hhcmVkU3RyaW5nSGFzaCk6CisgICAgICAgICogcGxh
dGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTGlua0hhc2guaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2hIYXNo
OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2hIYXNoOjplcXVhbCk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoSGFzaDo6YXZvaWREZWxldGVkVmFs
dWUpOgorCiAyMDE3LTA5LTI3ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+
CiAKICAgICAgICAgRGVmYXVsdCB0byB2b2lkKiBmb3IgcGxhdGZvcm0gd2lkZ2V0cwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpp
bmRleCAzMWNiYmExNDUzMTBiYTg2OGU2Njk4NmM4M2E0MDk4OGM3ZGVmZTlkLi4yYzY1OTYxMzQ2
YTIyNTcxYzgyNGRhNDk2MzgwNGJmNjExYWI2ZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBA
CisyMDE3LTA5LTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAg
U3BsaXQgc29tZSBsb2dpYyBvdXQgb2YgVmlzaXRlZExpbmtTdG9yZSBhbmQgbWFrZSBpdCByZXVz
YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3
NTc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bs
aXQgc29tZSBsb2dpYyBvdXQgb2YgVmlzaXRlZExpbmtTdG9yZSBhbmQgbWFrZSBpdCByZXVzYWJs
ZSBmb3Igb3RoZXIgcHVycG9zZXMgdGhhbgorICAgICAgICB2aXNpdGVkIGxpbmtzIGFuZCBmcm9t
IG90aGVyIHByb2Nlc3NlcyB0aGFuIHRoZSBVSVByb2Nlc3MuCisKKyAgICAgICAgVGhlIHBsYW4g
aXMgdG8gcmV1c2UgdGhlIG5ldyBXZWJTaGFyZWRMaW5rSGFzaFN0b3JlIGZvciBTZXJ2aWNlIFdv
cmtlciByZWdpc3RyYXRpb24KKyAgICAgICAgb24gU3RvcmFnZVByb2Nlc3Mgc2lkZSBhbmQgcXVl
cnlpbmcgb24gV2ViQ29udGVudCBwcm9jZXNzIHNpZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6Om5leHRQb3dlck9mMik6CisgICAgICAgIChXZWJLaXQ6OnRhYmxl
U2l6ZUZvcktleUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFN0b3Jl
OjpTaGFyZWRTdHJpbmdIYXNoU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRTdHJpbmdI
YXNoU3RvcmU6OmNyZWF0ZVNoYXJlZE1lbW9yeUhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNo
YXJlZFN0cmluZ0hhc2hTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkU3RyaW5n
SGFzaFN0b3JlOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hTdG9y
ZTo6cmVzaXplVGFibGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRTdHJpbmdIYXNoU3RvcmU6
OnBlbmRpbmdTaGFyZWRTdHJpbmdIYXNoZXNUaW1lckZpcmVkKToKKyAgICAgICAgKiBTaGFyZWQv
U2hhcmVkU3RyaW5nSGFzaFN0b3JlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmguCisgICAgICAgIChXZWJL
aXQ6OlNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6Q2xpZW50Ojp+Q2xpZW50KToKKyAgICAgICAgKFdl
YktpdDo6U2hhcmVkU3RyaW5nSGFzaFN0b3JlOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKiBT
aGFyZWQvU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1Zpc2l0ZWRMaW5rVGFibGUuY3BwLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRT
dHJpbmdIYXNoVGFibGU6OlNoYXJlZFN0cmluZ0hhc2hUYWJsZSk6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlZFN0cmluZ0hhc2hUYWJsZTo6flNoYXJlZFN0cmluZ0hhc2hUYWJsZSk6CisgICAgICAg
IChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hUYWJsZTo6c2V0U2hhcmVkTWVtb3J5KToKKyAgICAg
ICAgKFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFRhYmxlOjphZGQpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6U2hhcmVkU3RyaW5nSGFzaFRhYmxlOjpjbGVhcik6CisgICAgICAgICogU2hhcmVkL1NoYXJl
ZFN0cmluZ0hhc2hUYWJsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvVmlz
aXRlZExpbmtUYWJsZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
OgorICAgICAgICAoV0tDb250ZXh0QWRkVmlzaXRlZExpbmspOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVmlzaXRlZExpbmtTdG9yZS5tbToKKyAgICAgICAgKC1bX1dLVmlzaXRl
ZExpbmtTdG9yZSBhZGRWaXNpdGVkTGlua1dpdGhVUkw6XSk6CisgICAgICAgICogVUlQcm9jZXNz
L1Zpc2l0ZWRMaW5rU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpWaXNpdGVkTGlua1N0b3Jl
OjpWaXNpdGVkTGlua1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6VmlzaXRlZExpbmtTdG9yZTo6
YWRkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0
ZWRMaW5rSGFzaCk6CisgICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZUFs
bCk6CisgICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rSGFz
aEZyb21QYWdlKToKKyAgICAgICAgKFdlYktpdDo6VmlzaXRlZExpbmtTdG9yZTo6c2VuZFN0b3Jl
SGFuZGxlVG9Qcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6VmlzaXRlZExpbmtTdG9yZTo6ZGlk
SW52YWxpZGF0ZVNoYXJlZE1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rU3Rv
cmU6OmRpZEFkZFNoYXJlZFN0cmluZ0hhc2hlcyk6CisgICAgICAgICogVUlQcm9jZXNzL1Zpc2l0
ZWRMaW5rU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxl
cjo6aXNMaW5rVmlzaXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rVGFibGVDb250
cm9sbGVyOjphZGRWaXNpdGVkTGluayk6CisgICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rVGFi
bGVDb250cm9sbGVyOjp2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmg6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLm1lc3NhZ2VzLmluOgor
CiAyMDE3LTA5LTI2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUGFzcyBhIGNvbXBsZXRpb24gaGFuZGxlciBpbnN0ZWFkIG9mIGEgV2ViRnJh
bWVQb2xpY3lMaXN0ZW5lclByb3h5IGR1cmluZyBwb2xpY3kgZGVjaXNpb25zCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKaW5kZXggY2MxNDhiYjk1NWMzNzdmMGNlZGIyMWY0NWVhYTY5YzAxOGVi
NGEwZi4uYjhmZDc2ZmRmNTBiYTA4NjEwMDM2YTcyNGJiZTZiYzM5Mjc0ZTA4ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA5LTI4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgc29tZSBsb2dpYyBvdXQg
b2YgVmlzaXRlZExpbmtTdG9yZSBhbmQgbWFrZSBpdCByZXVzYWJsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTc1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJWaXNp
dGVkTGlua1N0b3JlLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtT
dG9yZS5tbToKKyAgICAgICAgKFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rKToK
KyAgICAgICAgKFdlYlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZVZpc2l0ZWRMaW5rKToKKyAgICAg
ICAgKFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmlzTGlua1Zpc2l0ZWQpOgorICAgICAgICAoV2ViVmlz
aXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoKToKKwogMjAxNy0wOS0yNyAgSm9uYXRo
YW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciBI
aWdoIFNpZXJyYSAzMiBiaXQgTWFjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXggOGRm
NWQ4YzUxZWViYjQ2Nzc0YTE3YzU3NWUyODdhNmU2ODRkYmRhZi4uNzY3NTk4NDM4YjgwZGRkNjg4
Y2E5MjA4YzFjZjhmMTE5ZWI3Yjg3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE2IEBACisyMDE3LTA5LTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CisKKyAgICAgICAgU3BsaXQgc29tZSBsb2dpYyBvdXQgb2YgVmlzaXRlZExpbmtTdG9yZSBhbmQg
bWFrZSBpdCByZXVzYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc3NTc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rKToKKyAgICAgICAgKFdlYlZp
c2l0ZWRMaW5rU3RvcmU6OmlzTGlua1Zpc2l0ZWQpOgorICAgICAgICAoV2ViVmlzaXRlZExpbmtT
dG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJW
aXNpdGVkTGlua1N0b3JlLmg6CisKIDIwMTctMDktMjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIFBvbGljeUFjdGlvbiBhbiBlbmNv
ZGFibGUgZW51bSBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA5NTQ0N2Q2YTg5MzViZjQw
OWMwZTQxOGI2Y2NlNDAzOGQ3Nzc3YzE2Li45Y2QwYWExMTE0YzNlODhhODBmYmUyZjkxNWE1Y2U2
MGQzZmUxYmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjMyMyw3ICsyMzIzLDYgQEAgc2V0
KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL0xlbmd0aEJveC5jcHAKICAgICBwbGF0Zm9y
bS9MZW5ndGhQb2ludC5jcHAKICAgICBwbGF0Zm9ybS9MZW5ndGhTaXplLmNwcAotICAgIHBsYXRm
b3JtL0xpbmtIYXNoLmNwcAogICAgIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwCiAgICAg
cGxhdGZvcm0vTG9nZ2luZy5jcHAKICAgICBwbGF0Zm9ybS9Mb3dQb3dlck1vZGVOb3RpZmllci5j
cHAKQEAgLTIzNDYsNiArMjM0NSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKICAgICBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCiAgICAgcGxhdGZvcm0vU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuY3BwCisgICAgcGxhdGZv
cm0vU2hhcmVkU3RyaW5nSGFzaC5jcHAKICAgICBwbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmNw
cAogICAgIHBsYXRmb3JtL1RoZW1lLmNwcAogICAgIHBsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNjgxMjdkNDk5YzU2MTY4MDdhMDI5MTc5OWUwMDY4ZTI5OTVkNGM5NC4uMDY5NTI3
OGU4MmNhOTNiZjEwZGM3MjY5MGE5ODkwNTk0MmY4M2ZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQ5Nyw2ICszNDk3LDgg
QEAKIAkJODM0OEJGQUIxQjg1NzI5ODAwOTEyRjM2IC8qIENsYXNzQ29sbGVjdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzQ4QkZBOTFCODU3
Mjk1MDA5MTJGMzYgLyogQ2xhc3NDb2xsZWN0aW9uLmNwcCAqLzsgfTsKIAkJODM0OEJGQUMxQjg1
NzI5ODAwOTEyRjM2IC8qIENsYXNzQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0OEJGQUExQjg1NzI5NTAwOTEyRjM2IC8qIENsYXNz
Q29sbGVjdGlvbi5oICovOyB9OwogCQk4MzRERDRGNDFCRTA4OTg5MDAyQzlDM0UgLyogUGFnZU1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNERE
NEYzMUJFMDg5ODkwMDJDOUMzRSAvKiBQYWdlTWFjLm1tICovOyB9OworCQk4MzRERkFDRjFGN0RB
RTVEMDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRERkFDRTFGN0RBRTU3MDBDMjcyNUIgLyogU2hh
cmVkU3RyaW5nSGFzaC5jcHAgKi87IH07CisJCTgzNERGQUQwMUY3REFFNUQwMEMyNzI1QiAvKiBT
aGFyZWRTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4MzRERkFDQzFGN0RBRTU2MDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTgzNTIwQzdF
MUE3MUJGQ0MwMDZCRDJBQSAvKiBDU1NGb250RmFtaWx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzUyMEM3RDFBNzFCRkNDMDA2QkQyQUEgLyogQ1NT
Rm9udEZhbWlseS5oICovOyB9OwogCQk4MzU2NTdDNzFFQ0FCMTA3MDBDREU3MkQgLyogSlNET01N
YXRyaXhJbml0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDgzNTY1N0M2MUVDQUIwRTgwMENERTcyRCAvKiBKU0RPTU1hdHJpeEluaXQuY3BwICovOyB9
OwogCQk4MzU4Q0I2RjFDNTMyNzcyMDBFMEMyRDggLyogSlNYTUxEb2N1bWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4M0Y1NzBBRTFDNTMyNjhF
MDA3RkQ2Q0IgLyogSlNYTUxEb2N1bWVudC5jcHAgKi87IH07CkBAIC00NjcwLDggKzQ2NzIsNiBA
QAogCQlBNzlCQURBMzE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzlCQUQ5RjE2MUU3RjNGMDBDMkU2
NTIgLyogUnVsZVNldC5jcHAgKi87IH07CiAJCUE3OUJBREE0MTYxRTdGM0YwMEMyRTY1MiAvKiBS
dWxlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzlCQURBMDE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5oICovOyB9OwogCQlBN0E3OENENTE1
MzJCQTYyMDA2QzIxRTQgLyogQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBNzhDRDQxNTMyQkE2MjAwNkMy
MUU0IC8qIENvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcCAqLzsgfTsKLQkJQTdBRDJGODcwRUM4
OUQwNzAwOEFCMDAyIC8qIExpbmtIYXNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3QUQyRjg1MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5j
cHAgKi87IH07Ci0JCUE3QUQyRjg4MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBRDJGODYwRUM4OUQw
NzAwOEFCMDAyIC8qIExpbmtIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTdCNkU2OUYwQjI5MUE5NjAwRDA1MjlGIC8qIERyYWdEYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I2RTY5RDBC
MjkxQTk2MDBEMDUyOUYgLyogRHJhZ0RhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0JCRTI2NjExQUZCM0YyMDAwNUVBMDMgLyogSlNIVE1M
TWV0ZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QkJFMjY0MTFBRkIzRjIwMDA1RUEwMyAvKiBKU0hUTUxNZXRlckVsZW1lbnQuY3Bw
ICovOyB9OwogCQlBN0JCRTI2NzExQUZCM0YyMDAwNUVBMDMgLyogSlNIVE1MTWV0ZXJFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JCRTI2
NTExQUZCM0YyMDAwNUVBMDMgLyogSlNIVE1MTWV0ZXJFbGVtZW50LmggKi87IH07CkBAIC0xMTc3
Miw2ICsxMTc3Miw4IEBACiAJCTgzNEI4NkE4MUM1NkU5M0UwMEYzRjBFMyAvKiBKU0hUTUxEYXRh
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxEYXRhRWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzRCODZBOTFDNTZFOTNFMDBG
M0YwRTMgLyogSlNIVE1MRGF0YUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNIVE1MRGF0YUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4MzRERDRGMzFCRTA4OTg5MDAyQzlDM0UgLyogUGFnZU1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBhZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTgzNERGQUNDMUY3REFFNTYwMEMyNzI1QiAvKiBTaGFyZWRTdHJpbmdI
YXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFN0cmluZ0hhc2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM0REZBQ0UxRjdEQUU1NzAwQzI3MjVC
IC8qIFNoYXJlZFN0cmluZ0hhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2hhcmVkU3RyaW5nSGFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTgzNTBDM0U3MURBNTlCNjIwMDM1NjQ0NiAvKiBTY3JvbGxUb09wdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsVG9PcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTgzNTBDM0U4MURBNTlCNjIwMDM1NjQ0NiAvKiBTY3JvbGxUb09wdGlv
bnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNjcm9sbFRvT3B0aW9ucy5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNTIwQzdEMUE3MUJGQ0MwMDZCRDJBQSAvKiBDU1NG
b250RmFtaWx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZvbnRGYW1p
bHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMTQ3LDggKzEzMTQ5LDYgQEAK
IAkJQTc5QkFEOUYxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUnVsZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3OUJBREEwMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bGVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTdBNzhDRDQxNTMyQkE2MjAwNkMyMUU0IC8qIENvbnRhaW5lck5vZGVBbGdvcml0
aG1zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRhaW5lck5v
ZGVBbGdvcml0aG1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdBRDJGODUw
RUM4OUQwNzAwOEFCMDAyIC8qIExpbmtIYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExpbmtIYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTdBRDJGODYwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtIYXNoLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExpbmtIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3QjRFQTY4MTRDOTM0ODQwMEM4RjVCRiAvKiBKU01hbGxvY1N0YXRpc3RpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNYWxsb2NTdGF0aXN0aWNzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdCNEVBNjkxNEM5MzQ4NDAwQzhGNUJGIC8q
IEpTTWFsbG9jU3RhdGlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U01hbGxvY1N0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdCNEVB
NzgxNEM5MzQ4NDAwQzhGNUJGIC8qIEpTSW50ZXJuYWxTZXR0aW5ncy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ2MjEsOCArMjQ2MjEsNiBAQAogCQkJCTBGODcxNjZF
MUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5oICovLAogCQkJCTBGRUYyMENEMUJENEEy
NDEwMDEyOEU1RCAvKiBMZW5ndGhTaXplLmNwcCAqLywKIAkJCQlCQ0ZGNjQ5MDBFQUQxNUMyMDBD
MUQ2RjcgLyogTGVuZ3RoU2l6ZS5oICovLAotCQkJCUE3QUQyRjg1MEVDODlEMDcwMDhBQjAwMiAv
KiBMaW5rSGFzaC5jcHAgKi8sCi0JCQkJQTdBRDJGODYwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtI
YXNoLmggKi8sCiAJCQkJNTE0M0IyNjIxREREMTQ5MDAwMTRGQUM2IC8qIExpbmtJY29uLmggKi8s
CiAJCQkJQzA0NkUxQUIxMjA4QTlGRTAwQkEyQ0Y3IC8qIExvY2FsaXplZFN0cmluZ3MuY3BwICov
LAogCQkJCTkzNTIwN0JEMDlCRDQxMEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdzLmggKi8s
CkBAIC0yNDY5NSw2ICsyNDY5Myw4IEBACiAJCQkJMDc3QUYxM0UxOEY0QUU0MDAwMDFFRDYxIC8q
IFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uLmggKi8sCiAJCQkJMUE0QTk1NEIwQjRF
RENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5jcHAgKi8sCiAJCQkJMUE0QTk1NEMwQjRFREND
QjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5oICovLAorCQkJCTgzNERGQUNFMUY3REFFNTcwMEMy
NzI1QiAvKiBTaGFyZWRTdHJpbmdIYXNoLmNwcCAqLywKKwkJCQk4MzRERkFDQzFGN0RBRTU2MDBD
MjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5oICovLAogCQkJCTkzMzA5RUEwMDk5RUI3OEMwMDU2
RTU4MSAvKiBTaGFyZWRUaW1lci5oICovLAogCQkJCUY1ODc4NjYyMDJERTNCMTEwMUVBNDEyMiAv
KiBTU0xLZXlHZW5lcmF0b3IuaCAqLywKIAkJCQlGNDMzRTkwNDFEQkJEQkMyMDBFRjBEMTQgLyog
U3RhdGljUGFzdGVib2FyZC5jcHAgKi8sCkBAIC0yNTg5Miw5ICsyNTg5Miw5IEBACiAJCQkJQkNF
QTQ4MTMwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJsb2NrTGluZUxheW91dC5jcHAgKi8sCiAJ
CQkJQkNFQTQ4MjIwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJveC5jcHAgKi8sCiAJCQkJQkNF
QTQ4MjMwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJveC5oICovLAorCQkJCUJDRUIxNzlCMTQz
Mzc5RjUwMDUyRUFFOSAvKiBSZW5kZXJCb3hGcmFnbWVudEluZm8uaCAqLywKIAkJCQlCQzk2REI0
NTBGM0E4ODIyMDA1NzNDQjMgLyogUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwICovLAogCQkJCUJD
OTZEQjQyMEYzQTg4MEUwMDU3M0NCMyAvKiBSZW5kZXJCb3hNb2RlbE9iamVjdC5oICovLAotCQkJ
CUJDRUIxNzlCMTQzMzc5RjUwMDUyRUFFOSAvKiBSZW5kZXJCb3hGcmFnbWVudEluZm8uaCAqLywK
IAkJCQlCQ0VBNDgyNjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQnV0dG9uLmNwcCAqLywKIAkJ
CQlCQ0VBNDgyNzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQnV0dG9uLmggKi8sCiAJCQkJQjU2
NTc5QjQxODI0RDEyQTAwRTc5RjIzIC8qIFJlbmRlckNoaWxkSXRlcmF0b3IuaCAqLywKQEAgLTI1
OTE3LDYgKzI1OTE3LDEwIEBACiAJCQkJNTNDODI5OEMxM0Q4RDkyNzAwREUyREVCIC8qIFJlbmRl
ckZsZXhpYmxlQm94LmggKi8sCiAJCQkJNTA4Q0NBNEUxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRl
ckZsb3dUaHJlYWQuY3BwICovLAogCQkJCTUwOENDQTREMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5k
ZXJGbG93VGhyZWFkLmggKi8sCisJCQkJRDcwQUQ2NTUxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyLmNwcCAqLywKKwkJCQlENzBBRDY1NjEzRTEzNDJCMDA1QjUwQjQg
LyogUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCAqLywKKwkJCQlCQ0U5M0Y0NjE1MTdDNkQ1MDA4
Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuY3BwICovLAorCQkJCUJDRTkzRjQ0
MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5oICovLAogCQkJ
CUE4NzFERUNDMEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJGcmFtZS5jcHAgKi8sCiAJCQkJQTg3
MURFQ0IwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZyYW1lLmggKi8sCiAJCQkJMEZEMzA4MEMx
MTdDRjdFNzAwQTc5MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5jcHAgKi8sCkBAIC0yNTk4OSwxMCAr
MjU5OTMsNiBAQAogCQkJCUFERTE2NzM2MTgxMDUwQzMwMDQ2M0EyRSAvKiBSZW5kZXJQdHIuaCAq
LywKIAkJCQk1QTU3NEYyMjEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuY3BwICovLAog
CQkJCTVBNTc0RjIzMTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oICovLAotCQkJCUQ3
MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAgKi8s
Ci0JCQkJRDcwQUQ2NTYxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
LmggKi8sCi0JCQkJQkNFOTNGNDYxNTE3QzZENTAwOENDRjc0IC8qIFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyU2V0LmNwcCAqLywKLQkJCQlCQ0U5M0Y0NDE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVy
RnJhZ21lbnRDb250YWluZXJTZXQuaCAqLywKIAkJCQlBODcxREZERTBBMTUzNzZCMDBCMTJBNjgg
LyogUmVuZGVyUmVwbGFjZWQuY3BwICovLAogCQkJCUE4NzFERkRGMEExNTM3NkIwMEIxMkE2OCAv
KiBSZW5kZXJSZXBsYWNlZC5oICovLAogCQkJCUJDQTg0NkQ0MERDNjdBMzUwMDI2QzMwOSAvKiBS
ZW5kZXJSZXBsaWNhLmNwcCAqLywKQEAgLTI3ODE3LDcgKzI3ODE3LDYgQEAKIAkJCQk4NDczMEQ4
OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MTI5Qzk5NzFGNTlCOTYzMDA5RDc0MDMgLyogRmV0Y2hCb2R5U291cmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MUQxMjlEQjFGM0QxNDM4MDBEMTVFNDcgLyogRmV0Y2hIZWFkZXJzLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwMjMgLyogRmV0Y2hJbnRl
cm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFBRDc1M0ExQ0VGNkJEMTAwQTMx
NDg2IC8qIEZldGNoT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFMTkxNEQxRjJBOUFG
QjAwMjcyRjc4IC8qIEZldGNoUmVmZXJyZXJQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTdD
RTE5MTVBMUYyQTlCMzQwMDI3MkY3OCAvKiBGZXRjaFJlcXVlc3RDYWNoZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yOTE1Myw3ICsyOTE1Miw2IEBACiAJCQkJODlCNUVBQTIxMUU4MDAzRDAwRjIzNjdF
IC8qIExpbmVFbmRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZGRUZBQjJBMTgzODBEQTAwMDUx
NDUzNCAvKiBMaW5lTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZGREJDMDQ3MTgz
RDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lkdGguaCBpbiBIZWFkZXJzICovLAotCQkJCUE3QUQyRjg4
MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0JBOURD
MEIxREY0NERGNDAwMDU2NzVDIC8qIExpbmtIZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
NDNCMjYzMURERDE1MjAwMDE0RkFDNiAvKiBMaW5rSWNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE0REE0MjIxQ0REM0E4MzAwRjQ0NzNDIC8qIExpbmtJY29uQ29sbGVjdG9yLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI5NjU4LDggKzI5NjU2LDggQEAKIAkJCQlCQ0VBNDg2MDA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVyQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTBENzY4MTdEOEVFNzEw
MDVFMjYyNiAvKiBSZW5kZXJCbG9ja0Zsb3cuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODYy
MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJCb3guaCBpbiBIZWFkZXJzICovLAotCQkJCUJDOTZE
QjQzMEYzQTg4MEUwMDU3M0NCMyAvKiBSZW5kZXJCb3hNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNFQjE3OUMxNDMzNzlGNTAwNTJFQUU5IC8qIFJlbmRlckJveEZyYWdtZW50SW5m
by5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkM5NkRCNDMwRjNBODgwRTAwNTczQ0IzIC8qIFJlbmRl
ckJveE1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2NjA5N0Q5MzAyMDA5
NEM5RTQgLyogUmVuZGVyQnV0dG9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTY1NzlCNTE4MjRE
MTJBMDBFNzlGMjMgLyogUmVuZGVyQ2hpbGRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNFNDQxMzQxMkY3NDhFMjAwOUI4NEI4IC8qIFJlbmRlckNvbWJpbmVUZXh0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI5Njc0LDYgKzI5NjcyLDggQEAKIAkJCQkwNjZDNzczMTBBQjYwM0ZEMDAyMzhD
QzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzQzgy
OThFMTNEOEQ5MjcwMERFMkRFQiAvKiBSZW5kZXJGbGV4aWJsZUJveC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTA4Q0NBNEYxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJGcmFnbWVu
dENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFOTNGNDUxNTE3QzU2NzAwOENDRjc0
IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcx
REVEMzBBMTUzMEM3MDBCMTJBNjggLyogUmVuZGVyRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRDMwODBGMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4NzFERUQxMEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJGcmFtZVNldC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yOTcyMyw4ICsyOTcyMyw2IEBACiAJCQkJQTQzQkY1OUQxMTQ5Mjky
ODAwQzY0M0NBIC8qIFJlbmRlclByb2dyZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNUI2NTg3
NDE4NkZERTRDMDA5QzI2RTggLyogUmVuZGVyUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QTU3
NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQkNFOTNGNDUxNTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxREZFMzBBMTUzNzZCMDBC
MTJBNjggLyogUmVuZGVyUmVwbGFjZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQTg0NkQ3MERD
NjdBMzUwMDI2QzMwOSAvKiBSZW5kZXJSZXBsaWNhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5
RkFFRTEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MDAwOSw2ICszMDAwNyw3IEBACiAJCQkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBl
T3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRG
NyAvKiBTaGFwZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAy
RDhDM0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk4MzRERkFEMDFGN0RB
RTVEMDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMz
MDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFNDg5NDRBMzE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTFFMDY3RUUxRTYyNDZFNTAwMTYyRDE2IC8qIFNpbXBsZUxpbmVMYXlvdXRD
b3ZlcmFnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzIyOCw3ICszMzIyNyw2IEBACiAJCQkJODlC
NUVBQTExMUU4MDAzRDAwRjIzNjdFIC8qIExpbmVFbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkZCNjk4Q0YxODM0MDJCQjAwMTU4QTMxIC8qIExpbmVJbmZvLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZGREJDMDQ4MTgzRDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lkdGguY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTdBRDJGODcwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtIYXNoLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUNCQTlEQzBBMURGNDRERjEwMDA1Njc1QyAvKiBMaW5rSGVhZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBNERBNDIxMUNERDNBODMwMEY0NDczQyAvKiBMaW5rSWNv
bkNvbGxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OENFNDMyNjEyOUUwMEJEMDA1ODIx
REMgLyogTGlua0xvYWRlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNjM1LDYgKzMzNjMzLDgg
QEAKIAkJCQkwNjZDNzczMDBBQjYwM0ZEMDAyMzhDQzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTNDODI5OEQxM0Q4RDkyNzAwREUyREVCIC8qIFJl
bmRlckZsZXhpYmxlQm94LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwOENDQTUwMTNDRjEwNkIw
MDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQ3MEFE
NjU3MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlCQ0U5M0Y0NzE1MTdDNkQ1MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRD
b250YWluZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MURFRDQwQTE1MzBDNzAwQjEy
QTY4IC8qIFJlbmRlckZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDMwODBFMTE3Q0Y3
RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3
MURFRDIwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZyYW1lU2V0LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMzM2ODMsOCArMzM2ODMsNiBAQAogCQkJCUJDRUE0ODdGMDk3RDkzMDIwMDk0QzlFNCAv
KiBSZW5kZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTQzQkY1OUMxMTQ5MjkyODAw
QzY0M0NBIC8qIFJlbmRlclByb2dyZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVBNTc0RjI0
MTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlE
NzBBRDY1NzEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQkNFOTNGNDcxNTE3QzZENTAwOENDRjc0IC8qIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFERkUyMEExNTM3NkIw
MEIxMkE2OCAvKiBSZW5kZXJSZXBsYWNlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0E4NDZE
NjBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDc5RkFFRDEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTMzOTE3LDYgKzMzOTE1LDcgQEAKIAkJCQkxQTRBOTU0RDBCNEVEQ0NCMDAyRDhDM0Mg
LyogU2hhcmVkQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkREOEUzMEQ5MUUyQjQw
MDBGODlFRSAvKiBTaGFyZWRCdWZmZXJDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTRBOTU1
MjBCNEVEQ0ZGMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyQ29jb2EubW0gaW4gU291cmNlcyAqLywK
KwkJCQk4MzRERkFDRjFGN0RBRTVEMDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNjNFODhGNzExOEEzOUQyMDBFRDkyMzEgLyogU2ltcGxlRm9udERh
dGFDb3JlVGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDg5NDRBMjE4MEI1N0Q4MDBGMTY1
RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxMUUwNjdFQzFF
NjI0NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDM1MDBhMDE4MTk5NTJh
NGNhNjAwODI2MTY1OWE2YWU5Njg4MjhhZjYuLjE5NjM2MjIzMjdjNDc1ZDNjMDRjODY2MDNiNjc1
YTUwZDVhOWJjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTY2LDcg
KzY2LDYgQEAKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCi0jaW5j
bHVkZSAiTGlua0hhc2guaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWF0aE1M
RWxlbWVudC5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCkBAIC04OSw2ICs4OCw3IEBACiAj
aW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFzaC5oIgogI2luY2x1
ZGUgIlN0eWxlQnVpbGRlci5oIgogI2luY2x1ZGUgIlN0eWxlQ29sb3IuaCIKICNpbmNsdWRlICJT
dHlsZUNhY2hlZEltYWdlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRl
ZExpbmtTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAK
aW5kZXggNTkyMGJkYWRjZGNlMGE0YmQ0M2IxNTQ4NzM4NmJkMzU0NDM0MTA2Ni4uYzM5OTNkNjUz
NWRhNWYzOTZkMmFiM2ZhZWVkNzhjY2EwYTJkM2FlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNp
dGVkTGlua1N0YXRlLmNwcApAQCAtNjYsMTYgKzY2LDE2IEBAIHZvaWQgVmlzaXRlZExpbmtTdGF0
ZTo6aW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKQogICAgIH0KIH0KIAotaW5saW5lIHN0YXRp
YyBMaW5rSGFzaCBsaW5rSGFzaEZvckVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBF
bGVtZW50JiBlbGVtZW50KQoraW5saW5lIHN0YXRpYyBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNo
Rm9yRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7
CiAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsK
ICAgICBpZiAoY29uc3QgQXRvbWljU3RyaW5nKiBhdHRyaWJ1dGUgPSBsaW5rQXR0cmlidXRlKGVs
ZW1lbnQpKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoKGRvY3VtZW50
LmJhc2VVUkwoKSwgKmF0dHJpYnV0ZSk7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpjb21wdXRl
U2hhcmVkU3RyaW5nSGFzaChkb2N1bWVudC5iYXNlVVJMKCksICphdHRyaWJ1dGUpOwogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckxp
bmsoTGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVT
dHlsZUZvckxpbmsoU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKICAgICBpZiAoIW1fbGlu
a3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmNvbnRhaW5zKGxpbmtIYXNoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtOTgsMTEgKzk4LDExIEBAIEVJbnNpZGVMaW5rIFZpc2l0ZWRMaW5rU3RhdGU6OmRl
dGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgaWYg
KGF0dHJpYnV0ZS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gSW5zaWRlVmlzaXRlZExpbms7
CiAKLSAgICBMaW5rSGFzaCBoYXNoOworICAgIFNoYXJlZFN0cmluZ0hhc2ggaGFzaDsKICAgICBp
ZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICBoYXNoID0gZG93bmNh
c3Q8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5rSGFzaCgpOwogICAgIGVs
c2UKLSAgICAgICAgaGFzaCA9IFdlYkNvcmU6OnZpc2l0ZWRMaW5rSGFzaChlbGVtZW50LmRvY3Vt
ZW50KCkuYmFzZVVSTCgpLCAqYXR0cmlidXRlKTsKKyAgICAgICAgaGFzaCA9IFdlYkNvcmU6OmNv
bXB1dGVTaGFyZWRTdHJpbmdIYXNoKGVsZW1lbnQuZG9jdW1lbnQoKS5iYXNlVVJMKCksICphdHRy
aWJ1dGUpOwogCiAgICAgaWYgKCFoYXNoKQogICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVk
TGluazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5oCmluZGV4IDJhMTQyYWQ4NjZh
NDVkOTYxOTczMzFjMDVjMjkyYTYwYTgzOWNjZjguLmNjOWU1ZWM0N2E2NjZlNTgxM2JiNWYwYmY3
M2ZmZjcyOGM3YWZkOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlu
a1N0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaApAQCAt
MjksOCArMjksOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5j
bHVkZSAiTGlua0hhc2guaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgorI2lu
Y2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MywxNCArNDMsMTQgQEAgcHVibGljOgogICAgIGV4cGxp
Y2l0IFZpc2l0ZWRMaW5rU3RhdGUoRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZVN0
eWxlRm9yQWxsTGlua3MoKTsKLSAgICB2b2lkIGludmFsaWRhdGVTdHlsZUZvckxpbmsoTGlua0hh
c2gpOworICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlRm9yTGluayhTaGFyZWRTdHJpbmdIYXNoKTsK
ICAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoY29uc3QgRWxlbWVudCYpOwogCiBw
cml2YXRlOgogICAgIEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKGNvbnN0
IEVsZW1lbnQmKTsKIAogICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwotICAgIEhhc2hTZXQ8TGlu
a0hhc2gsIExpbmtIYXNoSGFzaD4gbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGU7CisgICAg
SGFzaFNldDxTaGFyZWRTdHJpbmdIYXNoLCBTaGFyZWRTdHJpbmdIYXNoSGFzaD4gbV9saW5rc0No
ZWNrZWRGb3JWaXNpdGVkU3RhdGU7CiB9OwogCiBpbmxpbmUgRUluc2lkZUxpbmsgVmlzaXRlZExp
bmtTdGF0ZTo6ZGV0ZXJtaW5lTGlua1N0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgKaW5kZXggYTdiYzYwOTllMTI1OTFlNTJh
NzBjMWI1Y2NjZGIzYmQ3MDA4NTRmNS4uZTRlNGEzZGNkYzVhNmE5MWY4NWY0OTU3MjZjZGZhNTE3
NDg3Mzg0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaApAQCAtMjUs
NyArMjUsNyBAQAogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKLSNpbmNsdWRlICJMaW5rSGFzaC5oIgorI2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2gu
aCIKICNpbmNsdWRlICJVUkxVdGlscy5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApA
QCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1JlbChSZWxhdGlvbikgY29u
c3Q7CiAgICAgCi0gICAgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKCkgY29uc3Q7CisgICAgU2hh
cmVkU3RyaW5nSGFzaCB2aXNpdGVkTGlua0hhc2goKSBjb25zdDsKICAgICB2b2lkIGludmFsaWRh
dGVDYWNoZWRWaXNpdGVkTGlua0hhc2goKSB7IG1fY2FjaGVkVmlzaXRlZExpbmtIYXNoID0gMDsg
fQogCiAgICAgV0VCQ09SRV9FWFBPUlQgRE9NVG9rZW5MaXN0JiByZWxMaXN0KCk7CkBAIC0xMDQs
MTUgKzEwNCwxNSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNSb290RWRpdGFibGVFbGVtZW50
Rm9yU2VsZWN0aW9uT25Nb3VzZURvd247CiAgICAgYm9vbCBtX3dhc1NoaWZ0S2V5RG93bk9uTW91
c2VEb3duOwogICAgIE9wdGlvblNldDxSZWxhdGlvbj4gbV9saW5rUmVsYXRpb25zOwotICAgIG11
dGFibGUgTGlua0hhc2ggbV9jYWNoZWRWaXNpdGVkTGlua0hhc2g7CisgICAgbXV0YWJsZSBTaGFy
ZWRTdHJpbmdIYXNoIG1fY2FjaGVkVmlzaXRlZExpbmtIYXNoOwogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPERPTVRva2VuTGlzdD4gbV9yZWxMaXN0OwogfTsKIAotaW5saW5lIExpbmtIYXNoIEhUTUxB
bmNob3JFbGVtZW50Ojp2aXNpdGVkTGlua0hhc2goKSBjb25zdAoraW5saW5lIFNoYXJlZFN0cmlu
Z0hhc2ggSFRNTEFuY2hvckVsZW1lbnQ6OnZpc2l0ZWRMaW5rSGFzaCgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX2NhY2hlZFZpc2l0ZWRMaW5rSGFzaCkKLSAgICAgICAgbV9jYWNoZWRWaXNpdGVkTGlu
a0hhc2ggPSBXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2goZG9jdW1lbnQoKS5iYXNlVVJMKCksIGF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpocmVmQXR0cikpOworICAg
ICAgICBtX2NhY2hlZFZpc2l0ZWRMaW5rSGFzaCA9IFdlYkNvcmU6OmNvbXB1dGVTaGFyZWRTdHJp
bmdIYXNoKGRvY3VtZW50KCkuYmFzZVVSTCgpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKEhUTUxOYW1lczo6aHJlZkF0dHIpKTsKICAgICByZXR1cm4gbV9jYWNoZWRWaXNpdGVkTGlu
a0hhc2g7IAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCmluZGV4IDFi
OTk4OWM0NjA2NTY2OGExMWRjNzZlYzQxMWQ4ZmZhNTc5NWVjMTIuLjEzMTgzMzBkMjVkNGQ2NzMw
ZGFjMDQ1OGZlNDEyYWQ1NWE4ZWYwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVu
dHMuY3BwCkBAIC01NjcsOCArNTY3LDggQEAgY2xhc3MgRW1wdHlVc2VyQ29udGVudFByb3ZpZGVy
IGZpbmFsIDogcHVibGljIFVzZXJDb250ZW50UHJvdmlkZXIgewogfTsKIAogY2xhc3MgRW1wdHlW
aXNpdGVkTGlua1N0b3JlIGZpbmFsIDogcHVibGljIFZpc2l0ZWRMaW5rU3RvcmUgewotICAgIGJv
b2wgaXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hhc2gsIGNvbnN0IFVSTCYsIGNvbnN0IEF0b21p
Y1N0cmluZyYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGlu
ayhQYWdlJiwgTGlua0hhc2gpIGZpbmFsIHsgfQorICAgIGJvb2wgaXNMaW5rVmlzaXRlZChQYWdl
JiwgU2hhcmVkU3RyaW5nSGFzaCwgY29uc3QgVVJMJiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmlu
YWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rKFBhZ2UmLCBTaGFy
ZWRTdHJpbmdIYXNoKSBmaW5hbCB7IH0KIH07CiAKIFJlZlB0cjxQb3B1cE1lbnU+IEVtcHR5Q2hy
b21lQ2xpZW50OjpjcmVhdGVQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50JikgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCmluZGV4IDAzYzY1M2I0ZDY2
ZjA4MTA5YjcxZWMzZmViZTNhMTViY2Q1MmQ2YjIuLjJiYWM4YTgyOGQwYzMzZGNkZDQ0ZTBjMWJj
MmRmYTQyOTFiODZiY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9s
bGVyLmNwcApAQCAtNDEsMTMgKzQxLDEzIEBACiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKLSNpbmNsdWRlICJM
aW5rSGFzaC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIK
KyNpbmNsdWRlICJTaGFyZWRTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdG9y
ZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNTUsNyArNTUsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRWaXNpdGVkTGluayhQ
YWdlJiBwYWdlLCBjb25zdCBVUkwmIHVybCkKIHsKLSAgICBwYWdlLnZpc2l0ZWRMaW5rU3RvcmUo
KS5hZGRWaXNpdGVkTGluayhwYWdlLCB2aXNpdGVkTGlua0hhc2godXJsLnN0cmluZygpKSk7Cisg
ICAgcGFnZS52aXNpdGVkTGlua1N0b3JlKCkuYWRkVmlzaXRlZExpbmsocGFnZSwgY29tcHV0ZVNo
YXJlZFN0cmluZ0hhc2godXJsLnN0cmluZygpKSk7CiB9CiAKIEhpc3RvcnlDb250cm9sbGVyOjpI
aXN0b3J5Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA5MTgy
YmM5YTQ5OGFmZmI4N2QyOTA3MmJjYWI1ZmQ4YTM3NGRkMzVkLi5kYmUyODUxY2M2NjE5ODA0Mjk0
YjNkN2RlNWM2ZDgwNGI2ZDcyZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEyMDEsNyArMTIw
MSw3IEBAIHZvaWQgUGFnZTo6aW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKCkKICAgICB9CiB9
CiAKLXZvaWQgUGFnZTo6aW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsoTGlua0hhc2ggbGlua0hhc2gp
Cit2b2lkIFBhZ2U6OmludmFsaWRhdGVTdHlsZXNGb3JMaW5rKFNoYXJlZFN0cmluZ0hhc2ggbGlu
a0hhc2gpCiB7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9tYWluRnJhbWUuZ2V0KCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgaWYg
KCFmcmFtZS0+ZG9jdW1lbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggMjRmNTBkYmE3NGJmNTRiYWU4
ZGM1ODhlYjM5ZmEwOWZlYzNlNTA2ZC4uMDIzYTJiMGJmNzk5YWU0NDQyMTlhZjIyMTZjNjA3OGE4
NmQ2ZmUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTEzMSw3ICsxMzEsNyBAQCBjbGFzcyBBY3Rpdml0
eVN0YXRlQ2hhbmdlT2JzZXJ2ZXI7CiBjbGFzcyBWaXNpdGVkTGlua1N0b3JlOwogY2xhc3MgV2Vi
R0xTdGF0ZVRyYWNrZXI7CiAKLXR5cGVkZWYgdWludDY0X3QgTGlua0hhc2g7Cit0eXBlZGVmIHVp
bnQ2NF90IFNoYXJlZFN0cmluZ0hhc2g7CiAKIGVudW0gRmluZERpcmVjdGlvbiB7CiAgICAgRmlu
ZERpcmVjdGlvbkZvcndhcmQsCkBAIC0zOTgsNyArMzk4LDcgQEAgcHVibGljOgogICAgIEpTQzo6
RGVidWdnZXIqIGRlYnVnZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlcjsgfQogCiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlua3MoKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGVTdHlsZXNGb3JMaW5rKExpbmtIYXNoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGVTdHlsZXNGb3JMaW5rKFNoYXJlZFN0cmlu
Z0hhc2gpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFs
bEZyYW1lcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Zpc2l0ZWRMaW5r
U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcAppbmRl
eCA5NzNiNzhlZTYzOGY3M2JhMTI1NDQzZTAwNTBhOWEwNTllYjc3ODljLi5kN2E1OGI1ZWYyYzZl
ZWI1ZDdkOGE4MjNkNTBiZjk4OTQ5ZmE0NTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzaXRl
ZExpbmtTdG9yZS5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpp
bnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlua3MoKQogICAgICAgICBwYWdlLT5pbnZhbGlkYXRlU3R5
bGVzRm9yQWxsTGlua3MoKTsKIH0KIAotdm9pZCBWaXNpdGVkTGlua1N0b3JlOjppbnZhbGlkYXRl
U3R5bGVzRm9yTGluayhMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQgVmlzaXRlZExpbmtTdG9yZTo6
aW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsoU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKICAg
ICBmb3IgKGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKQogICAgICAgICBwYWdlLT5pbnZhbGlkYXRlU3R5
bGVzRm9yTGluayhsaW5rSGFzaCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Zp
c2l0ZWRMaW5rU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzaXRlZExpbmtTdG9yZS5o
CmluZGV4IDQ0MTMwNmE0NzRiZGMwYTNiZGUwNGU3Y2ZjZGY0NGM0NWE3OGY2MjkuLjQzYzM1MTM3
MmQ2MThiNjgxMDliMGZiOGNjZDY5ZmM4NWY4YmRkNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvVmlzaXRlZExpbmtTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlz
aXRlZExpbmtTdG9yZS5oCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdHlwZWRlZiB1aW50NjRfdCBMaW5rSGFzaDsKK3R5cGVkZWYgdWludDY0X3QgU2hhcmVkU3Ry
aW5nSGFzaDsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBVUkw7CiAKQEAgLTQxLDE0ICs0MSwxNCBAQCBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+VmlzaXRlZExpbmtTdG9yZSgpOwog
CiAgICAgLy8gRklYTUU6IFRoZXNlIHR3byBtZW1iZXJzIHNob3VsZCBvbmx5IHRha2UgdGhlIGxp
bmsgaGFzaC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hhc2gs
IGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkVmlzaXRlZExpbmsoUGFnZSYsIExpbmtIYXNoKSA9IDA7
CisgICAgdmlydHVhbCBib29sIGlzTGlua1Zpc2l0ZWQoUGFnZSYsIFNoYXJlZFN0cmluZ0hhc2gs
IGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkVmlzaXRlZExpbmsoUGFnZSYsIFNoYXJlZFN0cmluZ0hh
c2gpID0gMDsKIAogICAgIHZvaWQgYWRkUGFnZShQYWdlJik7CiAgICAgdm9pZCByZW1vdmVQYWdl
KFBhZ2UmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZVN0eWxlc0ZvckFs
bExpbmtzKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVzRm9yTGlu
ayhMaW5rSGFzaCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVzRm9y
TGluayhTaGFyZWRTdHJpbmdIYXNoKTsKIAogcHJpdmF0ZToKICAgICBIYXNoU2V0PFBhZ2UqPiBt
X3BhZ2VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjODMzZTRiODkxZjNhNzVhNzNlOWI0YzAwMmVlMmQ3NWZjMDRkOWQxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xpbmtIYXNoLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0g
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0g
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiAg
ICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkwuaCIK
LSNpbmNsdWRlICJMaW5rSGFzaC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdWaWV3Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIHNpemVfdCBmaW5kU2xhc2hEb3REb3RTbGFz
aChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3Qg
cG9zaXRpb24pCi17Ci0gICAgaWYgKGxlbmd0aCA8IDQpCi0gICAgICAgIHJldHVybiBub3RGb3Vu
ZDsKLSAgICBzaXplX3QgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMzsKLSAgICBmb3IgKHNpemVfdCBp
ID0gcG9zaXRpb247IGkgPCBsb29wTGltaXQ7ICsraSkgewotICAgICAgICBpZiAoY2hhcmFjdGVy
c1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSAr
IDJdID09ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAzXSA9PSAnLycpCi0gICAgICAgICAgICByZXR1
cm4gaTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vdEZvdW5kOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpbmRTbGFzaFNsYXNoKGNv
bnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBwb3Np
dGlvbikKLXsKLSAgICBpZiAobGVuZ3RoIDwgMikKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwot
ICAgIHNpemVfdCBsb29wTGltaXQgPSBsZW5ndGggLSAxOwotICAgIGZvciAoc2l6ZV90IGkgPSBw
b3NpdGlvbjsgaSA8IGxvb3BMaW1pdDsgKytpKSB7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2ld
ID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAxXSA9PSAnLycpCi0gICAgICAgICAgICByZXR1cm4g
aTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vdEZvdW5kOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpbmRTbGFzaERvdFNsYXNoKGNv
bnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBwb3Np
dGlvbikKLXsKLSAgICBpZiAobGVuZ3RoIDwgMykKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwot
ICAgIHNpemVfdCBsb29wTGltaXQgPSBsZW5ndGggLSAyOwotICAgIGZvciAoc2l6ZV90IGkgPSBw
b3NpdGlvbjsgaSA8IGxvb3BMaW1pdDsgKytpKSB7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2ld
ID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAxXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgMl0g
PT0gJy8nKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiBub3RGb3Vu
ZDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5l
IGJvb2wgY29udGFpbnNDb2xvblNsYXNoU2xhc2goY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGlmIChsZW5ndGggPCAzKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMjsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKLSAgICAgICAgaWYgKGNo
YXJhY3RlcnNbaV0gPT0gJzonICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcvJyAmJiBjaGFyYWN0
ZXJzW2kgKyAyXSA9PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0
YXRpYyBpbmxpbmUgdm9pZCBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMoVmVjdG9yPENoYXJhY3Rl
clR5cGUsIDUxMj4mIHN0cmluZykKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0cmluZy5zaXplKCk7
Ci0gICAgc2l6ZV90IGkgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFzdHJpbmdbaV0pCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYg
KGkgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHNpemVfdCBqID0gaTsKLSAgICBmb3Ig
KCsraTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0
ZXIgPSBzdHJpbmdbaV0pCi0gICAgICAgICAgICBzdHJpbmdbaisrXSA9IGNoYXJhY3RlcjsKLSAg
ICB9Ci0gICAgQVNTRVJUKGogPCBzaXplKTsKLSAgICBzdHJpbmcuc2hyaW5rKGopOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyB2b2lkIGNsZWFuU2xhc2hE
b3REb3RTbGFzaGVzKFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCA1MTI+JiBwYXRoLCBzaXplX3QgZmly
c3RTbGFzaCkKLXsKLSAgICBzaXplX3Qgc2xhc2ggPSBmaXJzdFNsYXNoOwotICAgIGRvIHsKLSAg
ICAgICAgc2l6ZV90IHByZXZpb3VzU2xhc2ggPSBzbGFzaCA/IHJldmVyc2VGaW5kKHBhdGguZGF0
YSgpLCBwYXRoLnNpemUoKSwgJy8nLCBzbGFzaCAtIDEpIDogbm90Rm91bmQ7Ci0gICAgICAgIC8v
IERvbid0IHJlbW92ZSB0aGUgaG9zdCwgaS5lLiBodHRwOi8vZm9vLm9yZy8uLi9mb28uaHRtbAot
ICAgICAgICBpZiAocHJldmlvdXNTbGFzaCA9PSBub3RGb3VuZCB8fCAocHJldmlvdXNTbGFzaCA+
IDMgJiYgcGF0aFtwcmV2aW91c1NsYXNoIC0gMl0gPT0gJzonICYmIHBhdGhbcHJldmlvdXNTbGFz
aCAtIDFdID09ICcvJykpIHsKLSAgICAgICAgICAgIHBhdGhbc2xhc2hdID0gMDsKLSAgICAgICAg
ICAgIHBhdGhbc2xhc2ggKyAxXSA9IDA7Ci0gICAgICAgICAgICBwYXRoW3NsYXNoICsgMl0gPSAw
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHByZXZpb3Vz
U2xhc2g7IGkgPCBzbGFzaCArIDM7ICsraSkKLSAgICAgICAgICAgICAgICBwYXRoW2ldID0gMDsK
LSAgICAgICAgfQotICAgICAgICBzbGFzaCArPSAzOwotICAgIH0gd2hpbGUgKChzbGFzaCA9IGZp
bmRTbGFzaERvdERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgc2xhc2gpKSAhPSBu
b3RGb3VuZCk7Ci0gICAgc3F1ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKHBhdGgpOwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyB2b2lkIG1lcmdlRG91YmxlU2xh
c2hlcyhWZWN0b3I8Q2hhcmFjdGVyVHlwZSwgNTEyPiYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gp
Ci17Ci0gICAgc2l6ZV90IHJlZlBvcyA9IGZpbmQocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAn
IycpOwotICAgIGlmICghcmVmUG9zIHx8IHJlZlBvcyA9PSBub3RGb3VuZCkKLSAgICAgICAgcmVm
UG9zID0gcGF0aC5zaXplKCk7Ci0KLSAgICBzaXplX3Qgc2xhc2ggPSBmaXJzdFNsYXNoOwotICAg
IHdoaWxlIChzbGFzaCA8IHJlZlBvcykgewotICAgICAgICBpZiAoIXNsYXNoIHx8IHBhdGhbc2xh
c2ggLSAxXSAhPSAnOicpCi0gICAgICAgICAgICBwYXRoW3NsYXNoKytdID0gMDsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc2xhc2ggKz0gMjsKLSAgICAgICAgaWYgKChzbGFzaCA9IGZpbmRT
bGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgc2xhc2gpKSA9PSBub3RGb3VuZCkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMo
cGF0aCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIHZv
aWQgY2xlYW5TbGFzaERvdFNsYXNoZXMoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIHBhdGgs
IHNpemVfdCBmaXJzdFNsYXNoKQotewotICAgIHNpemVfdCBzbGFzaCA9IGZpcnN0U2xhc2g7Ci0g
ICAgZG8gewotICAgICAgICBwYXRoW3NsYXNoXSA9IDA7Ci0gICAgICAgIHBhdGhbc2xhc2ggKyAx
XSA9IDA7Ci0gICAgICAgIHNsYXNoICs9IDI7Ci0gICAgfSB3aGlsZSAoKHNsYXNoID0gZmluZFNs
YXNoRG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCBzbGFzaCkpICE9IG5vdEZvdW5k
KTsKLSAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSB2b2lkIGNsZWFuUGF0aChWZWN0
b3I8Q2hhcmFjdGVyVHlwZSwgNTEyPiYgcGF0aCkKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIG5v
dCBkbyB0aGlzIGluIHRoZSBxdWVyeSBvciBhbmNob3IgcGFydCBvZiB0aGUgVVJMLgotICAgIHNp
emVfdCBmaXJzdFNsYXNoID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGgu
c2l6ZSgpLCAwKTsKLSAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKLSAgICAgICAgY2xl
YW5TbGFzaERvdERvdFNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7Ci0KLSAgICAvLyBGSVhNRTog
U2hvdWxkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVyeSBwYXJ0LgotICAgIGZpcnN0U2xhc2ggPSBm
aW5kU2xhc2hTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIDApOwotICAgIGlmIChmaXJz
dFNsYXNoICE9IG5vdEZvdW5kKQotICAgICAgICBtZXJnZURvdWJsZVNsYXNoZXMocGF0aCwgZmly
c3RTbGFzaCk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVy
eSBvciBhbmNob3IgcGFydC4KLSAgICBmaXJzdFNsYXNoID0gZmluZFNsYXNoRG90U2xhc2gocGF0
aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAwKTsKLSAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3Vu
ZCkKLSAgICAgICAgY2xlYW5TbGFzaERvdFNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIG1h
dGNoTGV0dGVyKENoYXJhY3RlclR5cGUgYywgY2hhciBsb3dlcmNhc2VMZXR0ZXIpCi17Ci0gICAg
cmV0dXJuIChjIHwgMHgyMCkgPT0gbG93ZXJjYXNlTGV0dGVyOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkc1RyYWlsaW5nU2xh
c2goY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIGlmIChsZW5ndGggPCA2KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtYXRj
aExldHRlcihjaGFyYWN0ZXJzWzBdLCAnaCcpCi0gICAgICAgICAgICB8fCAhbWF0Y2hMZXR0ZXIo
Y2hhcmFjdGVyc1sxXSwgJ3QnKQotICAgICAgICAgICAgfHwgIW1hdGNoTGV0dGVyKGNoYXJhY3Rl
cnNbMl0sICd0JykKLSAgICAgICAgICAgIHx8ICFtYXRjaExldHRlcihjaGFyYWN0ZXJzWzNdLCAn
cCcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCEoY2hhcmFjdGVyc1s0XSA9PSAn
OicKLSAgICAgICAgICAgIHx8IChtYXRjaExldHRlcihjaGFyYWN0ZXJzWzRdLCAncycpICYmIGNo
YXJhY3RlcnNbNV0gPT0gJzonKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2ln
bmVkIHBvcyA9IGNoYXJhY3RlcnNbNF0gPT0gJzonID8gNSA6IDY7Ci0KLSAgICAvLyBTa2lwIGlu
aXRpYWwgdHdvIHNsYXNoZXMgaWYgcHJlc2VudC4KLSAgICBpZiAocG9zICsgMSA8IGxlbmd0aCAm
JiBjaGFyYWN0ZXJzW3Bvc10gPT0gJy8nICYmIGNoYXJhY3RlcnNbcG9zICsgMV0gPT0gJy8nKQot
ICAgICAgICBwb3MgKz0gMjsKLQotICAgIC8vIEZpbmQgbmV4dCBzbGFzaC4KLSAgICB3aGlsZSAo
cG9zIDwgbGVuZ3RoICYmIGNoYXJhY3RlcnNbcG9zXSAhPSAnLycpCi0gICAgICAgICsrcG9zOwot
Ci0gICAgcmV0dXJuIHBvcyA9PSBsZW5ndGg7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIEFMV0FZU19JTkxJTkUgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNo
SW5saW5lKGNvbnN0IENoYXJhY3RlclR5cGUqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBBbHJlYWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZShTdHJpbmdIYXNoZXI6OmNv
bXB1dGVIYXNoKHVybCwgbGVuZ3RoKSk7Ci19Ci0KLUxpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChj
b25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB1cmwubGVuZ3RoKCk7
Ci0gICAgaWYgKCFsZW5ndGggfHwgdXJsLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gdmlzaXRl
ZExpbmtIYXNoSW5saW5lKHVybC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOwotICAgIHJldHVybiB2
aXNpdGVkTGlua0hhc2hJbmxpbmUodXJsLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwotfQotCi1M
aW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIHJldHVybiB2aXNpdGVkTGlua0hhc2hJbmxpbmUodXJsLCBsZW5ndGgpOwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgdmlzaXRlZFVSTElubGluZShjb25zdCBVUkwmIGJhc2UsIGNvbnN0IENoYXJhY3RlclR5
cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVmVjdG9yPENoYXJhY3RlclR5cGUsIDUx
Mj4mIGJ1ZmZlcikKLXsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gVGhpcyBpcyBhIHBvb3IgbWFuJ3MgY29tcGxldGVVUkwuIEZhc3RlciB3aXRoIGxlc3MgbWVt
b3J5IGFsbG9jYXRpb24uCi0gICAgLy8gRklYTUU6IEl0J3MgbWlzc2luZyBhIGxvdCBvZiB3aGF0
IGNvbXBsZXRlVVJMIGRvZXMgYW5kIGEgbG90IG9mIHdoYXQgVVJMIGRvZXMuCi0gICAgLy8gRm9y
IGV4YW1wbGUsIGl0IGRvZXMgbm90IGhhbmRsZSBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcyBw
cm9wZXJseS4KLQotICAgIC8vIEZJWE1FOiBJdCBpcyB3cm9uZyB0aGF0IHdlIGRvIG5vdCBkbyBm
dXJ0aGVyIHByb2Nlc3Npbmcgb24gc3RyaW5ncyB0aGF0IGhhdmUgIjovLyIgaW4gdGhlbToKLSAg
ICAvLyAgICAxKSBUaGUgIjovLyIgY291bGQgYmUgaW4gdGhlIHF1ZXJ5IG9yIGFuY2hvci4KLSAg
ICAvLyAgICAyKSBUaGUgVVJMJ3MgcGF0aCBjb3VsZCBoYXZlIGEgIi8uLyIgb3IgYSAiLy4uLyIg
b3IgYSAiLy8iIHNlcXVlbmNlIGluIGl0LgotCi0gICAgLy8gRklYTUU6IG5lZWRzVHJhaWxpbmdT
bGFzaCBkb2VzIG5vdCBwcm9wZXJseSByZXR1cm4gdHJ1ZSBmb3IgYSBVUkwgdGhhdCBoYXMgbm8g
cGF0aCwgYnV0IGRvZXMKLSAgICAvLyBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yLgotCi0gICAgYm9v
bCBoYXNDb2xvblNsYXNoU2xhc2ggPSBjb250YWluc0NvbG9uU2xhc2hTbGFzaChjaGFyYWN0ZXJz
LCBsZW5ndGgpOwotCi0gICAgaWYgKGhhc0NvbG9uU2xhc2hTbGFzaCAmJiAhbmVlZHNUcmFpbGlu
Z1NsYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChjaGFy
YWN0ZXJzLCBsZW5ndGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0KLSAgICBpZiAoaGFz
Q29sb25TbGFzaFNsYXNoKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluY29ycmVjdCBm
b3IgVVJMcyB0aGF0IGhhdmUgYSBxdWVyeSBvciBhbmNob3I7IHRoZSAiLyIgbmVlZHMgdG8gZ28g
YXQgdGhlCi0gICAgICAgIC8vIGVuZCBvZiB0aGUgcGF0aCwgKmJlZm9yZSogdGhlIHF1ZXJ5IG9y
IGFuY2hvci4KLSAgICAgICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotICAg
ICAgICBidWZmZXIuYXBwZW5kKCcvJyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgYXBwZW5kKGJ1ZmZlciwgYmFzZS5zdHJpbmcoKSk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAoY2hhcmFjdGVyc1swXSkgewotICAgICAgICAgICAgY2Fz
ZSAnLyc6Ci0gICAgICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgU3RyaW5nVmlldyhiYXNlLnN0
cmluZygpKS5zdWJzdHJpbmcoMCwgYmFzZS5wYXRoU3RhcnQoKSkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnIyc6Ci0gICAgICAgICAgICAgICAgYXBwZW5kKGJ1
ZmZlciwgU3RyaW5nVmlldyhiYXNlLnN0cmluZygpKS5zdWJzdHJpbmcoMCwgYmFzZS5wYXRoRW5k
KCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgU3RyaW5nVmlldyhiYXNlLnN0cmluZygpKS5zdWJz
dHJpbmcoMCwgYmFzZS5wYXRoQWZ0ZXJMYXN0U2xhc2goKSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVycywgbGVu
Z3RoKTsKLSAgICBjbGVhblBhdGgoYnVmZmVyKTsKLSAgICBpZiAobmVlZHNUcmFpbGluZ1NsYXNo
KGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGluY29ycmVjdCBmb3IgVVJMcyB0aGF0IGhhdmUgYSBxdWVyeSBvciBhbmNob3I7IHRoZSAi
LyIgbmVlZHMgdG8gZ28gYXQgdGhlCi0gICAgICAgIC8vIGVuZCBvZiB0aGUgcGF0aCwgKmJlZm9y
ZSogdGhlIHF1ZXJ5IG9yIGFuY2hvci4KLSAgICAgICAgYnVmZmVyLmFwcGVuZCgnLycpOwotICAg
IH0KLQotICAgIHJldHVybjsKLX0KLQotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVS
TCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCi17Ci0gICAgaWYgKGF0
dHJpYnV0ZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFiYXNl
LnN0cmluZygpLmlzRW1wdHkoKSAmJiBiYXNlLnN0cmluZygpLmlzOEJpdCgpICYmIGF0dHJpYnV0
ZVVSTC5pczhCaXQoKSkgewotICAgICAgICBWZWN0b3I8TENoYXIsIDUxMj4gdXJsOwotICAgICAg
ICB2aXNpdGVkVVJMSW5saW5lKGJhc2UsIGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzOCgpLCBhdHRy
aWJ1dGVVUkwubGVuZ3RoKCksIHVybCk7Ci0gICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgcmV0dXJuIHZpc2l0ZWRMaW5rSGFzaElubGlu
ZSh1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8VUNoYXIsIDUx
Mj4gdXJsOwotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhhdHRy
aWJ1dGVVUkwuc3RyaW5nKCkpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIHZpc2l0ZWRVUkxJ
bmxpbmUoYmFzZSwgY2hhcmFjdGVycywgYXR0cmlidXRlVVJMLmxlbmd0aCgpLCB1cmwpOwotICAg
IGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiB2aXNp
dGVkTGlua0hhc2hJbmxpbmUodXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7Ci19Ci0KLX0gIC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5r
SGFzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMTY1OTk1ZmUzZjE1YzFiMzBiNDNhYmE3ZWM5MGY1NWJjYzViOWE3
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBMaW5rSGFzaF9oCi0jZGVmaW5lIExpbmtIYXNoX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFVSTDsKLQotdHlwZWRlZiB1aW50NjRfdCBMaW5rSGFzaDsKLQotLy8gVXNl
IHRoZSBsb3cgMzItYml0cyBvZiB0aGUgNjQtYml0IExpbmtIYXNoIGFzIHRoZSBrZXkgZm9yIEhh
c2hTZXRzLgotc3RydWN0IExpbmtIYXNoSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
TGlua0hhc2gga2V5KSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KTsgfQotICAg
IHN0YXRpYyBib29sIGVxdWFsKExpbmtIYXNoIGEsIExpbmtIYXNoIGIpIHsgcmV0dXJuIGEgPT0g
YjsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVk
ID0gdHJ1ZTsKLQotICAgIC8vIFNlZSBBbHJlYWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZS4K
LSAgICBzdGF0aWMgdW5zaWduZWQgYXZvaWREZWxldGVkVmFsdWUoTGlua0hhc2ggaGFzaDY0KQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc2g2NCk7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaGFzaDY0KTsKLSAgICAgICAgdW5zaWduZWQgbmV3SGFzaCA9
IGhhc2ggfCAoIShoYXNoICsgMSkgPDwgMzEpOwotICAgICAgICBBU1NFUlQobmV3SGFzaCk7Ci0g
ICAgICAgIEFTU0VSVChuZXdIYXNoICE9IDB4RkZGRkZGRkYpOwotICAgICAgICByZXR1cm4gbmV3
SGFzaDsKLSAgICB9Ci19OwotCi0vLyBSZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBzdHJpbmcgdGhh
dCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQgbGluayBjb2xvcmluZy4KLVdFQkNPUkVfRVhQT1JU
IExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBTdHJpbmcmIHVybCk7Ci1XRUJDT1JFX0VY
UE9SVCBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQg
bGVuZ3RoKTsKLQotLy8gUmVzb2x2ZXMgdGhlIHBvdGVudGlhbGx5IHJlbGF0aXZlIFVSTCAiYXR0
cmlidXRlVVJMIiByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4KLS8vIGJhc2UgVVJMLCBhbmQgcmV0dXJu
cyB0aGUgaGFzaCBvZiB0aGUgc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB2aXNpdGVkCi0v
LyBsaW5rIGNvbG9yaW5nLiBJdCB3aWxsIHJldHVybiB0aGUgc3BlY2lhbCB2YWx1ZSBvZiAwIGlm
IGF0dHJpYnV0ZVVSTCBkb2VzIG5vdAotLy8gbG9vayBsaWtlIGEgcmVsYXRpdmUgVVJMLgotTGlu
a0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBhdHRyaWJ1dGVVUkwpOwotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgIC8v
IExpbmtIYXNoX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZFN0
cmluZ0hhc2guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTE5MGMwZGY3ZTA4NjExM2ViNGIxZjMxODJkMWYwMDczODBlZGEyMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZFN0cmluZ0hh
c2guY3BwCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5
YWtvdiAoYXBAd2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTaGFyZWRTdHJpbmdIYXNoLmgiCisKKyNpbmNsdWRlICJVUkwuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGlj
IGlubGluZSBzaXplX3QgZmluZFNsYXNoRG90RG90U2xhc2goY29uc3QgQ2hhcmFjdGVyVHlwZSog
Y2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IHBvc2l0aW9uKQoreworICAgIGlmIChs
ZW5ndGggPCA0KQorICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgc2l6ZV90IGxvb3BMaW1p
dCA9IGxlbmd0aCAtIDM7CisgICAgZm9yIChzaXplX3QgaSA9IHBvc2l0aW9uOyBpIDwgbG9vcExp
bWl0OyArK2kpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3Rl
cnNbaSArIDFdID09ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLicgJiYgY2hhcmFjdGVy
c1tpICsgM10gPT0gJy8nKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVy
biBub3RGb3VuZDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0
aWMgaW5saW5lIHNpemVfdCBmaW5kU2xhc2hTbGFzaChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFy
YWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgcG9zaXRpb24pCit7CisgICAgaWYgKGxlbmd0
aCA8IDIpCisgICAgICAgIHJldHVybiBub3RGb3VuZDsKKyAgICBzaXplX3QgbG9vcExpbWl0ID0g
bGVuZ3RoIC0gMTsKKyAgICBmb3IgKHNpemVfdCBpID0gcG9zaXRpb247IGkgPCBsb29wTGltaXQ7
ICsraSkgeworICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tp
ICsgMV0gPT0gJy8nKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiBu
b3RGb3VuZDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMg
aW5saW5lIHNpemVfdCBmaW5kU2xhc2hEb3RTbGFzaChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFy
YWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgcG9zaXRpb24pCit7CisgICAgaWYgKGxlbmd0
aCA8IDMpCisgICAgICAgIHJldHVybiBub3RGb3VuZDsKKyAgICBzaXplX3QgbG9vcExpbWl0ID0g
bGVuZ3RoIC0gMjsKKyAgICBmb3IgKHNpemVfdCBpID0gcG9zaXRpb247IGkgPCBsb29wTGltaXQ7
ICsraSkgeworICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tp
ICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgIH0KKyAgICByZXR1cm4gbm90Rm91bmQ7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zQ29sb25TbGFz
aFNsYXNoKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
K3sKKyAgICBpZiAobGVuZ3RoIDwgMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2ln
bmVkIGxvb3BMaW1pdCA9IGxlbmd0aCAtIDI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxvb3BMaW1pdDsgKytpKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICc6JyAmJiBj
aGFyYWN0ZXJzW2kgKyAxXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy8nKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIHZvaWQgc3F1ZWV6
ZU91dE51bGxDaGFyYWN0ZXJzKFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCA1MTI+JiBzdHJpbmcpCit7
CisgICAgc2l6ZV90IHNpemUgPSBzdHJpbmcuc2l6ZSgpOworICAgIHNpemVfdCBpID0gMDsKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmICghc3RyaW5nW2ldKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChpID09IHNpemUpCisgICAgICAgIHJl
dHVybjsKKyAgICBzaXplX3QgaiA9IGk7CisgICAgZm9yICgrK2k7IGkgPCBzaXplOyArK2kpIHsK
KyAgICAgICAgaWYgKENoYXJhY3RlclR5cGUgY2hhcmFjdGVyID0gc3RyaW5nW2ldKQorICAgICAg
ICAgICAgc3RyaW5nW2orK10gPSBjaGFyYWN0ZXI7CisgICAgfQorICAgIEFTU0VSVChqIDwgc2l6
ZSk7CisgICAgc3RyaW5nLnNocmluayhqKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+CitzdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhWZWN0b3I8Q2hh
cmFjdGVyVHlwZSwgNTEyPiYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gpCit7CisgICAgc2l6ZV90
IHNsYXNoID0gZmlyc3RTbGFzaDsKKyAgICBkbyB7CisgICAgICAgIHNpemVfdCBwcmV2aW91c1Ns
YXNoID0gc2xhc2ggPyByZXZlcnNlRmluZChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksICcvJywg
c2xhc2ggLSAxKSA6IG5vdEZvdW5kOworICAgICAgICAvLyBEb24ndCByZW1vdmUgdGhlIGhvc3Qs
IGkuZS4gaHR0cDovL2Zvby5vcmcvLi4vZm9vLmh0bWwKKyAgICAgICAgaWYgKHByZXZpb3VzU2xh
c2ggPT0gbm90Rm91bmQgfHwgKHByZXZpb3VzU2xhc2ggPiAzICYmIHBhdGhbcHJldmlvdXNTbGFz
aCAtIDJdID09ICc6JyAmJiBwYXRoW3ByZXZpb3VzU2xhc2ggLSAxXSA9PSAnLycpKSB7CisgICAg
ICAgICAgICBwYXRoW3NsYXNoXSA9IDA7CisgICAgICAgICAgICBwYXRoW3NsYXNoICsgMV0gPSAw
OworICAgICAgICAgICAgcGF0aFtzbGFzaCArIDJdID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBwcmV2aW91c1NsYXNoOyBpIDwgc2xhc2ggKyAzOyAr
K2kpCisgICAgICAgICAgICAgICAgcGF0aFtpXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgc2xh
c2ggKz0gMzsKKyAgICB9IHdoaWxlICgoc2xhc2ggPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRo
LmRhdGEoKSwgcGF0aC5zaXplKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOworICAgIHNxdWVlemVP
dXROdWxsQ2hhcmFjdGVycyhwYXRoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+CitzdGF0aWMgdm9pZCBtZXJnZURvdWJsZVNsYXNoZXMoVmVjdG9yPENoYXJhY3RlclR5
cGUsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQoreworICAgIHNpemVfdCByZWZQb3Mg
PSBmaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJyMnKTsKKyAgICBpZiAoIXJlZlBvcyB8
fCByZWZQb3MgPT0gbm90Rm91bmQpCisgICAgICAgIHJlZlBvcyA9IHBhdGguc2l6ZSgpOworCisg
ICAgc2l6ZV90IHNsYXNoID0gZmlyc3RTbGFzaDsKKyAgICB3aGlsZSAoc2xhc2ggPCByZWZQb3Mp
IHsKKyAgICAgICAgaWYgKCFzbGFzaCB8fCBwYXRoW3NsYXNoIC0gMV0gIT0gJzonKQorICAgICAg
ICAgICAgcGF0aFtzbGFzaCsrXSA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNsYXNo
ICs9IDI7CisgICAgICAgIGlmICgoc2xhc2ggPSBmaW5kU2xhc2hTbGFzaChwYXRoLmRhdGEoKSwg
cGF0aC5zaXplKCksIHNsYXNoKSkgPT0gbm90Rm91bmQpCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgc3F1ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKHBhdGgpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyB2b2lkIGNsZWFuU2xhc2hEb3RTbGFzaGVz
KFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCA1MTI+JiBwYXRoLCBzaXplX3QgZmlyc3RTbGFzaCkKK3sK
KyAgICBzaXplX3Qgc2xhc2ggPSBmaXJzdFNsYXNoOworICAgIGRvIHsKKyAgICAgICAgcGF0aFtz
bGFzaF0gPSAwOworICAgICAgICBwYXRoW3NsYXNoICsgMV0gPSAwOworICAgICAgICBzbGFzaCAr
PSAyOworICAgIH0gd2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgp
LCBwYXRoLnNpemUoKSwgc2xhc2gpKSAhPSBub3RGb3VuZCk7CisgICAgc3F1ZWV6ZU91dE51bGxD
aGFyYWN0ZXJzKHBhdGgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
K3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhblBhdGgoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4m
IHBhdGgpCit7CisgICAgLy8gRklYTUU6IFNob3VsZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkg
b3IgYW5jaG9yIHBhcnQgb2YgdGhlIFVSTC4KKyAgICBzaXplX3QgZmlyc3RTbGFzaCA9IGZpbmRT
bGFzaERvdERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7CisgICAgaWYgKGZp
cnN0U2xhc2ggIT0gbm90Rm91bmQpCisgICAgICAgIGNsZWFuU2xhc2hEb3REb3RTbGFzaGVzKHBh
dGgsIGZpcnN0U2xhc2gpOworCisgICAgLy8gRklYTUU6IFNob3VsZCBub3QgZG8gdGhpcyBpbiB0
aGUgcXVlcnkgcGFydC4KKyAgICBmaXJzdFNsYXNoID0gZmluZFNsYXNoU2xhc2gocGF0aC5kYXRh
KCksIHBhdGguc2l6ZSgpLCAwKTsKKyAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKKyAg
ICAgICAgbWVyZ2VEb3VibGVTbGFzaGVzKHBhdGgsIGZpcnN0U2xhc2gpOworCisgICAgLy8gRklY
TUU6IFNob3VsZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBhcnQuCisgICAg
Zmlyc3RTbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwg
MCk7CisgICAgaWYgKGZpcnN0U2xhc2ggIT0gbm90Rm91bmQpCisgICAgICAgIGNsZWFuU2xhc2hE
b3RTbGFzaGVzKHBhdGgsIGZpcnN0U2xhc2gpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaExldHRlcihDaGFyYWN0ZXJUeXBl
IGMsIGNoYXIgbG93ZXJjYXNlTGV0dGVyKQoreworICAgIHJldHVybiAoYyB8IDB4MjApID09IGxv
d2VyY2FzZUxldHRlcjsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citz
dGF0aWMgaW5saW5lIGJvb2wgbmVlZHNUcmFpbGluZ1NsYXNoKGNvbnN0IENoYXJhY3RlclR5cGUq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDwgNikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1swXSwg
J2gnKSB8fCAhbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1sxXSwgJ3QnKSB8fCAhbWF0Y2hMZXR0ZXIo
Y2hhcmFjdGVyc1syXSwgJ3QnKSB8fCAhbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1szXSwgJ3AnKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghKGNoYXJhY3RlcnNbNF0gPT0gJzonIHx8
IChtYXRjaExldHRlcihjaGFyYWN0ZXJzWzRdLCAncycpICYmIGNoYXJhY3RlcnNbNV0gPT0gJzon
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHBvcyA9IGNoYXJhY3Rl
cnNbNF0gPT0gJzonID8gNSA6IDY7CisKKyAgICAvLyBTa2lwIGluaXRpYWwgdHdvIHNsYXNoZXMg
aWYgcHJlc2VudC4KKyAgICBpZiAocG9zICsgMSA8IGxlbmd0aCAmJiBjaGFyYWN0ZXJzW3Bvc10g
PT0gJy8nICYmIGNoYXJhY3RlcnNbcG9zICsgMV0gPT0gJy8nKQorICAgICAgICBwb3MgKz0gMjsK
KworICAgIC8vIEZpbmQgbmV4dCBzbGFzaC4KKyAgICB3aGlsZSAocG9zIDwgbGVuZ3RoICYmIGNo
YXJhY3RlcnNbcG9zXSAhPSAnLycpCisgICAgICAgICsrcG9zOworCisgICAgcmV0dXJuIHBvcyA9
PSBsZW5ndGg7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGlj
IEFMV0FZU19JTkxJTkUgU2hhcmVkU3RyaW5nSGFzaCBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElu
bGluZShjb25zdCBDaGFyYWN0ZXJUeXBlKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBy
ZXR1cm4gQWxyZWFkeUhhc2hlZDo6YXZvaWREZWxldGVkVmFsdWUoU3RyaW5nSGFzaGVyOjpjb21w
dXRlSGFzaCh1cmwsIGxlbmd0aCkpOworfQorCitTaGFyZWRTdHJpbmdIYXNoIGNvbXB1dGVTaGFy
ZWRTdHJpbmdIYXNoKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHVybC5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCB8fCB1cmwuaXM4Qml0KCkpCisgICAgICAg
IHJldHVybiBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSh1cmwuY2hhcmFjdGVyczgoKSwg
bGVuZ3RoKTsKKyAgICByZXR1cm4gY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2hJbmxpbmUodXJsLmNo
YXJhY3RlcnMxNigpLCBsZW5ndGgpOworfQorCitTaGFyZWRTdHJpbmdIYXNoIGNvbXB1dGVTaGFy
ZWRTdHJpbmdIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBy
ZXR1cm4gY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2hJbmxpbmUodXJsLCBsZW5ndGgpOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZv
aWQgY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2hJbmxpbmUoY29uc3QgVVJMJiBiYXNlLCBjb25zdCBD
aGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFZlY3RvcjxDaGFyYWN0
ZXJUeXBlLCA1MTI+JiBidWZmZXIpCit7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFRoaXMgaXMgYSBwb29yIG1hbidzIGNvbXBsZXRlVVJMLiBGYXN0ZXIgd2l0
aCBsZXNzIG1lbW9yeSBhbGxvY2F0aW9uLgorICAgIC8vIEZJWE1FOiBJdCdzIG1pc3NpbmcgYSBs
b3Qgb2Ygd2hhdCBjb21wbGV0ZVVSTCBkb2VzIGFuZCBhIGxvdCBvZiB3aGF0IFVSTCBkb2VzLgor
ICAgIC8vIEZvciBleGFtcGxlLCBpdCBkb2VzIG5vdCBoYW5kbGUgaW50ZXJuYXRpb25hbCBkb21h
aW4gbmFtZXMgcHJvcGVybHkuCisKKyAgICAvLyBGSVhNRTogSXQgaXMgd3JvbmcgdGhhdCB3ZSBk
byBub3QgZG8gZnVydGhlciBwcm9jZXNzaW5nIG9uIHN0cmluZ3MgdGhhdCBoYXZlICI6Ly8iIGlu
IHRoZW06CisgICAgLy8gICAgMSkgVGhlICI6Ly8iIGNvdWxkIGJlIGluIHRoZSBxdWVyeSBvciBh
bmNob3IuCisgICAgLy8gICAgMikgVGhlIFVSTCdzIHBhdGggY291bGQgaGF2ZSBhICIvLi8iIG9y
IGEgIi8uLi8iIG9yIGEgIi8vIiBzZXF1ZW5jZSBpbiBpdC4KKworICAgIC8vIEZJWE1FOiBuZWVk
c1RyYWlsaW5nU2xhc2ggZG9lcyBub3QgcHJvcGVybHkgcmV0dXJuIHRydWUgZm9yIGEgVVJMIHRo
YXQgaGFzIG5vIHBhdGgsIGJ1dCBkb2VzCisgICAgLy8gaGF2ZSBhIHF1ZXJ5IG9yIGFuY2hvci4K
KworICAgIGJvb2wgaGFzQ29sb25TbGFzaFNsYXNoID0gY29udGFpbnNDb2xvblNsYXNoU2xhc2go
Y2hhcmFjdGVycywgbGVuZ3RoKTsKKworICAgIGlmIChoYXNDb2xvblNsYXNoU2xhc2ggJiYgIW5l
ZWRzVHJhaWxpbmdTbGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7CisgICAgICAgIGJ1ZmZlci5h
cHBlbmQoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisg
ICAgaWYgKGhhc0NvbG9uU2xhc2hTbGFzaCkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBp
bmNvcnJlY3QgZm9yIFVSTHMgdGhhdCBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yOyB0aGUgIi8iIG5l
ZWRzIHRvIGdvIGF0IHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhlIHBhdGgsICpiZWZvcmUqIHRo
ZSBxdWVyeSBvciBhbmNob3IuCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVycywgbGVu
Z3RoKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIGFwcGVuZChidWZmZXIsIGJhc2Uuc3RyaW5n
KCkpOworICAgIGVsc2UgeworICAgICAgICBzd2l0Y2ggKGNoYXJhY3RlcnNbMF0pIHsKKyAgICAg
ICAgY2FzZSAnLyc6CisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBTdHJpbmdWaWV3KGJhc2Uu
c3RyaW5nKCkpLnN1YnN0cmluZygwLCBiYXNlLnBhdGhTdGFydCgpKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnIyc6CisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBTdHJp
bmdWaWV3KGJhc2Uuc3RyaW5nKCkpLnN1YnN0cmluZygwLCBiYXNlLnBhdGhFbmQoKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhcHBlbmQoYnVm
ZmVyLCBTdHJpbmdWaWV3KGJhc2Uuc3RyaW5nKCkpLnN1YnN0cmluZygwLCBiYXNlLnBhdGhBZnRl
ckxhc3RTbGFzaCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBidWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgY2xlYW5QYXRoKGJ1ZmZl
cik7CisgICAgaWYgKG5lZWRzVHJhaWxpbmdTbGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6
ZSgpKSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3QgZm9yIFVSTHMgdGhh
dCBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yOyB0aGUgIi8iIG5lZWRzIHRvIGdvIGF0IHRoZQorICAg
ICAgICAvLyBlbmQgb2YgdGhlIHBhdGgsICpiZWZvcmUqIHRoZSBxdWVyeSBvciBhbmNob3IuCisg
ICAgICAgIGJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKK1No
YXJlZFN0cmluZ0hhc2ggY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2goY29uc3QgVVJMJiBiYXNlLCBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKK3sKKyAgICBpZiAoYXR0cmlidXRlVVJM
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWJhc2Uuc3RyaW5nKCku
aXNFbXB0eSgpICYmIGJhc2Uuc3RyaW5nKCkuaXM4Qml0KCkgJiYgYXR0cmlidXRlVVJMLmlzOEJp
dCgpKSB7CisgICAgICAgIFZlY3RvcjxMQ2hhciwgNTEyPiB1cmw7CisgICAgICAgIGNvbXB1dGVT
aGFyZWRTdHJpbmdIYXNoSW5saW5lKGJhc2UsIGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzOCgpLCBh
dHRyaWJ1dGVVUkwubGVuZ3RoKCksIHVybCk7CisgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVTaGFyZWRTdHJp
bmdIYXNoSW5saW5lKHVybC5kYXRhKCksIHVybC5zaXplKCkpOworICAgIH0KKworICAgIFZlY3Rv
cjxVQ2hhciwgNTEyPiB1cmw7CisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJp
bmdWaWV3KGF0dHJpYnV0ZVVSTC5zdHJpbmcoKSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Cisg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CisgICAg
Y29tcHV0ZVNoYXJlZFN0cmluZ0hhc2hJbmxpbmUoYmFzZSwgY2hhcmFjdGVycywgYXR0cmlidXRl
VVJMLmxlbmd0aCgpLCB1cmwpOworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSh1cmwuZGF0
YSgpLCB1cmwuc2l6ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMDMzYzNmYjdl
MDA2NmE1MzNlOGE1ZDBkNDI0Y2YxN2E4ZDRlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRTdHJpbmdIYXNoLmgKQEAgLTAsMCArMSw2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBVUkw7CisKK3R5cGVkZWYgdWlu
dDY0X3QgU2hhcmVkU3RyaW5nSGFzaDsKKworLy8gVXNlIHRoZSBsb3cgMzItYml0cyBvZiB0aGUg
NjQtYml0IFNoYXJlZFN0cmluZ0hhc2ggYXMgdGhlIGtleSBmb3IgSGFzaFNldHMuCitzdHJ1Y3Qg
U2hhcmVkU3RyaW5nSGFzaEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFNoYXJlZFN0
cmluZ0hhc2gga2V5KSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KTsgfQorICAg
IHN0YXRpYyBib29sIGVxdWFsKFNoYXJlZFN0cmluZ0hhc2ggYSwgU2hhcmVkU3RyaW5nSGFzaCBi
KSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CisKKyAgICAvLyBTZWUgQWxyZWFkeUhhc2hlZDo6YXZv
aWREZWxldGVkVmFsdWUuCisgICAgc3RhdGljIHVuc2lnbmVkIGF2b2lkRGVsZXRlZFZhbHVlKFNo
YXJlZFN0cmluZ0hhc2ggaGFzaDY0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc2g2NCk7Cisg
ICAgICAgIHVuc2lnbmVkIGhhc2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGFzaDY0KTsKKyAg
ICAgICAgdW5zaWduZWQgbmV3SGFzaCA9IGhhc2ggfCAoIShoYXNoICsgMSkgPDwgMzEpOworICAg
ICAgICBBU1NFUlQobmV3SGFzaCk7CisgICAgICAgIEFTU0VSVChuZXdIYXNoICE9IDB4RkZGRkZG
RkYpOworICAgICAgICByZXR1cm4gbmV3SGFzaDsKKyAgICB9Cit9OworCisvLyBSZXR1cm5zIHRo
ZSBoYXNoIG9mIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQgbGluayBj
b2xvcmluZy4KK1dFQkNPUkVfRVhQT1JUIFNoYXJlZFN0cmluZ0hhc2ggY29tcHV0ZVNoYXJlZFN0
cmluZ0hhc2goY29uc3QgU3RyaW5nJiB1cmwpOworV0VCQ09SRV9FWFBPUlQgU2hhcmVkU3RyaW5n
SGFzaCBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBs
ZW5ndGgpOworCisvLyBSZXNvbHZlcyB0aGUgcG90ZW50aWFsbHkgcmVsYXRpdmUgVVJMICJhdHRy
aWJ1dGVVUkwiIHJlbGF0aXZlIHRvIHRoZSBnaXZlbgorLy8gYmFzZSBVUkwsIGFuZCByZXR1cm5z
IHRoZSBoYXNoIG9mIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQKKy8v
IGxpbmsgY29sb3JpbmcuIEl0IHdpbGwgcmV0dXJuIHRoZSBzcGVjaWFsIHZhbHVlIG9mIDAgaWYg
YXR0cmlidXRlVVJMIGRvZXMgbm90CisvLyBsb29rIGxpa2UgYSByZWxhdGl2ZSBVUkwuCitTaGFy
ZWRTdHJpbmdIYXNoIGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoKGNvbnN0IFVSTCYgYmFzZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dC9DTWFrZUxpc3RzLnR4dAppbmRleCAwMmMzMmJlZWU2MjBjYjcxMmM2OTFlZDVmYmNjMjk5NDY3
MGI4ZGE2Li5hMzYzODcxZDhiNjZhYmY3NjQxZDNiOWZhOTBmNzBmNjcwMjU2MGE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01h
a2VMaXN0cy50eHQKQEAgLTE3MSw2ICsxNzEsNyBAQCBzZXQoV2ViS2l0X1NPVVJDRVMKICAgICBT
aGFyZWQvRm9udEluZm8uY3BwCiAgICAgU2hhcmVkL0ZyYW1lSW5mb0RhdGEuY3BwCiAgICAgU2hh
cmVkL0xheWVyVHJlZUNvbnRleHQuY3BwCisgICAgU2hhcmVkL0xpbmtIYXNoVGFibGUuY3BwCiAg
ICAgU2hhcmVkL0xvYWRQYXJhbWV0ZXJzLmNwcAogICAgIFNoYXJlZC9OYXZpZ2F0aW9uQWN0aW9u
RGF0YS5jcHAKICAgICBTaGFyZWQvUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmNwcApAQCAtMTc5LDEw
ICsxODAsMTAgQEAgc2V0KFdlYktpdF9TT1VSQ0VTCiAgICAgU2hhcmVkL1Nlc3Npb25UcmFja2Vy
LmNwcAogICAgIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCiAgICAgU2hhcmVkL1NoYXJlYWJs
ZVJlc291cmNlLmNwcAorICAgIFNoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwCiAgICAg
U2hhcmVkL1N0YXRpc3RpY3NEYXRhLmNwcAogICAgIFNoYXJlZC9VcGRhdGVJbmZvLmNwcAogICAg
IFNoYXJlZC9Vc2VyRGF0YS5jcHAKLSAgICBTaGFyZWQvVmlzaXRlZExpbmtUYWJsZS5jcHAKICAg
ICBTaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKICAgICBTaGFyZWQvV2ViQ29tcGls
ZWRDb250ZW50UnVsZUxpc3QuY3BwCiAgICAgU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0RGF0YS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmlu
Z0hhc2hTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3Rv
cmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA1OTIwMzAzOTFhM2E3M2MyMjFjOTAyNGUxYTM0NDMzN2I2NGI5
OTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdI
YXNoU3RvcmUuY3BwCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY29uc3QgdW5zaWdu
ZWQgc2hhcmVkU3RyaW5nSGFzaFRhYmxlTWF4TG9hZCA9IDI7CisKK3N0YXRpYyB1bnNpZ25lZCBu
ZXh0UG93ZXJPZjIodW5zaWduZWQgdikKK3sKKyAgICAvLyBUYWtlbiBmcm9tIGh0dHA6Ly93d3cu
Y3MudXRrLmVkdS9+dm9zZS9jLXN0dWZmL2JpdGhhY2tzLmh0bWwKKyAgICAvLyBEZXZpc2VkIGJ5
IFNlYW4gQW5kZXJzb24sIFNlcGVtYmVyIDE0LCAyMDAxCisKKyAgICB2LS07CisgICAgdiB8PSB2
ID4+IDE7CisgICAgdiB8PSB2ID4+IDI7CisgICAgdiB8PSB2ID4+IDQ7CisgICAgdiB8PSB2ID4+
IDg7CisgICAgdiB8PSB2ID4+IDE2OworICAgIHYrKzsKKworICAgIHJldHVybiB2OworfQorCitz
dGF0aWMgdW5zaWduZWQgdGFibGVTaXplRm9yS2V5Q291bnQodW5zaWduZWQga2V5Q291bnQpCit7
CisgICAgLy8gV2Ugd2FudCB0aGUgdGFibGUgdG8gYmUgYXQgbGVhc3QgaGFsZiBlbXB0eS4KKyAg
ICB1bnNpZ25lZCB0YWJsZVNpemUgPSBuZXh0UG93ZXJPZjIoa2V5Q291bnQgKiBzaGFyZWRTdHJp
bmdIYXNoVGFibGVNYXhMb2FkKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHRoZSB0YWJsZSBzaXpl
IGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIGEgcGFnZS4KKyAgICBzaXplX3QgbWluaW11bVRhYmxl
U2l6ZSA9IFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUoKSAvIHNpemVvZihTaGFyZWRTdHJp
bmdIYXNoKTsKKyAgICBpZiAodGFibGVTaXplIDwgbWluaW11bVRhYmxlU2l6ZSkKKyAgICAgICAg
cmV0dXJuIG1pbmltdW1UYWJsZVNpemU7CisKKyAgICByZXR1cm4gdGFibGVTaXplOworfQorCitT
aGFyZWRTdHJpbmdIYXNoU3RvcmU6OlNoYXJlZFN0cmluZ0hhc2hTdG9yZShDbGllbnQmIGNsaWVu
dCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hh
c2hlc1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6
cGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVyRmlyZWQpCit7Cit9CisKK2Jvb2wgU2hhcmVk
U3RyaW5nSGFzaFN0b3JlOjpjcmVhdGVTaGFyZWRNZW1vcnlIYW5kbGUoU2hhcmVkTWVtb3J5OjpI
YW5kbGUmIGhhbmRsZSkKK3sKKyAgICByZXR1cm4gbV90YWJsZS5zaGFyZWRNZW1vcnkoKS0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Cit9
CisKK3ZvaWQgU2hhcmVkU3RyaW5nSGFzaFN0b3JlOjphZGQoU2hhcmVkU3RyaW5nSGFzaCBzaGFy
ZWRTdHJpbmdIYXNoKQoreworICAgIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlcy5hZGQoc2hh
cmVkU3RyaW5nSGFzaCk7CisKKyAgICBpZiAoIW1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1Rp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOworfQorCit2b2lkIFNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6Y2xl
YXIoKQoreworICAgIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVyLnN0b3AoKTsKKyAg
ICBtX3BlbmRpbmdTaGFyZWRTdHJpbmdIYXNoZXMuY2xlYXIoKTsKKyAgICBtX2tleUNvdW50ID0g
MDsKKyAgICBtX3RhYmxlU2l6ZSA9IDA7CisgICAgbV90YWJsZS5jbGVhcigpOworfQorCit2b2lk
IFNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6cmVzaXplVGFibGUodW5zaWduZWQgbmV3VGFibGVTaXpl
KQoreworICAgIGF1dG8gbmV3VGFibGVNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKG5l
d1RhYmxlU2l6ZSAqIHNpemVvZihTaGFyZWRTdHJpbmdIYXNoKSk7CisgICAgaWYgKCFuZXdUYWJs
ZU1lbW9yeSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBzaGFyZWQg
bWVtb3J5IGZvciBTaGFyZWRTdHJpbmdIYXNoIHRhYmxlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtZW1zZXQobmV3VGFibGVNZW1vcnktPmRhdGEoKSwgMCwgbmV3VGFibGVNZW1v
cnktPnNpemUoKSk7CisKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBjdXJyZW50VGFibGVNZW1v
cnkgPSBtX3RhYmxlLnNoYXJlZE1lbW9yeSgpOworICAgIHVuc2lnbmVkIGN1cnJlbnRUYWJsZVNp
emUgPSBtX3RhYmxlU2l6ZTsKKworICAgIG1fdGFibGUuc2V0U2hhcmVkTWVtb3J5KG5ld1RhYmxl
TWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpOworICAgIG1fdGFibGVTaXplID0gbmV3VGFibGVTaXpl
OworCisgICAgaWYgKGN1cnJlbnRUYWJsZU1lbW9yeSkgeworICAgICAgICBBU1NFUlRfVU5VU0VE
KGN1cnJlbnRUYWJsZVNpemUsIGN1cnJlbnRUYWJsZU1lbW9yeS0+c2l6ZSgpID09IGN1cnJlbnRU
YWJsZVNpemUgKiBzaXplb2YoU2hhcmVkU3RyaW5nSGFzaCkpOworCisgICAgICAgIC8vIEdvIHRo
cm91Z2ggdGhlIGN1cnJlbnQgaGFzaCB0YWJsZSBhbmQgcmUtYWRkIGFsbCBlbnRyaWVzIHRvIHRo
ZSBuZXcgaGFzaCB0YWJsZS4KKyAgICAgICAgY29uc3QgU2hhcmVkU3RyaW5nSGFzaCogY3VycmVu
dFNoYXJlZFN0cmluZ0hhc2hlcyA9IHN0YXRpY19jYXN0PGNvbnN0IFNoYXJlZFN0cmluZ0hhc2gq
PihjdXJyZW50VGFibGVNZW1vcnktPmRhdGEoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjdXJyZW50VGFibGVTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gc2hhcmVk
U3RyaW5nSGFzaCA9IGN1cnJlbnRTaGFyZWRTdHJpbmdIYXNoZXNbaV07CisgICAgICAgICAgICBp
ZiAoIXNoYXJlZFN0cmluZ0hhc2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIGJvb2wgZGlkQWRkU2hhcmVkU3RyaW5nSGFzaCA9IG1fdGFibGUuYWRkKHNoYXJlZFN0
cmluZ0hhc2gpOworCisgICAgICAgICAgICAvLyBJdCBzaG91bGQgYWx3YXlzIGJlIHBvc3NpYmxl
IHRvIGFkZCB0aGUgU2hhcmVkU3RyaW5nSGFzaCB0byBhIG5ldyB0YWJsZS4KKyAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoZGlkQWRkU2hhcmVkU3RyaW5nSGFzaCwgZGlkQWRkU2hhcmVkU3RyaW5n
SGFzaCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHNoYXJlZFN0cmluZ0hh
c2ggOiBtX3BlbmRpbmdTaGFyZWRTdHJpbmdIYXNoZXMpIHsKKyAgICAgICAgaWYgKG1fdGFibGUu
YWRkKHNoYXJlZFN0cmluZ0hhc2gpKQorICAgICAgICAgICAgKyttX2tleUNvdW50OworICAgIH0K
KyAgICBtX3BlbmRpbmdTaGFyZWRTdHJpbmdIYXNoZXMuY2xlYXIoKTsKKworICAgIG1fY2xpZW50
LmRpZEludmFsaWRhdGVTaGFyZWRNZW1vcnkoKTsKK30KKwordm9pZCBTaGFyZWRTdHJpbmdIYXNo
U3RvcmU6OnBlbmRpbmdTaGFyZWRTdHJpbmdIYXNoZXNUaW1lckZpcmVkKCkKK3sKKyAgICB1bnNp
Z25lZCBjdXJyZW50VGFibGVTaXplID0gbV90YWJsZVNpemU7CisgICAgdW5zaWduZWQgbmV3VGFi
bGVTaXplID0gdGFibGVTaXplRm9yS2V5Q291bnQobV9rZXlDb3VudCArIG1fcGVuZGluZ1NoYXJl
ZFN0cmluZ0hhc2hlcy5zaXplKCkpOworCisgICAgbmV3VGFibGVTaXplID0gc3RkOjptYXgoY3Vy
cmVudFRhYmxlU2l6ZSwgbmV3VGFibGVTaXplKTsKKworICAgIGlmIChjdXJyZW50VGFibGVTaXpl
ICE9IG5ld1RhYmxlU2l6ZSkgeworICAgICAgICByZXNpemVUYWJsZShuZXdUYWJsZVNpemUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFNoYXJlZFN0cmluZ0hhc2g+IGFk
ZGVkU2hhcmVkU3RyaW5nSGFzaGVzOworICAgIGFkZGVkU2hhcmVkU3RyaW5nSGFzaGVzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzLnNpemUoKSk7Cisg
ICAgZm9yIChhdXRvJiBzaGFyZWRTdHJpbmdIYXNoIDogbV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFz
aGVzKSB7CisgICAgICAgIGlmIChtX3RhYmxlLmFkZChzaGFyZWRTdHJpbmdIYXNoKSkgeworICAg
ICAgICAgICAgYWRkZWRTaGFyZWRTdHJpbmdIYXNoZXMudW5jaGVja2VkQXBwZW5kKHNoYXJlZFN0
cmluZ0hhc2gpOworICAgICAgICAgICAgKyttX2tleUNvdW50OworICAgICAgICB9CisgICAgfQor
CisgICAgbV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzLmNsZWFyKCk7CisKKyAgICBpZiAoIWFk
ZGVkU2hhcmVkU3RyaW5nSGFzaGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jbGllbnQuZGlkQWRk
U2hhcmVkU3RyaW5nSGFzaGVzKGFkZGVkU2hhcmVkU3RyaW5nSGFzaGVzKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRT
dHJpbmdIYXNoU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hT
dG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI1NDgzOTM0YmMxNjkzZDE5ZTc5NWQ1OTBjNjU0YTA4YmQ0Y2U4
YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdI
YXNoU3RvcmUuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hh
c2hUYWJsZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkU3RyaW5nSGFzaC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFNoYXJlZFN0cmluZ0hhc2hTdG9yZSB7CitwdWJsaWM6CisgICAg
Y2xhc3MgQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsg
fQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRJbnZhbGlkYXRlU2hhcmVkTWVtb3J5KCkgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkU2hhcmVkU3RyaW5nSGFzaGVzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoPiYpID0gMDsKKyAgICB9OworCisgICAgU2hh
cmVkU3RyaW5nSGFzaFN0b3JlKENsaWVudCYpOworCisgICAgYm9vbCBjcmVhdGVTaGFyZWRNZW1v
cnlIYW5kbGUoU2hhcmVkTWVtb3J5OjpIYW5kbGUmKTsKKyAgICB2b2lkIGFkZChXZWJDb3JlOjpT
aGFyZWRTdHJpbmdIYXNoKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiAhbV9rZXlDb3VudDsgfQorCitwcml2YXRlOgorICAgIHZvaWQgcmVz
aXplVGFibGUodW5zaWduZWQgbmV3VGFibGVTaXplKTsKKyAgICB2b2lkIHBlbmRpbmdTaGFyZWRT
dHJpbmdIYXNoZXNUaW1lckZpcmVkKCk7CisKKyAgICBDbGllbnQmIG1fY2xpZW50OworICAgIHVu
c2lnbmVkIG1fa2V5Q291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV90YWJsZVNpemUgeyAwIH07
CisgICAgU2hhcmVkU3RyaW5nSGFzaFRhYmxlIG1fdGFibGU7CisgICAgSGFzaFNldDxXZWJDb3Jl
OjpTaGFyZWRTdHJpbmdIYXNoLCBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoSGFzaD4gbV9wZW5k
aW5nU2hhcmVkU3RyaW5nSGFzaGVzOworICAgIFJ1bkxvb3A6OlRpbWVyPFNoYXJlZFN0cmluZ0hh
c2hTdG9yZT4gbV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzVGltZXI7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0
cmluZ0hhc2hUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNo
VGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2YmVmOTQ3NzIyMzQ1OGJiZWY1YzFiYmU5MjdkZDNkYTJi
NDY4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJp
bmdIYXNoVGFibGUuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmgiCisKKyNp
bmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitTaGFyZWRTdHJpbmdIYXNoVGFibGU6OlNoYXJlZFN0cmluZ0hh
c2hUYWJsZSgpCit7Cit9CisKK1NoYXJlZFN0cmluZ0hhc2hUYWJsZTo6flNoYXJlZFN0cmluZ0hh
c2hUYWJsZSgpCit7Cit9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgaW5saW5lIGJv
b2wgaXNQb3dlck9mMih1bnNpZ25lZCB2KQoreworICAgIC8vIFRha2VuIGZyb20gaHR0cDovL3d3
dy5jcy51dGsuZWR1L352b3NlL2Mtc3R1ZmYvYml0aGFja3MuaHRtbAorICAgIAorICAgIHJldHVy
biAhKHYgJiAodiAtIDEpKSAmJiB2OworfQorI2VuZGlmCisKK3ZvaWQgU2hhcmVkU3RyaW5nSGFz
aFRhYmxlOjpzZXRTaGFyZWRNZW1vcnkoUmVmPFNoYXJlZE1lbW9yeT4mJiBzaGFyZWRNZW1vcnkp
Cit7CisgICAgbV9zaGFyZWRNZW1vcnkgPSBXVEZNb3ZlKHNoYXJlZE1lbW9yeSk7CisgICAgCisg
ICAgQVNTRVJUKG1fc2hhcmVkTWVtb3J5KTsKKyAgICBBU1NFUlQoIShtX3NoYXJlZE1lbW9yeS0+
c2l6ZSgpICUgc2l6ZW9mKFNoYXJlZFN0cmluZ0hhc2gpKSk7CisKKyAgICBtX3RhYmxlID0gc3Rh
dGljX2Nhc3Q8U2hhcmVkU3RyaW5nSGFzaCo+KG1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpOworICAg
IG1fdGFibGVTaXplID0gbV9zaGFyZWRNZW1vcnktPnNpemUoKSAvIHNpemVvZihTaGFyZWRTdHJp
bmdIYXNoKTsKKyAgICBBU1NFUlQoaXNQb3dlck9mMihtX3RhYmxlU2l6ZSkpOworICAgIAorICAg
IG1fdGFibGVTaXplTWFzayA9IG1fdGFibGVTaXplIC0gMTsKK30KKworc3RhdGljIGlubGluZSB1
bnNpZ25lZCBkb3VibGVIYXNoKHVuc2lnbmVkIGtleSkKK3sKKyAgICBrZXkgPSB+a2V5ICsgKGtl
eSA+PiAyMyk7CisgICAga2V5IF49IChrZXkgPDwgMTIpOworICAgIGtleSBePSAoa2V5ID4+IDcp
OworICAgIGtleSBePSAoa2V5IDw8IDIpOworICAgIGtleSBePSAoa2V5ID4+IDIwKTsKKyAgICBy
ZXR1cm4ga2V5OworfQorICAgIAorYm9vbCBTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmFkZChTaGFy
ZWRTdHJpbmdIYXNoIHNoYXJlZFN0cmluZ0hhc2gpCit7CisgICAgQVNTRVJUKG1fc2hhcmVkTWVt
b3J5KTsKKworICAgIGludCBrID0gMDsKKyAgICBTaGFyZWRTdHJpbmdIYXNoKiB0YWJsZSA9IG1f
dGFibGU7CisgICAgaW50IHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNrOworICAgIHVuc2lnbmVk
IGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2hhcmVkU3RyaW5nSGFzaCk7CisgICAgaW50IGkg
PSBoICYgc2l6ZU1hc2s7CisKKyAgICBTaGFyZWRTdHJpbmdIYXNoKiBlbnRyeTsKKyAgICB3aGls
ZSAoMSkgeworICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKworICAgICAgICAvLyBDaGVjayBp
ZiB0aGlzIGJ1Y2tldCBpcyBlbXB0eS4KKyAgICAgICAgaWYgKCEqZW50cnkpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2FtZSBsaW5rIGhhc2ggaXMgaW4g
dGhlIHRhYmxlIGFscmVhZHkuCisgICAgICAgIGlmICgqZW50cnkgPT0gc2hhcmVkU3RyaW5nSGFz
aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIWspCisgICAgICAg
ICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1h
c2s7CisgICAgfQorCisgICAgKmVudHJ5ID0gc2hhcmVkU3RyaW5nSGFzaDsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmNvbnRhaW5zKFNoYXJlZFN0
cmluZ0hhc2ggc2hhcmVkU3RyaW5nSGFzaCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2hhcmVkTWVt
b3J5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgayA9IDA7CisgICAgU2hhcmVk
U3RyaW5nSGFzaCogdGFibGUgPSBtX3RhYmxlOworICAgIGludCBzaXplTWFzayA9IG1fdGFibGVT
aXplTWFzazsKKyAgICB1bnNpZ25lZCBoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNoYXJlZFN0
cmluZ0hhc2gpOworICAgIGludCBpID0gaCAmIHNpemVNYXNrOworICAgIAorICAgIFNoYXJlZFN0
cmluZ0hhc2gqIGVudHJ5OworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gdGFibGUg
KyBpOworCisgICAgICAgIC8vIENoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUg
dGFibGUuCisgICAgICAgIGlmICghKmVudHJ5KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgICAgICBpZiAoKmVudHJ5ID09IHNoYXJlZFN0cmluZ0hhc2gpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghaykKKyAgICAgICAgICAgIGsgPSAx
IHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2hhcmVkU3RyaW5nSGFzaFRhYmxlOjpj
bGVhcigpCit7CisgICAgbV90YWJsZVNpemUgPSAwOworICAgIG1fdGFibGVTaXplTWFzayA9IDA7
CisgICAgbV9zaGFyZWRNZW1vcnkgPSBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJs
ZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWNkMmQzZTgzYWY1OWNjZWZiMDQyYmYxOTYxOGQ5NWMyOTI0ZjMyOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZS5oCkBA
IC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8V2ViQ29yZS9TaGFyZWRTdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVkTWVtb3J5OworCitjbGFzcyBTaGFy
ZWRTdHJpbmdIYXNoVGFibGUgeworcHVibGljOgorICAgIFNoYXJlZFN0cmluZ0hhc2hUYWJsZSgp
OworICAgIH5TaGFyZWRTdHJpbmdIYXNoVGFibGUoKTsKKworICAgIHZvaWQgc2V0U2hhcmVkTWVt
b3J5KFJlZjxTaGFyZWRNZW1vcnk+JiYpOworCisgICAgLy8gQ2FuIG9ubHkgYmUgY2FsbGVkIGlm
IHRoZSB1bmRlcmx5aW5nIHNoYXJlZCBtZW1vcnkgaXMgaW4gcmVhZCAvIHdyaXRlIG1vZGUuCisg
ICAgYm9vbCBhZGQoV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCk7CisKKyAgICBib29sIGNvbnRh
aW5zKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2gpIGNvbnN0OworCisgICAgU2hhcmVkTWVtb3J5
KiBzaGFyZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZE1lbW9yeS5nZXQoKTsgfQor
ICAgIHZvaWQgY2xlYXIoKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBt
X3NoYXJlZE1lbW9yeTsKKworICAgIHVuc2lnbmVkIG1fdGFibGVTaXplIHsgMCB9OworICAgIHVu
c2lnbmVkIG1fdGFibGVTaXplTWFzayB7IDAgfTsKKyAgICBXZWJDb3JlOjpTaGFyZWRTdHJpbmdI
YXNoKiBtX3RhYmxlIHsgbnVsbHB0ciB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvVmlzaXRlZExpbmtUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9W
aXNpdGVkTGlua1RhYmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJiMTFi
NzNjZjJkNzdhYjgwZjUzMzI2OTFmYjg3ZWQyYmIyZjA5Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9WaXNpdGVkTGlu
a1RhYmxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKLQotI2lu
Y2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLVZpc2l0ZWRMaW5rVGFibGU6OlZpc2l0ZWRMaW5rVGFibGUoKQot
ICAgIDogbV90YWJsZVNpemUoMCkKLSAgICAsIG1fdGFibGVTaXplTWFzaygwKQotICAgICwgbV90
YWJsZShudWxscHRyKQotewotfQotCi1WaXNpdGVkTGlua1RhYmxlOjp+VmlzaXRlZExpbmtUYWJs
ZSgpCi17Ci19Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQ
b3dlck9mMih1bnNpZ25lZCB2KQotewotICAgIC8vIFRha2VuIGZyb20gaHR0cDovL3d3dy5jcy51
dGsuZWR1L352b3NlL2Mtc3R1ZmYvYml0aGFja3MuaHRtbAotICAgIAotICAgIHJldHVybiAhKHYg
JiAodiAtIDEpKSAmJiB2OwotfQotI2VuZGlmCi0KLXZvaWQgVmlzaXRlZExpbmtUYWJsZTo6c2V0
U2hhcmVkTWVtb3J5KFJlZjxTaGFyZWRNZW1vcnk+JiYgc2hhcmVkTWVtb3J5KQotewotICAgIG1f
c2hhcmVkTWVtb3J5ID0gV1RGTW92ZShzaGFyZWRNZW1vcnkpOwotICAgIAotICAgIEFTU0VSVCht
X3NoYXJlZE1lbW9yeSk7Ci0gICAgQVNTRVJUKCEobV9zaGFyZWRNZW1vcnktPnNpemUoKSAlIHNp
emVvZihMaW5rSGFzaCkpKTsKLQotICAgIG1fdGFibGUgPSBzdGF0aWNfY2FzdDxMaW5rSGFzaCo+
KG1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpOwotICAgIG1fdGFibGVTaXplID0gbV9zaGFyZWRNZW1v
cnktPnNpemUoKSAvIHNpemVvZihMaW5rSGFzaCk7Ci0gICAgQVNTRVJUKGlzUG93ZXJPZjIobV90
YWJsZVNpemUpKTsKLSAgICAKLSAgICBtX3RhYmxlU2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZSAtIDE7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZG91YmxlSGFzaCh1bnNpZ25lZCBrZXkpCi17
Ci0gICAga2V5ID0gfmtleSArIChrZXkgPj4gMjMpOwotICAgIGtleSBePSAoa2V5IDw8IDEyKTsK
LSAgICBrZXkgXj0gKGtleSA+PiA3KTsKLSAgICBrZXkgXj0gKGtleSA8PCAyKTsKLSAgICBrZXkg
Xj0gKGtleSA+PiAyMCk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLSAgICAKLWJvb2wgVmlzaXRlZExp
bmtUYWJsZTo6YWRkTGlua0hhc2goTGlua0hhc2ggbGlua0hhc2gpCi17Ci0gICAgQVNTRVJUKG1f
c2hhcmVkTWVtb3J5KTsKLQotICAgIGludCBrID0gMDsKLSAgICBMaW5rSGFzaCogdGFibGUgPSBt
X3RhYmxlOwotICAgIGludCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKLSAgICB1bnNpZ25l
ZCBoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmtIYXNoKTsKLSAgICBpbnQgaSA9IGggJiBz
aXplTWFzazsKLSAgCi0gICAgTGlua0hhc2gqIGVudHJ5OwotICAgIHdoaWxlICgxKSB7Ci0gICAg
ICAgIGVudHJ5ID0gdGFibGUgKyBpOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgYnVja2V0
IGlzIGVtcHR5LgotICAgICAgICBpZiAoISplbnRyeSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIC8vIENoZWNrIGlmIHRoZSBzYW1lIGxpbmsgaGFzaCBpcyBpbiB0aGUgdGFibGUgYWxy
ZWFkeS4KLSAgICAgICAgaWYgKCplbnRyeSA9PSBsaW5rSGFzaCkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBpZiAoIWspCi0gICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhh
c2goaCk7Ci0gICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7Ci0gICAgfQotCi0gICAgKmVu
dHJ5ID0gbGlua0hhc2g7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmlzaXRlZExpbmtU
YWJsZTo6aXNMaW5rVmlzaXRlZChMaW5rSGFzaCBsaW5rSGFzaCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fc2hhcmVkTWVtb3J5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgayA9IDA7
Ci0gICAgTGlua0hhc2gqIHRhYmxlID0gbV90YWJsZTsKLSAgICBpbnQgc2l6ZU1hc2sgPSBtX3Rh
YmxlU2l6ZU1hc2s7Ci0gICAgdW5zaWduZWQgaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsaW5r
SGFzaCk7Ci0gICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7Ci0gICAgCi0gICAgTGlua0hhc2gqIGVu
dHJ5OwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOwotCi0gICAg
ICAgIC8vIENoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgdGFibGUuCi0gICAg
ICAgIGlmICghKmVudHJ5KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoKmVudHJ5ID09IGxpbmtIYXNoKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IAotICAgICAgICBpZiAoIWspCi0gICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0g
ICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFZpc2l0ZWRMaW5rVGFibGU6OmNsZWFyKCkKLXsKLSAgICBtX3RhYmxlU2l6
ZSA9IDA7Ci0gICAgbV90YWJsZVNpemVNYXNrID0gMDsKLSAgICBtX3NoYXJlZE1lbW9yeSA9IG51
bGxwdHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvVmlzaXRlZExpbmtUYWJsZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvVmlz
aXRlZExpbmtUYWJsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDkxMjY3NTgx
NTRjMTg5NDlkNDVkMjg1MGEzMWIxY2ZlOTRlYzJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Zpc2l0ZWRMaW5rVGFi
bGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFZpc2l0ZWRMaW5rVGFibGVfaAotI2RlZmluZSBWaXNpdGVkTGlua1RhYmxlX2gKLQotI2luY2x1
ZGUgPFdlYkNvcmUvTGlua0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBTaGFyZWRNZW1vcnk7Ci0KLWNsYXNzIFZpc2l0ZWRMaW5r
VGFibGUgewotcHVibGljOgotICAgIFZpc2l0ZWRMaW5rVGFibGUoKTsKLSAgICB+VmlzaXRlZExp
bmtUYWJsZSgpOwotCi0gICAgdm9pZCBzZXRTaGFyZWRNZW1vcnkoUmVmPFNoYXJlZE1lbW9yeT4m
Jik7Ci0KLSAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBVSSBwcm9j
ZXNzLgotICAgIGJvb2wgYWRkTGlua0hhc2goV2ViQ29yZTo6TGlua0hhc2gpOwotCi0gICAgYm9v
bCBpc0xpbmtWaXNpdGVkKFdlYkNvcmU6OkxpbmtIYXNoKSBjb25zdDsKLQotICAgIFNoYXJlZE1l
bW9yeSogc2hhcmVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRNZW1vcnkuZ2V0KCk7
IH0KLSAgICB2b2lkIGNsZWFyKCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9y
eT4gbV9zaGFyZWRNZW1vcnk7Ci0KLSAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZTsKLSAgICB1bnNp
Z25lZCBtX3RhYmxlU2l6ZU1hc2s7Ci0gICAgV2ViQ29yZTo6TGlua0hhc2gqIG1fdGFibGU7Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBWaXNpdGVkTGlua1RhYmxlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4IDc4MzM4ZWQ2NTc4Y2RjZWMxZWUwY2Ux
MzQ0MzgyZWI0OTc2MDYyNTkuLjM0NDhlNmJlMmYyZDg4ZjhkMTE2M2JlMDdhYjg2MzdjMThkYTg0
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApAQCAt
MzE1LDcgKzMxNSw3IEBAIHZvaWQgV0tDb250ZXh0QWRkVmlzaXRlZExpbmsoV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIHZpc2l0ZWRVUkwpCiAgICAgaWYgKHZpc2l0ZWRVUkxT
dHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0b0ltcGwoY29udGV4dFJl
ZiktPnZpc2l0ZWRMaW5rU3RvcmUoKS5hZGRWaXNpdGVkTGlua0hhc2godmlzaXRlZExpbmtIYXNo
KHZpc2l0ZWRVUkxTdHJpbmcpKTsKKyAgICB0b0ltcGwoY29udGV4dFJlZiktPnZpc2l0ZWRMaW5r
U3RvcmUoKS5hZGRWaXNpdGVkTGlua0hhc2goY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2godmlzaXRl
ZFVSTFN0cmluZykpOwogfQogCiB2b2lkIFdLQ29udGV4dENsZWFyVmlzaXRlZExpbmtzKFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1Zpc2l0ZWRMaW5rU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVmlzaXRlZExpbmtTdG9yZS5tbQppbmRleCBjNTZmMDJjMGU4NmJlMTgw
OGIxYWIwM2UxZmVkNzk0NTdiODRlZDAxLi5mYWRmODA4MGQwMDY2YWRjYWVmOWRmMGZjYWI1OTM0
MGZiYTcxZGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVmlzaXRlZExpbmtTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVmlzaXRlZExpbmtTdG9yZS5tbQpAQCAtMjksNyArMjksNyBAQAogI2lmIFdLX0FQ
SV9FTkFCTEVECiAKICNpbXBvcnQgIlZpc2l0ZWRMaW5rU3RvcmUuaCIKLSNpbXBvcnQgPFdlYkNv
cmUvTGlua0hhc2guaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkU3RyaW5nSGFzaC5oPgogCiBA
aW1wbGVtZW50YXRpb24gX1dLVmlzaXRlZExpbmtTdG9yZQogCkBAIC01Miw3ICs1Miw3IEBAIC0g
KHZvaWQpZGVhbGxvYwogCiAtICh2b2lkKWFkZFZpc2l0ZWRMaW5rV2l0aFVSTDooTlNVUkwgKilV
UkwKIHsKLSAgICBhdXRvIGxpbmtIYXNoID0gV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoKFVSTC5h
YnNvbHV0ZVN0cmluZyk7CisgICAgYXV0byBsaW5rSGFzaCA9IFdlYkNvcmU6OmNvbXB1dGVTaGFy
ZWRTdHJpbmdIYXNoKFVSTC5hYnNvbHV0ZVN0cmluZyk7CiAKICAgICBfdmlzaXRlZExpbmtTdG9y
ZS0+YWRkVmlzaXRlZExpbmtIYXNoKGxpbmtIYXNoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHAKaW5kZXggYmQwMDJjMDZmNjQxMTJkYmQ1OTA2Y2E3
MDRjYzZlYjMxNzk5MjczNi4uMWZkZDFiNTA2YTM3YTllOWE2Y2MwODIzYjIzZWUyMmI2OTg3MDVj
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
OSArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3Rv
cmUuaCIKIAotI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5r
U3RvcmVNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKICNpbmNsdWRl
ICJWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKQEAgLTM4LDggKzM2
LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1z
dGF0aWMgY29uc3QgaW50IHZpc2l0ZWRMaW5rVGFibGVNYXhMb2FkID0gMjsKLQogUmVmPFZpc2l0
ZWRMaW5rU3RvcmU+IFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpCiB7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVmlzaXRlZExpbmtTdG9yZSk7CkBAIC01NCw5ICs1MCw3IEBAIFZpc2l0ZWRM
aW5rU3RvcmU6On5WaXNpdGVkTGlua1N0b3JlKCkKIH0KIAogVmlzaXRlZExpbmtTdG9yZTo6Vmlz
aXRlZExpbmtTdG9yZSgpCi0gICAgOiBtX2tleUNvdW50KDApCi0gICAgLCBtX3RhYmxlU2l6ZSgw
KQotICAgICwgbV9wZW5kaW5nVmlzaXRlZExpbmtzVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlz
LCAmVmlzaXRlZExpbmtTdG9yZTo6cGVuZGluZ1Zpc2l0ZWRMaW5rc1RpbWVyRmlyZWQpCisgICAg
OiBtX2xpbmtIYXNoU3RvcmUoKnRoaXMpCiB7CiB9CiAKQEAgLTY5LDEyICs2MywxMCBAQCB2b2lk
IFZpc2l0ZWRMaW5rU3RvcmU6OmFkZFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQog
CiAgICAgcHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rU3Rv
cmU6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgaWRlbnRpZmllcigpLCAqdGhpcyk7CiAKLSAgICBp
ZiAoIW1fa2V5Q291bnQpCisgICAgaWYgKG1fbGlua0hhc2hTdG9yZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3RhYmxlLnNoYXJlZE1lbW9yeSgpKTsKLQotICAg
IHNlbmRUYWJsZShwcm9jZXNzKTsKKyAgICBzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MocHJvY2Vz
cyk7CiB9CiAKIHZvaWQgVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlUHJvY2VzcyhXZWJQcm9jZXNz
UHJveHkmIHByb2Nlc3MpCkBAIC04NSwyMSArNzcsMTQgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3Jl
OjpyZW1vdmVQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBwcm9jZXNzLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlzaXRlZExpbmtTdG9yZTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBpZGVudGlmaWVyKCkpOwogfQogCi12b2lkIFZpc2l0ZWRMaW5rU3RvcmU6
OmFkZFZpc2l0ZWRMaW5rSGFzaChMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQgVmlzaXRlZExpbmtT
dG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoKFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCiB7Ci0g
ICAgbV9wZW5kaW5nVmlzaXRlZExpbmtzLmFkZChsaW5rSGFzaCk7Ci0KLSAgICBpZiAoIW1fcGVu
ZGluZ1Zpc2l0ZWRMaW5rc1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fcGVuZGluZ1Zpc2l0
ZWRMaW5rc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworICAgIG1fbGlua0hhc2hTdG9yZS5hZGQo
bGlua0hhc2gpOwogfQogCiB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZUFsbCgpCiB7Ci0g
ICAgbV9wZW5kaW5nVmlzaXRlZExpbmtzVGltZXIuc3RvcCgpOwotICAgIG1fcGVuZGluZ1Zpc2l0
ZWRMaW5rcy5jbGVhcigpOwotICAgIG1fa2V5Q291bnQgPSAwOwotICAgIG1fdGFibGVTaXplID0g
MDsKLSAgICBtX3RhYmxlLmNsZWFyKCk7CisgICAgbV9saW5rSGFzaFN0b3JlLmNsZWFyKCk7CiAK
ICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7CiAgICAg
ICAgIEFTU0VSVChwcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRhaW5zKHBy
b2Nlc3MpKTsKQEAgLTExNyw5ICsxMDIsOSBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OndlYlBy
b2Nlc3NEaWRDbG9zZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgSVBDOjpDb25uZQogICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlz
aXRlZExpbmtIYXNoRnJvbVBhZ2UodWludDY0X3QgcGFnZUlELCBMaW5rSGFzaCBsaW5rSGFzaCkK
K3ZvaWQgVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2UodWludDY0
X3QgcGFnZUlELCBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQogewotICAgIGlmIChXZWJQYWdl
UHJveHkqIHdlYlBhZ2VQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShwYWdlSUQpKSB7
CisgICAgaWYgKGF1dG8qIHdlYlBhZ2VQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShw
YWdlSUQpKSB7CiAgICAgICAgIGlmICghd2ViUGFnZVByb3h5LT5hZGRzVmlzaXRlZExpbmtzKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTI3LDEyNSArMTEyLDM1IEBAIHZvaWQg
VmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2UodWludDY0X3QgcGFn
ZUlELCBMaW5rSGFzaCBsaW5rCiAgICAgYWRkVmlzaXRlZExpbmtIYXNoKGxpbmtIYXNoKTsKIH0K
IAotc3RhdGljIHVuc2lnbmVkIG5leHRQb3dlck9mMih1bnNpZ25lZCB2KQordm9pZCBWaXNpdGVk
TGlua1N0b3JlOjpzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9j
ZXNzKQogewotICAgIC8vIFRha2VuIGZyb20gaHR0cDovL3d3dy5jcy51dGsuZWR1L352b3NlL2Mt
c3R1ZmYvYml0aGFja3MuaHRtbAotICAgIC8vIERldmlzZWQgYnkgU2VhbiBBbmRlcnNvbiwgU2Vw
ZW1iZXIgMTQsIDIwMDEKLSAgICAKLSAgICB2LS07Ci0gICAgdiB8PSB2ID4+IDE7Ci0gICAgdiB8
PSB2ID4+IDI7Ci0gICAgdiB8PSB2ID4+IDQ7Ci0gICAgdiB8PSB2ID4+IDg7Ci0gICAgdiB8PSB2
ID4+IDE2OwotICAgIHYrKzsKLSAgICAKLSAgICByZXR1cm4gdjsKKyAgICBBU1NFUlQocHJvY2Vz
cy5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRhaW5zKCZwcm9jZXNzKSk7CisKKyAgICBT
aGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFtX2xpbmtIYXNoU3RvcmUuY3Jl
YXRlU2hhcmVkTWVtb3J5SGFuZGxlKGhhbmRsZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHBy
b2Nlc3Muc2VuZChNZXNzYWdlczo6VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OlNldFZpc2l0
ZWRMaW5rVGFibGUoaGFuZGxlKSwgaWRlbnRpZmllcigpKTsKIH0KIAotc3RhdGljIHVuc2lnbmVk
IHRhYmxlU2l6ZUZvcktleUNvdW50KHVuc2lnbmVkIGtleUNvdW50KQordm9pZCBWaXNpdGVkTGlu
a1N0b3JlOjpkaWRJbnZhbGlkYXRlU2hhcmVkTWVtb3J5KCkKIHsKLSAgICAvLyBXZSB3YW50IHRo
ZSB0YWJsZSB0byBiZSBhdCBsZWFzdCBoYWxmIGVtcHR5LgotICAgIHVuc2lnbmVkIHRhYmxlU2l6
ZSA9IG5leHRQb3dlck9mMihrZXlDb3VudCAqIHZpc2l0ZWRMaW5rVGFibGVNYXhMb2FkKTsKLQot
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZSB0YWJsZSBzaXplIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9m
IGEgcGFnZS4KLSAgICBzaXplX3QgbWluaW11bVRhYmxlU2l6ZSA9IFNoYXJlZE1lbW9yeTo6c3lz
dGVtUGFnZVNpemUoKSAvIHNpemVvZihMaW5rSGFzaCk7Ci0gICAgaWYgKHRhYmxlU2l6ZSA8IG1p
bmltdW1UYWJsZVNpemUpCi0gICAgICAgIHJldHVybiBtaW5pbXVtVGFibGVTaXplOwotICAgIAot
ICAgIHJldHVybiB0YWJsZVNpemU7CisgICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3Mg
OiBtX3Byb2Nlc3NlcykKKyAgICAgICAgc2VuZFN0b3JlSGFuZGxlVG9Qcm9jZXNzKCpwcm9jZXNz
KTsKIH0KIAotdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpwZW5kaW5nVmlzaXRlZExpbmtzVGltZXJG
aXJlZCgpCit2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OmRpZEFkZFNoYXJlZFN0cmluZ0hhc2hlcyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaD4mIGxpbmtIYXNoZXMpCiB7Ci0g
ICAgdW5zaWduZWQgY3VycmVudFRhYmxlU2l6ZSA9IG1fdGFibGVTaXplOwotICAgIHVuc2lnbmVk
IG5ld1RhYmxlU2l6ZSA9IHRhYmxlU2l6ZUZvcktleUNvdW50KG1fa2V5Q291bnQgKyBtX3BlbmRp
bmdWaXNpdGVkTGlua3Muc2l6ZSgpKTsKLQotICAgIG5ld1RhYmxlU2l6ZSA9IHN0ZDo6bWF4KGN1
cnJlbnRUYWJsZVNpemUsIG5ld1RhYmxlU2l6ZSk7Ci0KLSAgICBpZiAoY3VycmVudFRhYmxlU2l6
ZSAhPSBuZXdUYWJsZVNpemUpIHsKLSAgICAgICAgcmVzaXplVGFibGUobmV3VGFibGVTaXplKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxXZWJDb3JlOjpMaW5rSGFzaD4g
YWRkZWRWaXNpdGVkTGlua3M7Ci0KLSAgICBmb3IgKGF1dG8mIGxpbmtIYXNoIDogbV9wZW5kaW5n
VmlzaXRlZExpbmtzKSB7Ci0gICAgICAgIGlmIChtX3RhYmxlLmFkZExpbmtIYXNoKGxpbmtIYXNo
KSkgewotICAgICAgICAgICAgYWRkZWRWaXNpdGVkTGlua3MuYXBwZW5kKGxpbmtIYXNoKTsKLSAg
ICAgICAgICAgICsrbV9rZXlDb3VudDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fcGVuZGlu
Z1Zpc2l0ZWRMaW5rcy5jbGVhcigpOwotCi0gICAgaWYgKGFkZGVkVmlzaXRlZExpbmtzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghbGlua0hhc2hlcy5pc0VtcHR5KCkp
OwogCiAgICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3Nlcykgewog
ICAgICAgICBBU1NFUlQocHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5wcm9jZXNzZXMoKS5jb250YWlu
cyhwcm9jZXNzKSk7CiAKLSAgICAgICAgaWYgKGFkZGVkVmlzaXRlZExpbmtzLnNpemUoKSA+IDIw
KQorICAgICAgICBpZiAobGlua0hhc2hlcy5zaXplKCkgPiAyMCkKICAgICAgICAgICAgIHByb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpBbGxWaXNpdGVk
TGlua1N0YXRlQ2hhbmdlZCgpLCBpZGVudGlmaWVyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6
VmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoYWRkZWRWaXNpdGVkTGlua3MpLCBpZGVudGlmaWVyKCkp
OwotICAgIH0KLX0KLQotdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpyZXNpemVUYWJsZSh1bnNpZ25l
ZCBuZXdUYWJsZVNpemUpCi17Ci0gICAgYXV0byBuZXdUYWJsZU1lbW9yeSA9IFNoYXJlZE1lbW9y
eTo6YWxsb2NhdGUobmV3VGFibGVTaXplICogc2l6ZW9mKExpbmtIYXNoKSk7Ci0KLSAgICBpZiAo
IW5ld1RhYmxlTWVtb3J5KSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFsbG9jYXRl
IHNoYXJlZCBtZW1vcnkgZm9yIHZpc2l0ZWQgbGluayB0YWJsZSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbWVtc2V0KG5ld1RhYmxlTWVtb3J5LT5kYXRhKCksIDAsIG5ld1RhYmxl
TWVtb3J5LT5zaXplKCkpOwotCi0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gY3VycmVudFRhYmxl
TWVtb3J5ID0gbV90YWJsZS5zaGFyZWRNZW1vcnkoKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50VGFi
bGVTaXplID0gbV90YWJsZVNpemU7Ci0KLSAgICBtX3RhYmxlLnNldFNoYXJlZE1lbW9yeShuZXdU
YWJsZU1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBtX3RhYmxlU2l6ZSA9IG5ld1RhYmxl
U2l6ZTsKLQotICAgIGlmIChjdXJyZW50VGFibGVNZW1vcnkpIHsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChjdXJyZW50VGFibGVTaXplLCBjdXJyZW50VGFibGVNZW1vcnktPnNpemUoKSA9PSBjdXJy
ZW50VGFibGVTaXplICogc2l6ZW9mKExpbmtIYXNoKSk7Ci0KLSAgICAgICAgLy8gR28gdGhyb3Vn
aCB0aGUgY3VycmVudCBoYXNoIHRhYmxlIGFuZCByZS1hZGQgYWxsIGVudHJpZXMgdG8gdGhlIG5l
dyBoYXNoIHRhYmxlLgotICAgICAgICBjb25zdCBMaW5rSGFzaCogY3VycmVudExpbmtIYXNoZXMg
PSBzdGF0aWNfY2FzdDxjb25zdCBMaW5rSGFzaCo+KGN1cnJlbnRUYWJsZU1lbW9yeS0+ZGF0YSgp
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGN1cnJlbnRUYWJsZVNpemU7ICsr
aSkgewotICAgICAgICAgICAgTGlua0hhc2ggbGlua0hhc2ggPSBjdXJyZW50TGlua0hhc2hlc1tp
XTsKLQotICAgICAgICAgICAgaWYgKCFsaW5rSGFzaCkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgYm9vbCBkaWRBZGRMaW5rSGFzaCA9IG1fdGFibGUuYWRkTGlua0hh
c2gobGlua0hhc2gpOwotCi0gICAgICAgICAgICAvLyBJdCBzaG91bGQgYWx3YXlzIGJlIHBvc3Np
YmxlIHRvIGFkZCB0aGUgbGluayBoYXNoIHRvIGEgbmV3IHRhYmxlLgotICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChkaWRBZGRMaW5rSGFzaCwgZGlkQWRkTGlua0hhc2gpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgZm9yIChhdXRvJiBsaW5rSGFzaCA6IG1fcGVuZGluZ1Zpc2l0ZWRMaW5rcykg
ewotICAgICAgICBpZiAobV90YWJsZS5hZGRMaW5rSGFzaChsaW5rSGFzaCkpCi0gICAgICAgICAg
ICBtX2tleUNvdW50Kys7CisgICAgICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpWaXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlcjo6VmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQobGlua0hhc2hl
cyksIGlkZW50aWZpZXIoKSk7CiAgICAgfQotICAgIG1fcGVuZGluZ1Zpc2l0ZWRMaW5rcy5jbGVh
cigpOwotCi0gICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykK
LSAgICAgICAgc2VuZFRhYmxlKCpwcm9jZXNzKTsKLX0KLQotdm9pZCBWaXNpdGVkTGlua1N0b3Jl
OjpzZW5kVGFibGUoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQotewotICAgIEFTU0VSVChwcm9j
ZXNzLnByb2Nlc3NQb29sKCkucHJvY2Vzc2VzKCkuY29udGFpbnMoJnByb2Nlc3MpKTsKLQotICAg
IFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIW1fdGFibGUuc2hhcmVkTWVt
b3J5KCktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVh
ZE9ubHkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNzLnNlbmQoTWVzc2FnZXM6OlZp
c2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpTZXRWaXNpdGVkTGlua1RhYmxlKGhhbmRsZSksIGlk
ZW50aWZpZXIoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5oCmluZGV4IDVjNmFkOGRkMmY2ZWQxZmFlMzU4NmEx
ZTFjZDBlNDMyNzJmNWVkYmUuLjcyOGNkYzk5MGIxOTEyZGJlYzA5MWY5ZjhiNTQwMjBjNjcwMjAy
ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMjcg
KzIzLDI0IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lm
bmRlZiBWaXNpdGVkTGlua1N0b3JlX2gKLSNkZWZpbmUgVmlzaXRlZExpbmtTdG9yZV9oCisjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNl
aXZlci5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKKyNpbmNsdWRlICJTaGFyZWRT
dHJpbmdIYXNoU3RvcmUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzTGlmZXRpbWVPYnNlcnZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTGlua0hhc2gu
aD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL0lkZW50aWZpZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBX
ZWJQYWdlUHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUHJveHk7CiAgICAgCi1jbGFzcyBWaXNpdGVk
TGlua1N0b3JlIGZpbmFsIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlw
ZTo6VmlzaXRlZExpbmtTdG9yZT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1Ymxp
YyBXZWJQcm9jZXNzTGlmZXRpbWVPYnNlcnZlciwgcHVibGljIElkZW50aWZpZWQ8VmlzaXRlZExp
bmtTdG9yZT4gIHsKK2NsYXNzIFZpc2l0ZWRMaW5rU3RvcmUgZmluYWwgOiBwdWJsaWMgQVBJOjpP
YmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpWaXNpdGVkTGlua1N0b3JlPiwgcHJpdmF0ZSBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlciwgcHVibGljIFdlYlByb2Nlc3NMaWZldGltZU9ic2VydmVyLCBw
dWJsaWMgSWRlbnRpZmllZDxWaXNpdGVkTGlua1N0b3JlPiwgcHJpdmF0ZSBTaGFyZWRTdHJpbmdI
YXNoU3RvcmU6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxWaXNpdGVkTGlua1N0
b3JlPiBjcmVhdGUoKTsKIApAQCAtNTMsMzQgKzUwLDI3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
ZFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Jik7CiAgICAgdm9pZCByZW1vdmVQcm9jZXNzKFdlYlBy
b2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBhZGRWaXNpdGVkTGlua0hhc2goV2ViQ29yZTo6TGlu
a0hhc2gpOworICAgIHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoKFdlYkNvcmU6OlNoYXJlZFN0cmlu
Z0hhc2gpOwogICAgIHZvaWQgcmVtb3ZlQWxsKCk7CiAKIHByaXZhdGU6CiAgICAgLy8gSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAKICAgICAvLyBXZWJQcm9j
ZXNzTGlmZXRpbWVPYnNlcnZlcgotICAgIHZvaWQgd2ViUHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlv
bihXZWJQcm9jZXNzUHJveHkmLCBJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2b2lk
IHdlYlByb2Nlc3NEaWRDbG9zZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgSVBDOjpDb25u
ZWN0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB3ZWJQcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9u
KFdlYlByb2Nlc3NQcm94eSYsIElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOworICAgIHZvaWQgd2Vi
UHJvY2Vzc0RpZENsb3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBJUEM6OkNvbm5lY3Rp
b24mKSBmaW5hbDsKIAotICAgIHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2UodWludDY0
X3QgcGFnZUlELCBXZWJDb3JlOjpMaW5rSGFzaCk7CisgICAgLy8gU2hhcmVkU3RyaW5nSGFzaFN0
b3JlOjpDbGllbnQKKyAgICB2b2lkIGRpZEludmFsaWRhdGVTaGFyZWRNZW1vcnkoKSBmaW5hbDsK
KyAgICB2b2lkIGRpZEFkZFNoYXJlZFN0cmluZ0hhc2hlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6
U2hhcmVkU3RyaW5nSGFzaD4mKSBmaW5hbDsKIAotICAgIHZvaWQgcGVuZGluZ1Zpc2l0ZWRMaW5r
c1RpbWVyRmlyZWQoKTsKKyAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rSGFzaEZyb21QYWdlKHVpbnQ2
NF90IHBhZ2VJRCwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCk7CiAKLSAgICB2b2lkIHJlc2l6
ZVRhYmxlKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSk7Ci0gICAgdm9pZCBzZW5kVGFibGUoV2ViUHJv
Y2Vzc1Byb3h5Jik7CisgICAgdm9pZCBzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MoV2ViUHJvY2Vz
c1Byb3h5Jik7CiAKICAgICBIYXNoU2V0PFdlYlByb2Nlc3NQcm94eSo+IG1fcHJvY2Vzc2VzOwot
Ci0gICAgdW5zaWduZWQgbV9rZXlDb3VudDsKLSAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZTsKLSAg
ICBWaXNpdGVkTGlua1RhYmxlIG1fdGFibGU7Ci0KLSAgICBIYXNoU2V0PFdlYkNvcmU6OkxpbmtI
YXNoLCBXZWJDb3JlOjpMaW5rSGFzaEhhc2g+IG1fcGVuZGluZ1Zpc2l0ZWRMaW5rczsKLSAgICBS
dW5Mb29wOjpUaW1lcjxWaXNpdGVkTGlua1N0b3JlPiBtX3BlbmRpbmdWaXNpdGVkTGlua3NUaW1l
cjsKKyAgICBTaGFyZWRTdHJpbmdIYXNoU3RvcmUgbV9saW5rSGFzaFN0b3JlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBWaXNpdGVkTGlua1N0b3JlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCBhY2I5ZDU2MjVlYWI3
OTRiZTVjZWQ2MWQ3ZWJjMzhhMmM1MjM1NWI3Li44MjUxMDQ5ZDY4Y2M5MDg1ZGQ5NTk0MDAxNmEx
MWUxZDUwMGM4YTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwCkBAIC03Miw3ICs3Miw2IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2lu
Y2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9B
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTGlua0hhc2guaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0xvZ0luaXRpYWxpemF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VSTFBhcnNlci5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggZTE5ZjZkZjJhZjg2ZDVj
YTQ0NzBhZDZjODYxNDkxN2ExZmYyODA3YS4uOGYyZDhhZjlmMmJiNTUwNjdlMmJkOGNhNTkxYWI3
NTNkNzdjMGZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBA
IC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSAiV2ViQ29udGV4dENsaWVudC5oIgogI2luY2x1ZGUg
IldlYkNvbnRleHRDb25uZWN0aW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hh
cmVkU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCmluZGV4IGZhNWY3ZTUwMmZjZGI5NmIyOTcyMDEyYzcw
YmQxNzgzYTZmNjdlNmIuLmQ1MWYwYzIyZDg0MDBjNjEwYjdkNDBhZDVjYzNlOGVjODg0ZDdkZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCkBAIC0zOCw3ICsz
OCw3IEBACiAjaW5jbHVkZSAiVmlzaWJsZVdlYlBhZ2VDb3VudGVyLmgiCiAjaW5jbHVkZSAiV2Vi
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3Nh
Z2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U2hhcmVkU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxwYWwvU2Vz
c2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDYyYTRiNzIyYjZkNjMyZTIyZTQ5
OGRmYzZiNThlNGEwYWE0MTExNmYuLmMxZmQ4NmNlY2NkOWQ3ODIxNTZiYTkzYTYzNDM3ODVjNDBi
NjdkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTUzLDggKzE1Myw2IEBACiAJCTFBMEVDOTA3MTI0QzBBQjgwMDdFRjRBNSAvKiBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTBFQzkwNTEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwICovOyB9OwogCQkxQTBFQzkwRjEyNEMwQUY1MDA3RUY0QTUgLyogUGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBFQzkwRDEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2luUHJv
Y2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmggKi87IH07CiAJCTFBMEVDOTEwMTI0QzBBRjUwMDdFRjRB
NSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRUM5MEUxMjRDMEFGNTAwN0VGNEE1IC8q
IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAgKi87IH07Ci0JCTFBMEYyOUNCMTIw
QjM3MTYwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1RhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEYyOUM5MTIwQjM3MTYwMDUzRDFCOSAvKiBW
aXNpdGVkTGlua1RhYmxlLmNwcCAqLzsgfTsKLQkJMUEwRjI5Q0MxMjBCMzcxNjAwNTNEMUI5IC8q
IFZpc2l0ZWRMaW5rVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBMEYyOUNBMTIwQjM3MTYwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1RhYmxlLmgg
Ki87IH07CiAJCTFBMEYyOUUzMTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEYyOUUx
MTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmNwcCAqLzsgfTsKIAkJMUEwRjI5
RTQxMjBCNDQ0MjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rU3RvcmUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEYyOUUyMTIwQjQ0NDIwMDUzRDFCOSAv
KiBWaXNpdGVkTGlua1N0b3JlLmggKi87IH07CiAJCTFBMTRGOEUxMUQ3NEM4MzQwMDZDQkVDNiAv
KiBGcmFtZUluZm9EYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBMTRGOERGMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9EYXRhLmNwcCAq
LzsgfTsKQEAgLTEzNTYsNiArMTM1NCwxMCBAQAogCQk4MzA0OEFFNjFBQ0E0NURDMDA4MkM4MzIg
LyogUHJvY2Vzc1Rocm90dGxlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODMwNDhBRTUxQUNBNDVEQzAwODJDODMyIC8qIFByb2Nlc3NUaHJv
dHRsZXJDbGllbnQuaCAqLzsgfTsKIAkJODMxMDQyOEIxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdv
cmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MzEwNDI4OTFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hl
U3VicmVzb3VyY2VzRW50cnkuaCAqLzsgfTsKIAkJODMxMDQyOEMxQkQ2QjY2RjAwQTcxNUU0IC8q
IE5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMTA0MjhBMUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3
b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAgKi87IH07CisJCTgzMTNGN0VCMUY3REFFMDgw
MEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMxM0Y3RUExRjdEQUUwNDAwQjk0NEVCIC8qIFNo
YXJlZFN0cmluZ0hhc2hTdG9yZS5jcHAgKi87IH07CisJCTgzMTNGN0VDMUY3REFFMDgwMEI5NDRF
QiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgzMTNGN0U5MUY3REFFMDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJp
bmdIYXNoU3RvcmUuaCAqLzsgfTsKKwkJODMxM0Y3RUQxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJl
ZFN0cmluZ0hhc2hUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MzEzRjdFODFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRh
YmxlLmNwcCAqLzsgfTsKKwkJODMxM0Y3RUUxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmlu
Z0hhc2hUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODMxM0Y3RTcxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oICov
OyB9OwogCQk4MzFFRUJCRDFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRp
dmVMb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
MzFFRUJCQjFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmgg
Ki87IH07CiAJCTgzMUVFQkJFMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxh
dGl2ZUxvYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODMxRUVCQkMxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9h
ZC5jcHAgKi87IH07CiAJCTgzMkFFMjUyMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3JrQ2FjaGVT
cGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4MzJBRTI1MDFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3Bl
Y3VsYXRpdmVMb2FkTWFuYWdlci5oICovOyB9OwpAQCAtMjM2NSw4ICsyMzY3LDYgQEAKIAkJMUEw
RUM5MDUxMjRDMEFCODAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRUM5MEQxMjRDMEFGNTAwN0VG
NEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRUM5MEUxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkxQTBGMjlDOTEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRlZExp
bmtUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdGVk
TGlua1RhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwRjI5Q0ExMjBC
MzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRlZExpbmtUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQTBGMjlFMTEyMEI0NDQyMDA1M0QxQjkgLyogVmlzaXRlZExpbmtTdG9yZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdGVkTGlua1N0b3JlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRjI5RTIxMjBCNDQ0MjAwNTNEMUI5IC8q
IFZpc2l0ZWRMaW5rU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlz
aXRlZExpbmtTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTE0RjhERjFE
NzRDODM0MDA2Q0JFQzYgLyogRnJhbWVJbmZvRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGcmFtZUluZm9EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTM3MDcsNiArMzcwNywxMCBAQAogCQk4MzA0OEFFNTFBQ0E0NURDMDA4MkM4MzIg
LyogUHJvY2Vzc1Rocm90dGxlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTgzMTA0Mjg5MUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNF
bnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdWJy
ZXNvdXJjZXNFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzEwNDI4QTFC
RDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlU3VicmVzb3VyY2Vz
RW50cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzEzRjdFNzFGN0RBRTAz
MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4MzEzRjdFODFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRh
YmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZFN0cmlu
Z0hhc2hUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzMTNGN0U5MUY3
REFFMDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTgzMTNGN0VBMUY3REFFMDQwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdI
YXNoU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVk
U3RyaW5nSGFzaFN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMxRUVC
QkIxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMxRUVCQkMxQkQ4NUM0MzAwQkI2NEMz
IC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4MzJBRTI1MDFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29y
a0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC01MDIyLDYgKzUwMjYsMTAgQEAKIAkJCQkxQTY0MjBFMzEyRENF
MkZGMDBDQUFFMkMgLyogU2hhcmVhYmxlQml0bWFwLmggKi8sCiAJCQkJNTEyMTc0NUUxNjRDMjBF
MzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmNwcCAqLywKIAkJCQk1MTIxNzQ1RjE2NEMy
MEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuaCAqLywKKwkJCQk4MzEzRjdFQTFGN0RB
RTA0MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcCAqLywKKwkJCQk4MzEzRjdF
OTFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggKi8sCisJCQkJODMx
M0Y3RTgxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5jcHAgKi8sCisJ
CQkJODMxM0Y3RTcxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oICov
LAogCQkJCTUyNzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgKi8s
CiAJCQkJNTI3MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggKi8sCiAJ
CQkJMUE1RTREQTMxMkQzQkQzRDAwOTlBMkJCIC8qIFRleHRDaGVja2VyU3RhdGUuaCAqLywKQEAg
LTUwMzEsOCArNTAzOSw2IEBACiAJCQkJMUFDMTMzNjYxODU2NUI1NzAwRjNFQzA1IC8qIFVzZXJE
YXRhLmggKi8sCiAJCQkJMjY4NDA1NEExOEI4NjZGRjAwMjJDMzhCIC8qIFZpc2libGVDb250ZW50
UmVjdFVwZGF0ZUluZm8uY3BwICovLAogCQkJCTI2ODQwNTQyMThCODVBNjMwMDIyQzM4QiAvKiBW
aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLmggKi8sCi0JCQkJMUEwRjI5QzkxMjBCMzcxNjAw
NTNEMUI5IC8qIFZpc2l0ZWRMaW5rVGFibGUuY3BwICovLAotCQkJCTFBMEYyOUNBMTIwQjM3MTYw
MDUzRDFCOSAvKiBWaXNpdGVkTGlua1RhYmxlLmggKi8sCiAJCQkJNTE4RDJDQUIxMkQ1MTUzQjAw
M0JCOTNCIC8qIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwICovLAogCQkJCTUxOEQyQ0FDMTJE
NTE1M0IwMDNCQjkzQiAvKiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtLmggKi8sCiAJCQkJQkNGNTA3
MjYxMjQzMjlBQTAwNTk1NUFFIC8qIFdlYkNlcnRpZmljYXRlSW5mby5oICovLApAQCAtODc1OCw2
ICs4NzY0LDggQEAKIAkJCQk1MTIxNzQ2MTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVz
b3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjRCRUQ1MTIwODk0RDEwMEZCQjA1OSAvKiBT
aGFyZWRNZW1vcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUNENEI0RDlEMUU3NjVFMDAwMEQyNzA5
MiAvKiBTaGFyZWRSaW5nQnVmZmVyU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODMxM0Y3
RUMxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJODMxM0Y3RUUxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBRjA2RDYxOEJEMUE0NzAwODFDRUIxIC8qIFNtYXJ0
TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERTY5NDNFMThC
RDJBNjgwMDVDMTVFNSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTUyNzJCMjhCMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNz
RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODA2LDcgKzg4MTQsNiBAQAogCQkJCTJERDVBNzI5
MUVCRjA4RDUwMDlCQTU5NyAvKiBWaXNpYmxlV2ViUGFnZUNvdW50ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBMEYyOUU0MTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTYwMjI0RDE4QzE2QjlGMDBDM0U4QzkgLyogVmlzaXRlZExpbmtT
dG9yZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTBGMjlDQzEyMEIzNzE2MDA1M0Qx
QjkgLyogVmlzaXRlZExpbmtUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGNENFRjAxOEJD
NDgxODAwQkMyRDM0IC8qIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQThFN0QzRDE4QzE1MTQ5MDA1QTcwMkEgLyogVmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBOUJBRTExODRGRkFDNzAwM0I2
QkM2IC8qIFdlYWtPYmpDUHRyLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzQ0LDYgKzEwMzUxLDgg
QEAKIAkJCQk1MTIxNzQ2MDE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDQ1MEFFQzAxREMzRkFFNTAwOTk0M0YyIC8qIFNoYXJlZE1l
bW9yeUNvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENEI0RDlDMUU3NjVFMDAwMEQyNzA5
MiAvKiBTaGFyZWRSaW5nQnVmZmVyU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4MzEz
RjdFQjFGN0RBRTA4MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTgzMTNGN0VEMUY3REFFMDgwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNo
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBRjA2RDcxOEJEMUE0NzAwODFDRUIxIC8q
IFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkyREU2
OTQzRDE4QkQyQTY4MDA1QzE1RTUgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlck1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MjcyQjI4QTE0MDY5ODVEMDA5NkE1
RDAgLyogU3RhdGlzdGljc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDQwNSw3ICsxMDQx
NCw2IEBACiAJCQkJMjY4NDA1NEMxOEI4NkMzNTAwMjJDMzhCIC8qIFZpc2libGVDb250ZW50UmVj
dFVwZGF0ZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwRjI5RTMxMjBCNDQ0MjAwNTNE
MUI5IC8qIFZpc2l0ZWRMaW5rU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2MDIyNEMx
OEMxNkI5RjAwQzNFOEM5IC8qIFZpc2l0ZWRMaW5rU3RvcmVNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMUEwRjI5Q0IxMjBCMzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5r
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNENFRUYxOEJDNDgxODAwQkMyRDM0IC8q
IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEU3
RDNDMThDMTUxNDkwMDVBNzAyQSAvKiBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRURBMTJFMjE1MkNEMUFFMDBEOUUwOEQg
LyogV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtU
YWJsZUNvbnRyb2xsZXIuY3BwCmluZGV4IDZlOGIwNmRmYjhkM2Q1ZjBiY2Q1M2Q1MDg4MTk1ODRj
OGYzNzExMTUuLmVmNzEyODAyZjFiYWQzYTA1MGMwZWIyOTE2YjAwZmQwOGU1M2MxYWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAKQEAgLTcxLDE0ICs3MSwxNCBAQCBWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlcjo6flZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKCkKICAgICB2aXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlcnMoKS5yZW1vdmUobV9pZGVudGlmaWVyKTsKIH0KIAotYm9v
bCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6aXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hh
c2ggbGlua0hhc2gsIGNvbnN0IFVSTCYsIGNvbnN0IEF0b21pY1N0cmluZyYpCitib29sIFZpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVyOjppc0xpbmtWaXNpdGVkKFBhZ2UmLCBTaGFyZWRTdHJpbmdI
YXNoIGxpbmtIYXNoLCBjb25zdCBVUkwmLCBjb25zdCBBdG9taWNTdHJpbmcmKQogewotICAgIHJl
dHVybiBtX3Zpc2l0ZWRMaW5rVGFibGUuaXNMaW5rVmlzaXRlZChsaW5rSGFzaCk7CisgICAgcmV0
dXJuIG1fdmlzaXRlZExpbmtUYWJsZS5jb250YWlucyhsaW5rSGFzaCk7CiB9CiAKLXZvaWQgVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OmFkZFZpc2l0ZWRMaW5rKFBhZ2UmIHBhZ2UsIExpbmtI
YXNoIGxpbmtIYXNoKQordm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6YWRkVmlzaXRl
ZExpbmsoUGFnZSYgcGFnZSwgU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKLSAgICBpZiAo
bV92aXNpdGVkTGlua1RhYmxlLmlzTGlua1Zpc2l0ZWQobGlua0hhc2gpKQorICAgIGlmIChtX3Zp
c2l0ZWRMaW5rVGFibGUuY29udGFpbnMobGlua0hhc2gpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBXZWJQYWdlKiB3ZWJQYWdlID0gV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKCZwYWdlKTsKQEAgLTk5
LDcgKzk5LDcgQEAgdm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6c2V0VmlzaXRlZExp
bmtUYWJsZShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYKICAgICBpbnZhbGlkYXRlU3R5bGVz
Rm9yQWxsTGlua3MoKTsKIH0KIAotdm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6dmlz
aXRlZExpbmtTdGF0ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYgbGlu
a0hhc2hlcykKK3ZvaWQgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OnZpc2l0ZWRMaW5rU3Rh
dGVDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoPiYgbGlua0hh
c2hlcykKIHsKICAgICBmb3IgKGF1dG8gbGlua0hhc2ggOiBsaW5rSGFzaGVzKQogICAgICAgICBp
bnZhbGlkYXRlU3R5bGVzRm9yTGluayhsaW5rSGFzaCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIu
aAppbmRleCBkNmU4MmJmN2RlNTM0MGRhYmU1MThkODNhZTIxZmZlMzY4YTkxYWViLi43NDdlM2Q4
YmE3MzVlYmMwMmZhN2E1ZWExZjM1Yzg1NzRkYTBiNGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9s
bGVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgog
I2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIK
KyNpbmNsdWRlICJTaGFyZWRTdHJpbmdIYXNoVGFibGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Zp
c2l0ZWRMaW5rU3RvcmUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00MSwxOSArNDEsMTkg
QEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcih1aW50
NjRfdCBpZGVudGlmaWVyKTsKIAogICAgIC8vIFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RvcmUuCi0g
ICAgYm9vbCBpc0xpbmtWaXNpdGVkKFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpMaW5rSGFzaCwg
Y29uc3QgV2ViQ29yZTo6VVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0
ZVVSTCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwg
V2ViQ29yZTo6TGlua0hhc2gpIG92ZXJyaWRlOworICAgIGJvb2wgaXNMaW5rVmlzaXRlZChXZWJD
b3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJM
JiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVkU3Ry
aW5nSGFzaCkgb3ZlcnJpZGU7CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlci4KICAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92
ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRWaXNpdGVkTGlua1RhYmxlKGNvbnN0IFNoYXJlZE1lbW9y
eTo6SGFuZGxlJik7Ci0gICAgdm9pZCB2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6TGlua0hhc2g+Jik7CisgICAgdm9pZCB2aXNpdGVkTGlua1N0YXRlQ2hhbmdl
ZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaD4mKTsKICAgICB2b2lkIGFs
bFZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKCk7CiAgICAgdm9pZCByZW1vdmVBbGxWaXNpdGVkTGlu
a3MoKTsKIAogICAgIHVpbnQ2NF90IG1faWRlbnRpZmllcjsKLSAgICBWaXNpdGVkTGlua1RhYmxl
IG1fdmlzaXRlZExpbmtUYWJsZTsKKyAgICBTaGFyZWRTdHJpbmdIYXNoVGFibGUgbV92aXNpdGVk
TGlua1RhYmxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyLm1lc3NhZ2VzLmluCmluZGV4IDAzOWRkMzAyMjljMTAyZDdjNjhkZjZm
MDk4Nzk1ZDE0ZGFiNWFjOWUuLmY5MTY0NTNlNDBlNWQwNThkNTljYzU5Y2FjNTNlYzQxMDM4M2Iz
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLm1lc3NhZ2VzLmluCkBAIC0y
Miw3ICsyMiw3IEBACiAKIG1lc3NhZ2VzIC0+IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyIHsK
ICAgICBTZXRWaXNpdGVkTGlua1RhYmxlKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFu
ZGxlKQotICAgIFZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKFZlY3RvcjxXZWJDb3JlOjpMaW5rSGFz
aD4gbGlua0hhc2hlcykKKyAgICBWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZChWZWN0b3I8V2ViQ29y
ZTo6U2hhcmVkU3RyaW5nSGFzaD4gbGlua0hhc2hlcykKICAgICBBbGxWaXNpdGVkTGlua1N0YXRl
Q2hhbmdlZCgpCiAgICAgUmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUu
aCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5r
U3RvcmUuaAppbmRleCAxNjRmZWQxZjAwYTYxODlhNDc3NTE5ZWU5M2RkY2FiNTY4M2UxZmI1Li5h
ZWY0ZmM1MmFhZTQxMmYzZTZjNGVjZjQwMzk1YjQzZTg3Y2M5NDZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmgK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExp
bmtTdG9yZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYlZpc2l0ZWRMaW5rU3RvcmVf
aAogI2RlZmluZSBXZWJWaXNpdGVkTGlua1N0b3JlX2gKIAotI2ltcG9ydCA8V2ViQ29yZS9MaW5r
SGFzaC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRTdHJpbmdIYXNoLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1Zpc2l0ZWRMaW5rU3RvcmUuaD4KICNpbXBvcnQgPHd0Zi9SZWYuaD4KIApAQCAtNDQs
MTQgKzQ0LDE0IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViVmlzaXRlZExpbmtTdG9yZSgp
OwogCi0gICAgYm9vbCBpc0xpbmtWaXNpdGVkKFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpMaW5r
SGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQ
YWdlJiwgV2ViQ29yZTo6TGlua0hhc2gpIG92ZXJyaWRlOworICAgIGJvb2wgaXNMaW5rVmlzaXRl
ZChXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCwgY29uc3QgV2ViQ29y
ZTo6VVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hh
cmVkU3RyaW5nSGFzaCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtz
SWZOZWVkZWQoV2ViQ29yZTo6UGFnZSYpOwotICAgIHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoKFdl
YkNvcmU6OkxpbmtIYXNoKTsKKyAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rSGFzaChXZWJDb3JlOjpT
aGFyZWRTdHJpbmdIYXNoKTsKICAgICB2b2lkIHJlbW92ZVZpc2l0ZWRMaW5rSGFzaGVzKCk7CiAK
LSAgICBIYXNoU2V0PFdlYkNvcmU6OkxpbmtIYXNoLCBXZWJDb3JlOjpMaW5rSGFzaEhhc2g+IG1f
dmlzaXRlZExpbmtIYXNoZXM7CisgICAgSGFzaFNldDxXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNo
LCBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoSGFzaD4gbV92aXNpdGVkTGlua0hhc2hlczsKICAg
ICBib29sIG1fdmlzaXRlZExpbmtzUG9wdWxhdGVkOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3Rv
cmUubW0KaW5kZXggYTE1MjkzMzRiMzg2MGY2YjFlNzFkNDA5YTJmMzIwNjhmMmRjN2RmNC4uYjIy
MWQ5MzU1YjAzYWRhOGI2ZWM2NTE4ZjI5Y2ZmY2M4Y2M1ZTQxZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlu
a1N0b3JlLm1tCkBAIC04NCwxOSArODQsMTkgQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjph
ZGRWaXNpdGVkTGluayhOU1N0cmluZyAqdXJsU3RyaW5nKQogICAgIHNpemVfdCBsZW5ndGggPSB1
cmxTdHJpbmcubGVuZ3RoOwogCiAgICAgaWYgKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gQ0ZT
dHJpbmdHZXRDaGFyYWN0ZXJzUHRyKChfX2JyaWRnZSBDRlN0cmluZ1JlZil1cmxTdHJpbmcpKSB7
Ci0gICAgICAgIGFkZFZpc2l0ZWRMaW5rSGFzaCh2aXNpdGVkTGlua0hhc2goY2hhcmFjdGVycywg
bGVuZ3RoKSk7CisgICAgICAgIGFkZFZpc2l0ZWRMaW5rSGFzaChjb21wdXRlU2hhcmVkU3RyaW5n
SGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IFZlY3RvcjxVQ2hhciwgNTEyPiBidWZmZXIobGVuZ3RoKTsKICAgICBbdXJsU3RyaW5nIGdldENo
YXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07CiAKLSAgICBhZGRWaXNpdGVkTGlua0hhc2godmlzaXRl
ZExpbmtIYXNoKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCkpOworICAgIGFkZFZpc2l0ZWRMaW5rSGFz
aChjb21wdXRlU2hhcmVkU3RyaW5nSGFzaChidWZmZXIuZGF0YSgpLCBsZW5ndGgpKTsKIH0KIAog
dm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjpyZW1vdmVWaXNpdGVkTGluayhOU1N0cmluZyAqdXJs
U3RyaW5nKQogewotICAgIExpbmtIYXNoIGxpbmtIYXNoID0gdmlzaXRlZExpbmtIYXNoKHVybFN0
cmluZyk7CisgICAgYXV0byBsaW5rSGFzaCA9IGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoKHVybFN0
cmluZyk7CiAKICAgICBBU1NFUlQobV92aXNpdGVkTGlua0hhc2hlcy5jb250YWlucyhsaW5rSGFz
aCkpOwogICAgIG1fdmlzaXRlZExpbmtIYXNoZXMucmVtb3ZlKGxpbmtIYXNoKTsKQEAgLTEwNCwx
NCArMTA0LDE0IEBAIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlVmlzaXRlZExpbmso
TlNTdHJpbmcgKnVybFN0cmluZykKICAgICBpbnZhbGlkYXRlU3R5bGVzRm9yTGluayhsaW5rSGFz
aCk7CiB9CiAKLWJvb2wgV2ViVmlzaXRlZExpbmtTdG9yZTo6aXNMaW5rVmlzaXRlZChQYWdlJiBw
YWdlLCBMaW5rSGFzaCBsaW5rSGFzaCwgY29uc3QgVVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVVSTCkKK2Jvb2wgV2ViVmlzaXRlZExpbmtTdG9yZTo6aXNMaW5rVmlz
aXRlZChQYWdlJiBwYWdlLCBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoLCBjb25zdCBVUkwmIGJh
c2VVUkwsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQogewogICAgIHBvcHVsYXRl
VmlzaXRlZExpbmtzSWZOZWVkZWQocGFnZSk7CiAKICAgICByZXR1cm4gbV92aXNpdGVkTGlua0hh
c2hlcy5jb250YWlucyhsaW5rSGFzaCk7CiB9CiAKLXZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6
YWRkVmlzaXRlZExpbmsoUGFnZSYgc291cmNlUGFnZSwgTGlua0hhc2ggbGlua0hhc2gpCit2b2lk
IFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rKFBhZ2UmIHNvdXJjZVBhZ2UsIFNo
YXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCiB7CiAgICAgaWYgKCFzX3Nob3VsZFRyYWNrVmlzaXRl
ZExpbmtzKQogICAgICAgICByZXR1cm47CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBXZWJWaXNp
dGVkTGlua1N0b3JlOjpwb3B1bGF0ZVZpc2l0ZWRMaW5rc0lmTmVlZGVkKFBhZ2UmIHBhZ2UpCiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBXZWJWaXNpdGVkTGlua1N0
b3JlOjphZGRWaXNpdGVkTGlua0hhc2goTGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFdlYlZpc2l0
ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rSGFzaChTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNo
KQogewogICAgIEFTU0VSVChzX3Nob3VsZFRyYWNrVmlzaXRlZExpbmtzKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNp
dGVkTGlua1N0b3JlLmNwcAppbmRleCA2YjQzYzExMjFhYTU5ZjM3Yzk5Zjk2NzFmMmU3NTdmOTYz
M2M2NThiLi4yYTdhN2Q3ZTU3OGQ0NWNiNzNhNjM4YjI5OGRlZGE4NDZjNzkwNzM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlu
a1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJWaXNpdGVkTGlua1N0b3JlLmNwcApAQCAtNzUsMTcgKzc1LDE3IEBAIHZvaWQgV2ViVmlzaXRl
ZExpbmtTdG9yZTo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIAogdm9pZCBXZWJWaXNpdGVkTGlu
a1N0b3JlOjphZGRWaXNpdGVkTGluayhjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICBh
ZGRWaXNpdGVkTGlua0hhc2godmlzaXRlZExpbmtIYXNoKHVybFN0cmluZykpOworICAgIGFkZFZp
c2l0ZWRMaW5rSGFzaChjb21wdXRlU2hhcmVkU3RyaW5nSGFzaCh1cmxTdHJpbmcpKTsKIH0KIAot
Ym9vbCBXZWJWaXNpdGVkTGlua1N0b3JlOjppc0xpbmtWaXNpdGVkKFBhZ2UmIHBhZ2UsIExpbmtI
YXNoIGxpbmtIYXNoLCBjb25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0
cmlidXRlVVJMKQorYm9vbCBXZWJWaXNpdGVkTGlua1N0b3JlOjppc0xpbmtWaXNpdGVkKFBhZ2Um
IHBhZ2UsIFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gsIGNvbnN0IFVSTCYgYmFzZVVSTCwgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCiB7CiAgICAgcG9wdWxhdGVWaXNpdGVkTGlu
a3NJZk5lZWRlZChwYWdlKTsKIAogICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNvbnRh
aW5zKGxpbmtIYXNoKTsKIH0KIAotdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVk
TGluayhQYWdlJiwgTGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6
OmFkZFZpc2l0ZWRMaW5rKFBhZ2UmLCBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQogewogICAg
IGlmICghc19zaG91bGRUcmFja1Zpc2l0ZWRMaW5rcykKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3
LDcgKzExNyw3IEBAIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6cG9wdWxhdGVWaXNpdGVkTGlu
a3NJZk5lZWRlZChQYWdlJiBzb3VyY2VQYWdlKQogICAgIGhpc3RvcnktPmFkZFZpc2l0ZWRMaW5r
c1RvVmlzaXRlZExpbmtTdG9yZSgqdGhpcyk7CiB9CiAKLXZvaWQgV2ViVmlzaXRlZExpbmtTdG9y
ZTo6YWRkVmlzaXRlZExpbmtIYXNoKExpbmtIYXNoIGxpbmtIYXNoKQordm9pZCBXZWJWaXNpdGVk
TGlua1N0b3JlOjphZGRWaXNpdGVkTGlua0hhc2goU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkK
IHsKICAgICBBU1NFUlQoc19zaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyk7CiAgICAgbV92aXNpdGVk
TGlua0hhc2hlcy5hZGQobGlua0hhc2gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oIGIvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oCmluZGV4IGU5
ZTEyNDQ0NGY0NDcwOTRiYTk0NmNkN2I3Njc4ZjA5NWNmNGU0NDkuLjZhN2I5OTIyYzNhMzkxNTIy
YzNkYTA0N2U0YTA2OTczYjQwNGQxMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmgKQEAgLTI2
LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViVmlzaXRlZExpbmtTdG9yZV9oCiAjZGVmaW5lIFdlYlZp
c2l0ZWRMaW5rU3RvcmVfaAogCi0jaW5jbHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU2hhcmVkU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVmlzaXRl
ZExpbmtTdG9yZS5oPgogCiBjbGFzcyBXZWJWaXNpdGVkTGlua1N0b3JlIGZpbmFsIDogcHVibGlj
IFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RvcmUgewpAQCAtNDIsMTQgKzQyLDE0IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgV2ViVmlzaXRlZExpbmtTdG9yZSgpOwogCi0gICAgYm9vbCBpc0xpbmtW
aXNpdGVkKFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpMaW5rSGFzaCwgY29uc3QgV2ViQ29yZTo6
VVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6TGlua0hh
c2gpIG92ZXJyaWRlOworICAgIGJvb2wgaXNMaW5rVmlzaXRlZChXZWJDb3JlOjpQYWdlJiwgV2Vi
Q29yZTo6U2hhcmVkU3RyaW5nSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiBiYXNlVVJMLCBjb25z
dCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRWaXNp
dGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCkgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzSWZOZWVkZWQoV2ViQ29yZTo6UGFn
ZSYpOwotICAgIHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoKFdlYkNvcmU6OkxpbmtIYXNoKTsKKyAg
ICB2b2lkIGFkZFZpc2l0ZWRMaW5rSGFzaChXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoKTsKICAg
ICB2b2lkIHJlbW92ZVZpc2l0ZWRMaW5rSGFzaGVzKCk7CiAKLSAgICBIYXNoU2V0PFdlYkNvcmU6
OkxpbmtIYXNoLCBXZWJDb3JlOjpMaW5rSGFzaEhhc2g+IG1fdmlzaXRlZExpbmtIYXNoZXM7Cisg
ICAgSGFzaFNldDxXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoLCBXZWJDb3JlOjpTaGFyZWRTdHJp
bmdIYXNoSGFzaD4gbV92aXNpdGVkTGlua0hhc2hlczsKICAgICBib29sIG1fdmlzaXRlZExpbmtz
UG9wdWxhdGVkOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322137</attachid>
            <date>2017-09-28 16:10:25 -0700</date>
            <delta_ts>2017-09-28 16:22:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177575-20170928161025.patch</filename>
            <type>text/plain</type>
            <size>119545</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmJlZjZjOThjMjQ2YWVh
MDBlMmZhZDkwOGJmYjA2NzMxMDEzNjM4NC4uZjJmNGY1Y2MxOGY3ZGY5NTVkN2E4MGZhYTE4NjY3
ZGQxZWFlZTg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE3LTA5LTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgc29tZSBsb2dpYyBv
dXQgb2YgVmlzaXRlZExpbmtTdG9yZSBhbmQgbWFrZSBpdCByZXVzYWJsZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTc1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIExpbmtIYXNoIHRvIFNo
YXJlZFN0cmluZ0hhc2ggdG8gbWFrZSBpdCBtb3JlIHJldXNhYmxlLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKiBkb20vVmlzaXRl
ZExpbmtTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsaW5rSGFzaEZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yTGlu
ayk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3Rh
dGVTbG93Q2FzZSk6CisgICAgICAgICogZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9y
RWxlbWVudDo6dmlzaXRlZExpbmtIYXNoIGNvbnN0KToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlD
bGllbnRzLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkVmlzaXRlZExpbmspOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayk6CisgICAg
ICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RvcmU6OmludmFsaWRhdGVTdHlsZXNGb3JM
aW5rKToKKyAgICAgICAgKiBwYWdlL1Zpc2l0ZWRMaW5rU3RvcmUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9TaGFyZWRTdHJpbmdIYXNoLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xpbmtIYXNoLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Om5lZWRzVHJhaWxpbmdTbGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2hhcmVkU3RyaW5nSGFzaCk6CisgICAgICAgICogcGxh
dGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTGlua0hhc2guaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2hIYXNo
OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2hIYXNoOjplcXVhbCk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoSGFzaDo6YXZvaWREZWxldGVkVmFs
dWUpOgorCiAyMDE3LTA5LTI3ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+
CiAKICAgICAgICAgRGVmYXVsdCB0byB2b2lkKiBmb3IgcGxhdGZvcm0gd2lkZ2V0cwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpp
bmRleCAzMWNiYmExNDUzMTBiYTg2OGU2Njk4NmM4M2E0MDk4OGM3ZGVmZTlkLi4wNjYyOTk4OGJi
MTY2ZWY4ZTVhNjMxNzE0ZTk5ZWQyZWVkMzU4ZWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBA
CisyMDE3LTA5LTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAg
U3BsaXQgc29tZSBsb2dpYyBvdXQgb2YgVmlzaXRlZExpbmtTdG9yZSBhbmQgbWFrZSBpdCByZXVz
YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3
NTc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bs
aXQgc29tZSBsb2dpYyBvdXQgb2YgVmlzaXRlZExpbmtTdG9yZSBhbmQgbWFrZSBpdCByZXVzYWJs
ZSBmb3Igb3RoZXIgcHVycG9zZXMgdGhhbgorICAgICAgICB2aXNpdGVkIGxpbmtzIGFuZCBmcm9t
IG90aGVyIHByb2Nlc3NlcyB0aGFuIHRoZSBVSVByb2Nlc3MuCisKKyAgICAgICAgVGhlIHBsYW4g
aXMgdG8gcmV1c2UgdGhlIG5ldyBTaGFyZWRTdHJpbmdIYXNoU3RvcmUgZm9yIFNlcnZpY2UgV29y
a2VyIHJlZ2lzdHJhdGlvbgorICAgICAgICBvbiBTdG9yYWdlUHJvY2VzcyBzaWRlIGFuZCBxdWVy
eWluZyBvbiBXZWJDb250ZW50IHByb2Nlc3Mgc2lkZS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIFNoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6bmV4dFBvd2VyT2YyKToKKyAgICAgICAgKFdlYktpdDo6dGFibGVT
aXplRm9yS2V5Q291bnQpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRTdHJpbmdIYXNoU3RvcmU6
OlNoYXJlZFN0cmluZ0hhc2hTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hh
c2hTdG9yZTo6Y3JlYXRlU2hhcmVkTWVtb3J5SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVkU3RyaW5nSGFzaFN0b3JlOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRTdHJpbmdI
YXNoU3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFN0b3Jl
OjpyZXNpemVUYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6
cGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVyRmlyZWQpOgorICAgICAgICAqIFNoYXJlZC9T
aGFyZWRTdHJpbmdIYXNoU3RvcmUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaC4KKyAgICAgICAgKFdlYktp
dDo6U2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpDbGllbnQ6On5DbGllbnQpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWRTdHJpbmdIYXNoU3RvcmU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAqIFNo
YXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFibGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9TaGFyZWQvVmlzaXRlZExpbmtUYWJsZS5jcHAuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0
cmluZ0hhc2hUYWJsZTo6U2hhcmVkU3RyaW5nSGFzaFRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6
U2hhcmVkU3RyaW5nSGFzaFRhYmxlOjp+U2hhcmVkU3RyaW5nSGFzaFRhYmxlKToKKyAgICAgICAg
KFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFRhYmxlOjpzZXRTaGFyZWRNZW1vcnkpOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmFkZCk6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlZFN0cmluZ0hhc2hUYWJsZTo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmNsZWFyKToKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVk
U3RyaW5nSGFzaFRhYmxlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9WaXNp
dGVkTGlua1RhYmxlLmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6
CisgICAgICAgIChXS0NvbnRleHRBZGRWaXNpdGVkTGluayk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tWaXNpdGVkTGlua1N0b3JlLm1tOgorICAgICAgICAoLVtfV0tWaXNpdGVk
TGlua1N0b3JlIGFkZFZpc2l0ZWRMaW5rV2l0aFVSTDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
VmlzaXRlZExpbmtTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rU3RvcmU6
OlZpc2l0ZWRMaW5rU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpWaXNpdGVkTGlua1N0b3JlOjph
ZGRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6VmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRl
ZExpbmtIYXNoKToKKyAgICAgICAgKFdlYktpdDo6VmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlQWxs
KToKKyAgICAgICAgKFdlYktpdDo6VmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNo
RnJvbVBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpWaXNpdGVkTGlua1N0b3JlOjpzZW5kU3RvcmVI
YW5kbGVUb1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpWaXNpdGVkTGlua1N0b3JlOjpkaWRJ
bnZhbGlkYXRlU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6VmlzaXRlZExpbmtTdG9y
ZTo6ZGlkQWRkU2hhcmVkU3RyaW5nSGFzaGVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvVmlzaXRl
ZExpbmtTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVy
Ojppc0xpbmtWaXNpdGVkKToKKyAgICAgICAgKFdlYktpdDo6VmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXI6OmFkZFZpc2l0ZWRMaW5rKToKKyAgICAgICAgKFdlYktpdDo6VmlzaXRlZExpbmtUYWJs
ZUNvbnRyb2xsZXI6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIubWVzc2FnZXMuaW46CisK
IDIwMTctMDktMjYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBQYXNzIGEgY29tcGxldGlvbiBoYW5kbGVyIGluc3RlYWQgb2YgYSBXZWJGcmFt
ZVBvbGljeUxpc3RlbmVyUHJveHkgZHVyaW5nIHBvbGljeSBkZWNpc2lvbnMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwppbmRleCBjYzE0OGJiOTU1YzM3N2YwY2VkYjIxZjQ1ZWFhNjljMDE4ZWI0
YTBmLi5iOGZkNzZmZGY1MGJhMDg2MTAwMzZhNzI0YmJlNmJjMzkyNzRlMDhmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDktMjggIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBzb21lIGxvZ2ljIG91dCBv
ZiBWaXNpdGVkTGlua1N0b3JlIGFuZCBtYWtlIGl0IHJldXNhYmxlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc1NzUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpc2l0
ZWRMaW5rU3RvcmUuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0
b3JlLm1tOgorICAgICAgICAoV2ViVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmspOgor
ICAgICAgICAoV2ViVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlVmlzaXRlZExpbmspOgorICAgICAg
ICAoV2ViVmlzaXRlZExpbmtTdG9yZTo6aXNMaW5rVmlzaXRlZCk6CisgICAgICAgIChXZWJWaXNp
dGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGlua0hhc2gpOgorCiAyMDE3LTA5LTI3ICBKb25hdGhh
biBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXggZm9yIEhp
Z2ggU2llcnJhIDMyIGJpdCBNYWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA4ZGY1
ZDhjNTFlZWJiNDY3NzRhMTdjNTc1ZTI4N2E2ZTY4NGRiZGFmLi43Njc1OTg0MzhiODBkZGQ2ODhj
YTkyMDhjMWNmOGYxMTllYjdiODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTctMDktMjggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBTcGxpdCBzb21lIGxvZ2ljIG91dCBvZiBWaXNpdGVkTGlua1N0b3JlIGFuZCBt
YWtlIGl0IHJldXNhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzc1NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmspOgorICAgICAgICAoV2ViVmlz
aXRlZExpbmtTdG9yZTo6aXNMaW5rVmlzaXRlZCk6CisgICAgICAgIChXZWJWaXNpdGVkTGlua1N0
b3JlOjphZGRWaXNpdGVkTGlua0hhc2gpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZp
c2l0ZWRMaW5rU3RvcmUuaDoKKwogMjAxNy0wOS0yNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgUG9saWN5QWN0aW9uIGFuIGVuY29k
YWJsZSBlbnVtIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDk1NDQ3ZDZhODkzNWJmNDA5
YzBlNDE4YjZjY2U0MDM4ZDc3NzdjMTYuLjljZDBhYTExMTRjM2U4OGE4MGZiZTJmOTE1YTVjZTYw
ZDNmZTFiYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMzIzLDcgKzIzMjMsNiBAQCBzZXQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vTGVuZ3RoQm94LmNwcAogICAgIHBsYXRmb3Jt
L0xlbmd0aFBvaW50LmNwcAogICAgIHBsYXRmb3JtL0xlbmd0aFNpemUuY3BwCi0gICAgcGxhdGZv
cm0vTGlua0hhc2guY3BwCiAgICAgcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAKICAgICBw
bGF0Zm9ybS9Mb2dnaW5nLmNwcAogICAgIHBsYXRmb3JtL0xvd1Bvd2VyTW9kZU5vdGlmaWVyLmNw
cApAQCAtMjM0Niw2ICsyMzQ1LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAogICAgIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHAKICAgICBwbGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5jcHAKKyAgICBwbGF0Zm9y
bS9TaGFyZWRTdHJpbmdIYXNoLmNwcAogICAgIHBsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3Bw
CiAgICAgcGxhdGZvcm0vVGhlbWUuY3BwCiAgICAgcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA2ODEyN2Q0OTljNTYxNjgwN2EwMjkxNzk5ZTAwNjhlMjk5NWQ0Yzk0Li4wNjk1Mjc4
ZTgyY2E5M2JmMTBkYzcyNjkwYTk4OTA1OTQyZjgzZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNDk3LDYgKzM0OTcsOCBA
QAogCQk4MzQ4QkZBQjFCODU3Mjk4MDA5MTJGMzYgLyogQ2xhc3NDb2xsZWN0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNDhCRkE5MUI4NTcy
OTUwMDkxMkYzNiAvKiBDbGFzc0NvbGxlY3Rpb24uY3BwICovOyB9OwogCQk4MzQ4QkZBQzFCODU3
Mjk4MDA5MTJGMzYgLyogQ2xhc3NDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzQ4QkZBQTFCODU3Mjk1MDA5MTJGMzYgLyogQ2xhc3ND
b2xsZWN0aW9uLmggKi87IH07CiAJCTgzNERENEY0MUJFMDg5ODkwMDJDOUMzRSAvKiBQYWdlTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0REQ0
RjMxQkUwODk4OTAwMkM5QzNFIC8qIFBhZ2VNYWMubW0gKi87IH07CisJCTgzNERGQUNGMUY3REFF
NUQwMEMyNzI1QiAvKiBTaGFyZWRTdHJpbmdIYXNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNERGQUNFMUY3REFFNTcwMEMyNzI1QiAvKiBTaGFy
ZWRTdHJpbmdIYXNoLmNwcCAqLzsgfTsKKwkJODM0REZBRDAxRjdEQUU1RDAwQzI3MjVCIC8qIFNo
YXJlZFN0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDgzNERGQUNDMUY3REFFNTYwMEMyNzI1QiAvKiBTaGFyZWRTdHJpbmdIYXNoLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODM1MjBDN0Ux
QTcxQkZDQzAwNkJEMkFBIC8qIENTU0ZvbnRGYW1pbHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNTIwQzdEMUE3MUJGQ0MwMDZCRDJBQSAvKiBDU1NG
b250RmFtaWx5LmggKi87IH07CiAJCTgzNTY1N0M3MUVDQUIxMDcwMENERTcyRCAvKiBKU0RPTU1h
dHJpeEluaXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODM1NjU3QzYxRUNBQjBFODAwQ0RFNzJEIC8qIEpTRE9NTWF0cml4SW5pdC5jcHAgKi87IH07
CiAJCTgzNThDQjZGMUM1MzI3NzIwMEUwQzJEOCAvKiBKU1hNTERvY3VtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzRjU3MEFFMUM1MzI2OEUw
MDdGRDZDQiAvKiBKU1hNTERvY3VtZW50LmNwcCAqLzsgfTsKQEAgLTQ2NzAsOCArNDY3Miw2IEBA
CiAJCUE3OUJBREEzMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OUJBRDlGMTYxRTdGM0YwMEMyRTY1
MiAvKiBSdWxlU2V0LmNwcCAqLzsgfTsKIAkJQTc5QkFEQTQxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1
bGVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
OUJBREEwMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmggKi87IH07CiAJCUE3QTc4Q0Q1MTUz
MkJBNjIwMDZDMjFFNCAvKiBDb250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3OENENDE1MzJCQTYyMDA2QzIx
RTQgLyogQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwICovOyB9OwotCQlBN0FEMkY4NzBFQzg5
RDA3MDA4QUIwMDIgLyogTGlua0hhc2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdBRDJGODUwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtIYXNoLmNw
cCAqLzsgfTsKLQkJQTdBRDJGODgwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtIYXNoLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0FEMkY4NjBFQzg5RDA3
MDA4QUIwMDIgLyogTGlua0hhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBN0I2RTY5RjBCMjkxQTk2MDBEMDUyOUYgLyogRHJhZ0RhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjZFNjlEMEIy
OTFBOTYwMEQwNTI5RiAvKiBEcmFnRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUE3QkJFMjY2MTFBRkIzRjIwMDA1RUEwMyAvKiBKU0hUTUxN
ZXRlckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdCQkUyNjQxMUFGQjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1ldGVyRWxlbWVudC5jcHAg
Ki87IH07CiAJCUE3QkJFMjY3MTFBRkIzRjIwMDA1RUEwMyAvKiBKU0hUTUxNZXRlckVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QkJFMjY1
MTFBRkIzRjIwMDA1RUEwMyAvKiBKU0hUTUxNZXRlckVsZW1lbnQuaCAqLzsgfTsKQEAgLTExNzcy
LDYgKzExNzcyLDggQEAKIAkJODM0Qjg2QTgxQzU2RTkzRTAwRjNGMEUzIC8qIEpTSFRNTERhdGFF
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTERhdGFFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNEI4NkE5MUM1NkU5M0UwMEYz
RjBFMyAvKiBKU0hUTUxEYXRhRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0hUTUxEYXRhRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTgzNERENEYzMUJFMDg5ODkwMDJDOUMzRSAvKiBQYWdlTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFnZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODM0REZBQ0MxRjdEQUU1NjAwQzI3MjVCIC8qIFNoYXJlZFN0cmluZ0hh
c2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkU3RyaW5nSGFzaC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzRERkFDRTFGN0RBRTU3MDBDMjcyNUIg
LyogU2hhcmVkU3RyaW5nSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTaGFyZWRTdHJpbmdIYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODM1MEMzRTcxREE1OUI2MjAwMzU2NDQ2IC8qIFNjcm9sbFRvT3B0aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxUb09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODM1MEMzRTgxREE1OUI2MjAwMzU2NDQ2IC8qIFNjcm9sbFRvT3B0aW9u
cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2Nyb2xsVG9PcHRpb25zLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM1MjBDN0QxQTcxQkZDQzAwNkJEMkFBIC8qIENTU0Zv
bnRGYW1pbHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRm9udEZhbWls
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxNDcsOCArMTMxNDksNiBAQAog
CQlBNzlCQUQ5RjE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdWxlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTc5QkFEQTAxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVsZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBN0E3OENENDE1MzJCQTYyMDA2QzIxRTQgLyogQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGFpbmVyTm9k
ZUFsZ29yaXRobXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0FEMkY4NTBF
Qzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGlua0hhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
N0FEMkY4NjBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGlua0hhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTdCNEVBNjgxNEM5MzQ4NDAwQzhGNUJGIC8qIEpTTWFsbG9jU3RhdGlzdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01hbGxvY1N0YXRpc3RpY3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0RUE2OTE0QzkzNDg0MDBDOEY1QkYgLyog
SlNNYWxsb2NTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
TWFsbG9jU3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0RUE3
ODE0QzkzNDg0MDBDOEY1QkYgLyogSlNJbnRlcm5hbFNldHRpbmdzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5ncy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDYyMSw4ICsyNDYyMSw2IEBACiAJCQkJMEY4NzE2NkUx
Qzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggKi8sCiAJCQkJMEZFRjIwQ0QxQkQ0QTI0
MTAwMTI4RTVEIC8qIExlbmd0aFNpemUuY3BwICovLAogCQkJCUJDRkY2NDkwMEVBRDE1QzIwMEMx
RDZGNyAvKiBMZW5ndGhTaXplLmggKi8sCi0JCQkJQTdBRDJGODUwRUM4OUQwNzAwOEFCMDAyIC8q
IExpbmtIYXNoLmNwcCAqLywKLQkJCQlBN0FEMkY4NjBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hh
c2guaCAqLywKIAkJCQk1MTQzQjI2MjFEREQxNDkwMDAxNEZBQzYgLyogTGlua0ljb24uaCAqLywK
IAkJCQlDMDQ2RTFBQjEyMDhBOUZFMDBCQTJDRjcgLyogTG9jYWxpemVkU3RyaW5ncy5jcHAgKi8s
CiAJCQkJOTM1MjA3QkQwOUJENDEwQTAwRjIwMzhEIC8qIExvY2FsaXplZFN0cmluZ3MuaCAqLywK
QEAgLTI0Njk1LDYgKzI0NjkzLDggQEAKIAkJCQkwNzdBRjEzRTE4RjRBRTQwMDAwMUVENjEgLyog
U2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24uaCAqLywKIAkJCQkxQTRBOTU0QjBCNEVE
Q0NCMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmNwcCAqLywKIAkJCQkxQTRBOTU0QzBCNEVEQ0NC
MDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmggKi8sCisJCQkJODM0REZBQ0UxRjdEQUU1NzAwQzI3
MjVCIC8qIFNoYXJlZFN0cmluZ0hhc2guY3BwICovLAorCQkJCTgzNERGQUNDMUY3REFFNTYwMEMy
NzI1QiAvKiBTaGFyZWRTdHJpbmdIYXNoLmggKi8sCiAJCQkJOTMzMDlFQTAwOTlFQjc4QzAwNTZF
NTgxIC8qIFNoYXJlZFRpbWVyLmggKi8sCiAJCQkJRjU4Nzg2NjIwMkRFM0IxMTAxRUE0MTIyIC8q
IFNTTEtleUdlbmVyYXRvci5oICovLAogCQkJCUY0MzNFOTA0MURCQkRCQzIwMEVGMEQxNCAvKiBT
dGF0aWNQYXN0ZWJvYXJkLmNwcCAqLywKQEAgLTI1ODkyLDkgKzI1ODkyLDkgQEAKIAkJCQlCQ0VB
NDgxMzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCAqLywKIAkJ
CQlCQ0VBNDgyMjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQm94LmNwcCAqLywKIAkJCQlCQ0VB
NDgyMzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQm94LmggKi8sCisJCQkJQkNFQjE3OUIxNDMz
NzlGNTAwNTJFQUU5IC8qIFJlbmRlckJveEZyYWdtZW50SW5mby5oICovLAogCQkJCUJDOTZEQjQ1
MEYzQTg4MjIwMDU3M0NCMyAvKiBSZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgKi8sCiAJCQkJQkM5
NkRCNDIwRjNBODgwRTAwNTczQ0IzIC8qIFJlbmRlckJveE1vZGVsT2JqZWN0LmggKi8sCi0JCQkJ
QkNFQjE3OUIxNDMzNzlGNTAwNTJFQUU5IC8qIFJlbmRlckJveEZyYWdtZW50SW5mby5oICovLAog
CQkJCUJDRUE0ODI2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJCdXR0b24uY3BwICovLAogCQkJ
CUJDRUE0ODI3MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJCdXR0b24uaCAqLywKIAkJCQlCNTY1
NzlCNDE4MjREMTJBMDBFNzlGMjMgLyogUmVuZGVyQ2hpbGRJdGVyYXRvci5oICovLApAQCAtMjU5
MTcsNiArMjU5MTcsMTAgQEAKIAkJCQk1M0M4Mjk4QzEzRDhEOTI3MDBERTJERUIgLyogUmVuZGVy
RmxleGlibGVCb3guaCAqLywKIAkJCQk1MDhDQ0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVy
Rmxvd1RocmVhZC5jcHAgKi8sCiAJCQkJNTA4Q0NBNEQxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRl
ckZsb3dUaHJlYWQuaCAqLywKKwkJCQlENzBBRDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVy
RnJhZ21lbnRDb250YWluZXIuY3BwICovLAorCQkJCUQ3MEFENjU2MTNFMTM0MkIwMDVCNTBCNCAv
KiBSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oICovLAorCQkJCUJDRTkzRjQ2MTUxN0M2RDUwMDhD
Q0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5jcHAgKi8sCisJCQkJQkNFOTNGNDQx
NTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0LmggKi8sCiAJCQkJ
QTg3MURFQ0MwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZyYW1lLmNwcCAqLywKIAkJCQlBODcx
REVDQjBBMTUzMEM3MDBCMTJBNjggLyogUmVuZGVyRnJhbWUuaCAqLywKIAkJCQkwRkQzMDgwQzEx
N0NGN0U3MDBBNzkxRjcgLyogUmVuZGVyRnJhbWVCYXNlLmNwcCAqLywKQEAgLTI1OTg5LDEwICsy
NTk5Myw2IEBACiAJCQkJQURFMTY3MzYxODEwNTBDMzAwNDYzQTJFIC8qIFJlbmRlclB0ci5oICov
LAogCQkJCTVBNTc0RjIyMTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5jcHAgKi8sCiAJ
CQkJNUE1NzRGMjMxMzFEQjkzOTAwNDcxQjg4IC8qIFJlbmRlclF1b3RlLmggKi8sCi0JCQkJRDcw
QUQ2NTUxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyLmNwcCAqLywK
LQkJCQlENzBBRDY1NjEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXIu
aCAqLywKLQkJCQlCQ0U5M0Y0NjE1MTdDNkQ1MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250
YWluZXJTZXQuY3BwICovLAotCQkJCUJDRTkzRjQ0MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJG
cmFnbWVudENvbnRhaW5lclNldC5oICovLAogCQkJCUE4NzFERkRFMEExNTM3NkIwMEIxMkE2OCAv
KiBSZW5kZXJSZXBsYWNlZC5jcHAgKi8sCiAJCQkJQTg3MURGREYwQTE1Mzc2QjAwQjEyQTY4IC8q
IFJlbmRlclJlcGxhY2VkLmggKi8sCiAJCQkJQkNBODQ2RDQwREM2N0EzNTAwMjZDMzA5IC8qIFJl
bmRlclJlcGxpY2EuY3BwICovLApAQCAtMjc4MTcsNyArMjc4MTcsNiBAQAogCQkJCTg0NzMwRDg5
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxMjlDOTk3MUY1OUI5NjMwMDlENzQwMyAvKiBGZXRjaEJvZHlTb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQxRDEyOURCMUYzRDE0MzgwMEQxNUU0NyAvKiBGZXRjaEhlYWRlcnMuaCBp
biBIZWFkZXJzICovLAotCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUFENzUzQTFDRUY2QkQxMDBBMzE0
ODYgLyogRmV0Y2hPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0UxOTE0RDFGMkE5QUZC
MDAyNzJGNzggLyogRmV0Y2hSZWZlcnJlclBvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NF
MTkxNUExRjJBOUIzNDAwMjcyRjc4IC8qIEZldGNoUmVxdWVzdENhY2hlLmggaW4gSGVhZGVycyAq
LywKQEAgLTI5MTUzLDcgKzI5MTUyLDYgQEAKIAkJCQk4OUI1RUFBMjExRTgwMDNEMDBGMjM2N0Ug
LyogTGluZUVuZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkZFRkFCMkExODM4MERBMDAwNTE0
NTM0IC8qIExpbmVMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkZEQkMwNDcxODNE
MjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTdBRDJGODgw
RUM4OUQwNzAwOEFCMDAyIC8qIExpbmtIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDQkE5REMw
QjFERjQ0REY0MDAwNTY3NUMgLyogTGlua0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0
M0IyNjMxREREMTUyMDAwMTRGQUM2IC8qIExpbmtJY29uLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTREQTQyMjFDREQzQTgzMDBGNDQ3M0MgLyogTGlua0ljb25Db2xsZWN0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjk2NTgsOCArMjk2NTYsOCBAQAogCQkJCUJDRUE0ODYwMDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxMEQ3NjgxN0Q4RUU3MTAw
NUUyNjI2IC8qIFJlbmRlckJsb2NrRmxvdy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NjIw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJveC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM5NkRC
NDMwRjNBODgwRTAwNTczQ0IzIC8qIFJlbmRlckJveE1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0VCMTc5QzE0MzM3OUY1MDA1MkVBRTkgLyogUmVuZGVyQm94RnJhZ21lbnRJbmZv
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzk2REI0MzBGM0E4ODBFMDA1NzNDQjMgLyogUmVuZGVy
Qm94TW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODY2MDk3RDkzMDIwMDk0
QzlFNCAvKiBSZW5kZXJCdXR0b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUI1NjU3OUI1MTgyNEQx
MkEwMEU3OUYyMyAvKiBSZW5kZXJDaGlsZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0U0NDEzNDEyRjc0OEUyMDA5Qjg0QjggLyogUmVuZGVyQ29tYmluZVRleHQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjk2NzQsNiArMjk2NzIsOCBAQAogCQkJCTA2NkM3NzMxMEFCNjAzRkQwMDIzOEND
NCAvKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNDODI5
OEUxM0Q4RDkyNzAwREUyREVCIC8qIFJlbmRlckZsZXhpYmxlQm94LmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MDhDQ0E0RjEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRDcwQUQ2NTgxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0U5M0Y0NTE1MTdDNTY3MDA4Q0NGNzQg
LyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFE
RUQzMEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEMzA4MEYxMTdDRjdFNzAwQTc5MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTg3MURFRDEwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZyYW1lU2V0LmggaW4g
SGVhZGVycyAqLywKQEAgLTI5NzIzLDggKzI5NzIzLDYgQEAKIAkJCQlBNDNCRjU5RDExNDkyOTI4
MDBDNjQzQ0EgLyogUmVuZGVyUHJvZ3Jlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1QjY1ODc0
MTg2RkRFNEMwMDlDMjZFOCAvKiBSZW5kZXJQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVBNTc0
RjI1MTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
RDcwQUQ2NTgxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCQ0U5M0Y0NTE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21l
bnRDb250YWluZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFERkUzMEExNTM3NkIwMEIx
MkE2OCAvKiBSZW5kZXJSZXBsYWNlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBODQ2RDcwREM2
N0EzNTAwMjZDMzA5IC8qIFJlbmRlclJlcGxpY2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzlG
QUVFMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTMw
MDA5LDYgKzMwMDA3LDcgQEAKIAkJCQlGRDQ1QTk1MjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVP
dXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3
IC8qIFNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5NTRFMEI0RURDQ0IwMDJE
OEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTgzNERGQUQwMUY3REFF
NUQwMEMyNzI1QiAvKiBTaGFyZWRTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMw
OUVBMzA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU0ODk0NEEzMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxMUUwNjdFRTFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENv
dmVyYWdlLmggaW4gSGVhZGVycyAqLywKQEAgLTMzMjI4LDcgKzMzMjI3LDYgQEAKIAkJCQk4OUI1
RUFBMTExRTgwMDNEMDBGMjM2N0UgLyogTGluZUVuZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRkI2OThDRjE4MzQwMkJCMDAxNThBMzEgLyogTGluZUluZm8uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkZEQkMwNDgxODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBN0FEMkY4NzBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQ0JBOURDMEExREY0NERGMTAwMDU2NzVDIC8qIExpbmtIZWFkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0REE0MjExQ0REM0E4MzAwRjQ0NzNDIC8qIExpbmtJY29u
Q29sbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk4Q0U0MzI2MTI5RTAwQkQwMDU4MjFE
QyAvKiBMaW5rTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM2MzUsNiArMzM2MzMsOCBA
QAogCQkJCTA2NkM3NzMwMEFCNjAzRkQwMDIzOENDNCAvKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJv
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1M0M4Mjk4RDEzRDhEOTI3MDBERTJERUIgLyogUmVu
ZGVyRmxleGlibGVCb3guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTA4Q0NBNTAxM0NGMTA2QjAw
MzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDcwQUQ2
NTcxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUJDRTkzRjQ3MTUxN0M2RDUwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENv
bnRhaW5lclNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODcxREVENDBBMTUzMEM3MDBCMTJB
NjggLyogUmVuZGVyRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEMzA4MEUxMTdDRjdF
NzAwQTc5MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODcx
REVEMjBBMTUzMEM3MDBCMTJBNjggLyogUmVuZGVyRnJhbWVTZXQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0zMzY4Myw4ICszMzY4Myw2IEBACiAJCQkJQkNFQTQ4N0YwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNDNCRjU5QzExNDkyOTI4MDBD
NjQzQ0EgLyogUmVuZGVyUHJvZ3Jlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUE1NzRGMjQx
MzFEQjkzOTAwNDcxQjg4IC8qIFJlbmRlclF1b3RlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUQ3
MEFENjU3MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCQ0U5M0Y0NzE1MTdDNkQ1MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21l
bnRDb250YWluZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MURGRTIwQTE1Mzc2QjAw
QjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTg0NkQ2
MERDNjdBMzUwMDI2QzMwOSAvKiBSZW5kZXJSZXBsaWNhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NzlGQUVEMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMzM5MTcsNiArMzM5MTUsNyBAQAogCQkJCTFBNEE5NTREMEI0RURDQ0IwMDJEOEMzQyAv
KiBTaGFyZWRCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyREQ4RTMwRDkxRTJCNDAw
MEY4OUVFIC8qIFNoYXJlZEJ1ZmZlckNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNEE5NTUy
MEI0RURDRkYwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTgzNERGQUNGMUY3REFFNUQwMEMyNzI1QiAvKiBTaGFyZWRTdHJpbmdIYXNoLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE2M0U4OEY3MTE4QTM5RDIwMEVEOTIzMSAvKiBTaW1wbGVGb250RGF0
YUNvcmVUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0ODk0NEEyMTgwQjU3RDgwMEYxNjVE
OCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTExRTA2N0VDMUU2
MjQ2MTMwMDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMzUwMGEwMTgxOTk1MmE0
Y2E2MDA4MjYxNjU5YTZhZTk2ODgyOGFmNi4uMTk2MzYyMjMyN2M0NzVkM2MwNGM4NjYwM2I2NzVh
NTBkNWE5YmM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNjYsNyAr
NjYsNiBAQAogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJLZXlmcmFtZUxpc3QuaCIKLSNpbmNs
dWRlICJMaW5rSGFzaC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNYXRoTUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKQEAgLTg5LDYgKzg4LDcgQEAKICNp
bmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1
ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTaGFyZWRTdHJpbmdIYXNoLmgiCiAjaW5jbHVk
ZSAiU3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVDb2xvci5oIgogI2luY2x1ZGUgIlN0
eWxlQ2FjaGVkSW1hZ2UuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVk
TGlua1N0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcApp
bmRleCA1OTIwYmRhZGNkY2UwYTRiZDQzYjE1NDg3Mzg2YmQzNTQ0MzQxMDY2Li5jMzk5M2Q2NTM1
ZGE1ZjM5NmQyYWIzZmFlZWQ3OGNjYTBhMmQzYWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0
ZWRMaW5rU3RhdGUuY3BwCkBAIC02NiwxNiArNjYsMTYgQEAgdm9pZCBWaXNpdGVkTGlua1N0YXRl
OjppbnZhbGlkYXRlU3R5bGVGb3JBbGxMaW5rcygpCiAgICAgfQogfQogCi1pbmxpbmUgc3RhdGlj
IExpbmtIYXNoIGxpbmtIYXNoRm9yRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQpCitpbmxpbmUgc3RhdGljIFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2hG
b3JFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsK
ICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5rSGFzaCgpOwog
ICAgIGlmIChjb25zdCBBdG9taWNTdHJpbmcqIGF0dHJpYnV0ZSA9IGxpbmtBdHRyaWJ1dGUoZWxl
bWVudCkpCi0gICAgICAgIHJldHVybiBXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2goZG9jdW1lbnQu
YmFzZVVSTCgpLCAqYXR0cmlidXRlKTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmNvbXB1dGVT
aGFyZWRTdHJpbmdIYXNoKGRvY3VtZW50LmJhc2VVUkwoKSwgKmF0dHJpYnV0ZSk7CiAgICAgcmV0
dXJuIDA7CiB9CiAKLXZvaWQgVmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yTGlu
ayhMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQgVmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0
eWxlRm9yTGluayhTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQogewogICAgIGlmICghbV9saW5r
c0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuY29udGFpbnMobGlua0hhc2gpKQogICAgICAgICByZXR1
cm47CkBAIC05OCwxMSArOTgsMTEgQEAgRUluc2lkZUxpbmsgVmlzaXRlZExpbmtTdGF0ZTo6ZGV0
ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICBpZiAo
YXR0cmlidXRlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBJbnNpZGVWaXNpdGVkTGluazsK
IAotICAgIExpbmtIYXNoIGhhc2g7CisgICAgU2hhcmVkU3RyaW5nSGFzaCBoYXNoOwogICAgIGlm
IChpczxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIGhhc2ggPSBkb3duY2Fz
dDxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CiAgICAgZWxz
ZQotICAgICAgICBoYXNoID0gV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoKGVsZW1lbnQuZG9jdW1l
bnQoKS5iYXNlVVJMKCksICphdHRyaWJ1dGUpOworICAgICAgICBoYXNoID0gV2ViQ29yZTo6Y29t
cHV0ZVNoYXJlZFN0cmluZ0hhc2goZWxlbWVudC5kb2N1bWVudCgpLmJhc2VVUkwoKSwgKmF0dHJp
YnV0ZSk7CiAKICAgICBpZiAoIWhhc2gpCiAgICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRM
aW5rOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmgKaW5kZXggMmExNDJhZDg2NmE0
NWQ5NjE5NzMzMWMwNWMyOTJhNjBhODM5Y2NmOC4uY2M5ZTVlYzQ3YTY2NmU1ODEzYmI1ZjBiZjcz
ZmZmNzI4YzdhZmQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5r
U3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5oCkBAIC0y
OSw4ICsyOSw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNs
dWRlICJMaW5rSGFzaC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCisjaW5j
bHVkZSAiU2hhcmVkU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQzLDE0ICs0MywxNCBAQCBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgVmlzaXRlZExpbmtTdGF0ZShEb2N1bWVudCYpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlU3R5
bGVGb3JBbGxMaW5rcygpOwotICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlRm9yTGluayhMaW5rSGFz
aCk7CisgICAgdm9pZCBpbnZhbGlkYXRlU3R5bGVGb3JMaW5rKFNoYXJlZFN0cmluZ0hhc2gpOwog
ICAgIEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZShjb25zdCBFbGVtZW50Jik7CiAKIHBy
aXZhdGU6CiAgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoY29uc3Qg
RWxlbWVudCYpOwogCiAgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7Ci0gICAgSGFzaFNldDxMaW5r
SGFzaCwgTGlua0hhc2hIYXNoPiBtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZTsKKyAgICBI
YXNoU2V0PFNoYXJlZFN0cmluZ0hhc2gsIFNoYXJlZFN0cmluZ0hhc2hIYXNoPiBtX2xpbmtzQ2hl
Y2tlZEZvclZpc2l0ZWRTdGF0ZTsKIH07CiAKIGlubGluZSBFSW5zaWRlTGluayBWaXNpdGVkTGlu
a1N0YXRlOjpkZXRlcm1pbmVMaW5rU3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAppbmRleCBhN2JjNjA5OWUxMjU5MWU1MmE3
MGMxYjVjY2NkYjNiZDcwMDg1NGY1Li5lNGU0YTNkY2RjNWE2YTkxZjg1ZjQ5NTcyNmNkZmE1MTc0
ODczODQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgotI2luY2x1ZGUgIkxpbmtIYXNoLmgiCisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFzaC5o
IgogI2luY2x1ZGUgIlVSTFV0aWxzLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCkBA
IC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzUmVsKFJlbGF0aW9uKSBjb25z
dDsKICAgICAKLSAgICBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goKSBjb25zdDsKKyAgICBTaGFy
ZWRTdHJpbmdIYXNoIHZpc2l0ZWRMaW5rSGFzaCgpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0
ZUNhY2hlZFZpc2l0ZWRMaW5rSGFzaCgpIHsgbV9jYWNoZWRWaXNpdGVkTGlua0hhc2ggPSAwOyB9
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBET01Ub2tlbkxpc3QmIHJlbExpc3QoKTsKQEAgLTEwNCwx
NSArMTA0LDE1IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1Jvb3RFZGl0YWJsZUVsZW1lbnRG
b3JTZWxlY3Rpb25Pbk1vdXNlRG93bjsKICAgICBib29sIG1fd2FzU2hpZnRLZXlEb3duT25Nb3Vz
ZURvd247CiAgICAgT3B0aW9uU2V0PFJlbGF0aW9uPiBtX2xpbmtSZWxhdGlvbnM7Ci0gICAgbXV0
YWJsZSBMaW5rSGFzaCBtX2NhY2hlZFZpc2l0ZWRMaW5rSGFzaDsKKyAgICBtdXRhYmxlIFNoYXJl
ZFN0cmluZ0hhc2ggbV9jYWNoZWRWaXNpdGVkTGlua0hhc2g7CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RE9NVG9rZW5MaXN0PiBtX3JlbExpc3Q7CiB9OwogCi1pbmxpbmUgTGlua0hhc2ggSFRNTEFu
Y2hvckVsZW1lbnQ6OnZpc2l0ZWRMaW5rSGFzaCgpIGNvbnN0CitpbmxpbmUgU2hhcmVkU3RyaW5n
SGFzaCBIVE1MQW5jaG9yRWxlbWVudDo6dmlzaXRlZExpbmtIYXNoKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1fY2FjaGVkVmlzaXRlZExpbmtIYXNoKQotICAgICAgICBtX2NhY2hlZFZpc2l0ZWRMaW5r
SGFzaCA9IFdlYkNvcmU6OnZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudCgpLmJhc2VVUkwoKSwgYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CisgICAg
ICAgIG1fY2FjaGVkVmlzaXRlZExpbmtIYXNoID0gV2ViQ29yZTo6Y29tcHV0ZVNoYXJlZFN0cmlu
Z0hhc2goZG9jdW1lbnQoKS5iYXNlVVJMKCksIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oSFRNTE5hbWVzOjpocmVmQXR0cikpOwogICAgIHJldHVybiBtX2NhY2hlZFZpc2l0ZWRMaW5r
SGFzaDsgCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVu
dHMuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKaW5kZXggMWI5
OTg5YzQ2MDY1NjY4YTExZGM3NmVjNDExZDhmZmE1Nzk1ZWMxMi4uMTMxODMzMGQyNWQ0ZDY3MzBk
YWMwNDU4ZmU0MTJhZDU1YThlZjA3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50
cy5jcHAKQEAgLTU2Nyw4ICs1NjcsOCBAQCBjbGFzcyBFbXB0eVVzZXJDb250ZW50UHJvdmlkZXIg
ZmluYWwgOiBwdWJsaWMgVXNlckNvbnRlbnRQcm92aWRlciB7CiB9OwogCiBjbGFzcyBFbXB0eVZp
c2l0ZWRMaW5rU3RvcmUgZmluYWwgOiBwdWJsaWMgVmlzaXRlZExpbmtTdG9yZSB7Ci0gICAgYm9v
bCBpc0xpbmtWaXNpdGVkKFBhZ2UmLCBMaW5rSGFzaCwgY29uc3QgVVJMJiwgY29uc3QgQXRvbWlj
U3RyaW5nJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIGFkZFZpc2l0ZWRMaW5r
KFBhZ2UmLCBMaW5rSGFzaCkgZmluYWwgeyB9CisgICAgYm9vbCBpc0xpbmtWaXNpdGVkKFBhZ2Um
LCBTaGFyZWRTdHJpbmdIYXNoLCBjb25zdCBVUkwmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5h
bCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgYWRkVmlzaXRlZExpbmsoUGFnZSYsIFNoYXJl
ZFN0cmluZ0hhc2gpIGZpbmFsIHsgfQogfTsKIAogUmVmUHRyPFBvcHVwTWVudT4gRW1wdHlDaHJv
bWVDbGllbnQ6OmNyZWF0ZVBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQmKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKaW5kZXggMDNjNjUzYjRkNjZm
MDgxMDliNzFlYzNmZWJlM2ExNWJjZDUyZDZiMi4uMmJhYzhhODI4ZDBjMzNkY2RkNDRlMGMxYmMy
ZGZhNDI5MWI4NmJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xs
ZXIuY3BwCkBAIC00MSwxMyArNDEsMTMgQEAKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgotI2luY2x1ZGUgIkxp
bmtIYXNoLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNpbmNsdWRlICJTY3Jv
bGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgor
I2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJWaXNpdGVkTGlua1N0b3Jl
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC01NSw3ICs1NSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlubGluZSB2b2lkIGFkZFZpc2l0ZWRMaW5rKFBh
Z2UmIHBhZ2UsIGNvbnN0IFVSTCYgdXJsKQogewotICAgIHBhZ2UudmlzaXRlZExpbmtTdG9yZSgp
LmFkZFZpc2l0ZWRMaW5rKHBhZ2UsIHZpc2l0ZWRMaW5rSGFzaCh1cmwuc3RyaW5nKCkpKTsKKyAg
ICBwYWdlLnZpc2l0ZWRMaW5rU3RvcmUoKS5hZGRWaXNpdGVkTGluayhwYWdlLCBjb21wdXRlU2hh
cmVkU3RyaW5nSGFzaCh1cmwuc3RyaW5nKCkpKTsKIH0KIAogSGlzdG9yeUNvbnRyb2xsZXI6Okhp
c3RvcnlDb250cm9sbGVyKEZyYW1lJiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDkxODJi
YzlhNDk4YWZmYjg3ZDI5MDcyYmNhYjVmZDhhMzc0ZGQzNWQuLmRiZTI4NTFjYzY2MTk4MDQyOTRi
M2Q3ZGU1YzZkODA0YjZkNzJmOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMTIwMSw3ICsxMjAx
LDcgQEAgdm9pZCBQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlua3MoKQogICAgIH0KIH0K
IAotdm9pZCBQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayhMaW5rSGFzaCBsaW5rSGFzaCkK
K3ZvaWQgUGFnZTo6aW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsoU2hhcmVkU3RyaW5nSGFzaCBsaW5r
SGFzaCkKIHsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX21haW5GcmFtZS5nZXQoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBpZiAo
IWZyYW1lLT5kb2N1bWVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCAyNGY1MGRiYTc0YmY1NGJhZThk
YzU4OGViMzlmYTA5ZmVjM2U1MDZkLi4wMjNhMmIwYmY3OTlhZTQ0NDIxOWFmMjIxNmM2MDc4YTg2
ZDZmZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAtMTMxLDcgKzEzMSw3IEBAIGNsYXNzIEFjdGl2aXR5
U3RhdGVDaGFuZ2VPYnNlcnZlcjsKIGNsYXNzIFZpc2l0ZWRMaW5rU3RvcmU7CiBjbGFzcyBXZWJH
TFN0YXRlVHJhY2tlcjsKIAotdHlwZWRlZiB1aW50NjRfdCBMaW5rSGFzaDsKK3R5cGVkZWYgdWlu
dDY0X3QgU2hhcmVkU3RyaW5nSGFzaDsKIAogZW51bSBGaW5kRGlyZWN0aW9uIHsKICAgICBGaW5k
RGlyZWN0aW9uRm9yd2FyZCwKQEAgLTM5OCw3ICszOTgsNyBAQCBwdWJsaWM6CiAgICAgSlNDOjpE
ZWJ1Z2dlciogZGVidWdnZXIoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyOyB9CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcygpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsoTGlua0hhc2gpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsoU2hhcmVkU3RyaW5n
SGFzaCk7CiAKICAgICB2b2lkIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxs
RnJhbWVzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzaXRlZExpbmtT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwCmluZGV4
IDk3M2I3OGVlNjM4ZjczYmExMjU0NDNlMDA1MGE5YTA1OWViNzc4OWMuLmQ3YTU4YjVlZjJjNmVl
YjVkN2Q4YTgyM2Q1MGJmOTg5NDlmYTQ1NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvVmlzaXRlZExpbmtTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaXNpdGVk
TGlua1N0b3JlLmNwcApAQCAtNTksNyArNTksNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6Omlu
dmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcygpCiAgICAgICAgIHBhZ2UtPmludmFsaWRhdGVTdHls
ZXNGb3JBbGxMaW5rcygpOwogfQogCi12b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OmludmFsaWRhdGVT
dHlsZXNGb3JMaW5rKExpbmtIYXNoIGxpbmtIYXNoKQordm9pZCBWaXNpdGVkTGlua1N0b3JlOjpp
bnZhbGlkYXRlU3R5bGVzRm9yTGluayhTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQogewogICAg
IGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZXMpCiAgICAgICAgIHBhZ2UtPmludmFsaWRhdGVTdHls
ZXNGb3JMaW5rKGxpbmtIYXNoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlz
aXRlZExpbmtTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaXNpdGVkTGlua1N0b3JlLmgK
aW5kZXggNDQxMzA2YTQ3NGJkYzBhM2JkZTA0ZTdjZmNkZjQ0YzQ1YTc4ZjYyOS4uNDNjMzUxMzcy
ZDYxOGI2ODEwOWIwZmI4Y2NkNjlmYzg1ZjhiZGQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9WaXNpdGVkTGlua1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaXNp
dGVkTGlua1N0b3JlLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci10eXBlZGVmIHVpbnQ2NF90IExpbmtIYXNoOwordHlwZWRlZiB1aW50NjRfdCBTaGFyZWRTdHJp
bmdIYXNoOwogY2xhc3MgUGFnZTsKIGNsYXNzIFVSTDsKIApAQCAtNDEsMTQgKzQxLDE0IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5WaXNpdGVkTGlua1N0b3JlKCk7CiAK
ICAgICAvLyBGSVhNRTogVGhlc2UgdHdvIG1lbWJlcnMgc2hvdWxkIG9ubHkgdGFrZSB0aGUgbGlu
ayBoYXNoLgotICAgIHZpcnR1YWwgYm9vbCBpc0xpbmtWaXNpdGVkKFBhZ2UmLCBMaW5rSGFzaCwg
Y29uc3QgVVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBhZGRWaXNpdGVkTGluayhQYWdlJiwgTGlua0hhc2gpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNMaW5rVmlzaXRlZChQYWdlJiwgU2hhcmVkU3RyaW5nSGFzaCwg
Y29uc3QgVVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBhZGRWaXNpdGVkTGluayhQYWdlJiwgU2hhcmVkU3RyaW5nSGFz
aCkgPSAwOwogCiAgICAgdm9pZCBhZGRQYWdlKFBhZ2UmKTsKICAgICB2b2lkIHJlbW92ZVBhZ2Uo
UGFnZSYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVzRm9yQWxs
TGlua3MoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGVTdHlsZXNGb3JMaW5r
KExpbmtIYXNoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGVTdHlsZXNGb3JM
aW5rKFNoYXJlZFN0cmluZ0hhc2gpOwogCiBwcml2YXRlOgogICAgIEhhc2hTZXQ8UGFnZSo+IG1f
cGFnZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGM4MzNlNGI4OTFmM2E3NWE3M2U5YjRjMDAyZWUyZDc1ZmMwNGQ5ZDEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzEwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAq
ICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqICAg
ICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVSTC5oIgot
I2luY2x1ZGUgIkxpbmtIYXNoLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpbmRTbGFzaERvdERvdFNsYXNo
KGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBw
b3NpdGlvbikKLXsKLSAgICBpZiAobGVuZ3RoIDwgNCkKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5k
OwotICAgIHNpemVfdCBsb29wTGltaXQgPSBsZW5ndGggLSAzOwotICAgIGZvciAoc2l6ZV90IGkg
PSBwb3NpdGlvbjsgaSA8IGxvb3BMaW1pdDsgKytpKSB7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJz
W2ldID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAxXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsg
Ml0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDNdID09ICcvJykKLSAgICAgICAgICAgIHJldHVy
biBpOwotICAgIH0KLSAgICByZXR1cm4gbm90Rm91bmQ7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBzaXplX3QgZmluZFNsYXNoU2xhc2goY29u
c3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IHBvc2l0
aW9uKQotewotICAgIGlmIChsZW5ndGggPCAyKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0g
ICAgc2l6ZV90IGxvb3BMaW1pdCA9IGxlbmd0aCAtIDE7Ci0gICAgZm9yIChzaXplX3QgaSA9IHBv
c2l0aW9uOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKLSAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0g
PT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcvJykKLSAgICAgICAgICAgIHJldHVybiBp
OwotICAgIH0KLSAgICByZXR1cm4gbm90Rm91bmQ7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBzaXplX3QgZmluZFNsYXNoRG90U2xhc2goY29u
c3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IHBvc2l0
aW9uKQotewotICAgIGlmIChsZW5ndGggPCAzKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0g
ICAgc2l6ZV90IGxvb3BMaW1pdCA9IGxlbmd0aCAtIDI7Ci0gICAgZm9yIChzaXplX3QgaSA9IHBv
c2l0aW9uOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKLSAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0g
PT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9
PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vdEZvdW5k
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBjb250YWluc0NvbG9uU2xhc2hTbGFzaChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKGxlbmd0aCA8IDMpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBsb29wTGltaXQgPSBsZW5ndGggLSAyOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb29wTGltaXQ7ICsraSkgewotICAgICAgICBpZiAoY2hh
cmFjdGVyc1tpXSA9PSAnOicgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy8nICYmIGNoYXJhY3Rl
cnNbaSArIDJdID09ICcvJykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3Rh
dGljIGlubGluZSB2b2lkIHNxdWVlemVPdXROdWxsQ2hhcmFjdGVycyhWZWN0b3I8Q2hhcmFjdGVy
VHlwZSwgNTEyPiYgc3RyaW5nKQotewotICAgIHNpemVfdCBzaXplID0gc3RyaW5nLnNpemUoKTsK
LSAgICBzaXplX3QgaSA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICBpZiAoIXN0cmluZ1tpXSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAo
aSA9PSBzaXplKQotICAgICAgICByZXR1cm47Ci0gICAgc2l6ZV90IGogPSBpOwotICAgIGZvciAo
KytpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChDaGFyYWN0ZXJUeXBlIGNoYXJhY3Rl
ciA9IHN0cmluZ1tpXSkKLSAgICAgICAgICAgIHN0cmluZ1tqKytdID0gY2hhcmFjdGVyOwotICAg
IH0KLSAgICBBU1NFUlQoaiA8IHNpemUpOwotICAgIHN0cmluZy5zaHJpbmsoaik7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIHZvaWQgY2xlYW5TbGFzaERv
dERvdFNsYXNoZXMoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJz
dFNsYXNoKQotewotICAgIHNpemVfdCBzbGFzaCA9IGZpcnN0U2xhc2g7Ci0gICAgZG8gewotICAg
ICAgICBzaXplX3QgcHJldmlvdXNTbGFzaCA9IHNsYXNoID8gcmV2ZXJzZUZpbmQocGF0aC5kYXRh
KCksIHBhdGguc2l6ZSgpLCAnLycsIHNsYXNoIC0gMSkgOiBub3RGb3VuZDsKLSAgICAgICAgLy8g
RG9uJ3QgcmVtb3ZlIHRoZSBob3N0LCBpLmUuIGh0dHA6Ly9mb28ub3JnLy4uL2Zvby5odG1sCi0g
ICAgICAgIGlmIChwcmV2aW91c1NsYXNoID09IG5vdEZvdW5kIHx8IChwcmV2aW91c1NsYXNoID4g
MyAmJiBwYXRoW3ByZXZpb3VzU2xhc2ggLSAyXSA9PSAnOicgJiYgcGF0aFtwcmV2aW91c1NsYXNo
IC0gMV0gPT0gJy8nKSkgewotICAgICAgICAgICAgcGF0aFtzbGFzaF0gPSAwOwotICAgICAgICAg
ICAgcGF0aFtzbGFzaCArIDFdID0gMDsKLSAgICAgICAgICAgIHBhdGhbc2xhc2ggKyAyXSA9IDA7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gcHJldmlvdXNT
bGFzaDsgaSA8IHNsYXNoICsgMzsgKytpKQotICAgICAgICAgICAgICAgIHBhdGhbaV0gPSAwOwot
ICAgICAgICB9Ci0gICAgICAgIHNsYXNoICs9IDM7Ci0gICAgfSB3aGlsZSAoKHNsYXNoID0gZmlu
ZFNsYXNoRG90RG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCBzbGFzaCkpICE9IG5v
dEZvdW5kKTsKLSAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIHZvaWQgbWVyZ2VEb3VibGVTbGFz
aGVzKFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCA1MTI+JiBwYXRoLCBzaXplX3QgZmlyc3RTbGFzaCkK
LXsKLSAgICBzaXplX3QgcmVmUG9zID0gZmluZChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksICcj
Jyk7Ci0gICAgaWYgKCFyZWZQb3MgfHwgcmVmUG9zID09IG5vdEZvdW5kKQotICAgICAgICByZWZQ
b3MgPSBwYXRoLnNpemUoKTsKLQotICAgIHNpemVfdCBzbGFzaCA9IGZpcnN0U2xhc2g7Ci0gICAg
d2hpbGUgKHNsYXNoIDwgcmVmUG9zKSB7Ci0gICAgICAgIGlmICghc2xhc2ggfHwgcGF0aFtzbGFz
aCAtIDFdICE9ICc6JykKLSAgICAgICAgICAgIHBhdGhbc2xhc2grK10gPSAwOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzbGFzaCArPSAyOwotICAgICAgICBpZiAoKHNsYXNoID0gZmluZFNs
YXNoU2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCBzbGFzaCkpID09IG5vdEZvdW5kKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHNxdWVlemVPdXROdWxsQ2hhcmFjdGVycyhw
YXRoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgdm9p
ZCBjbGVhblNsYXNoRG90U2xhc2hlcyhWZWN0b3I8Q2hhcmFjdGVyVHlwZSwgNTEyPiYgcGF0aCwg
c2l6ZV90IGZpcnN0U2xhc2gpCi17Ci0gICAgc2l6ZV90IHNsYXNoID0gZmlyc3RTbGFzaDsKLSAg
ICBkbyB7Ci0gICAgICAgIHBhdGhbc2xhc2hdID0gMDsKLSAgICAgICAgcGF0aFtzbGFzaCArIDFd
ID0gMDsKLSAgICAgICAgc2xhc2ggKz0gMjsKLSAgICB9IHdoaWxlICgoc2xhc2ggPSBmaW5kU2xh
c2hEb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHNsYXNoKSkgIT0gbm90Rm91bmQp
OwotICAgIHNxdWVlemVPdXROdWxsQ2hhcmFjdGVycyhwYXRoKTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYW5QYXRoKFZlY3Rv
cjxDaGFyYWN0ZXJUeXBlLCA1MTI+JiBwYXRoKQotewotICAgIC8vIEZJWE1FOiBTaG91bGQgbm90
IGRvIHRoaXMgaW4gdGhlIHF1ZXJ5IG9yIGFuY2hvciBwYXJ0IG9mIHRoZSBVUkwuCi0gICAgc2l6
ZV90IGZpcnN0U2xhc2ggPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5z
aXplKCksIDApOwotICAgIGlmIChmaXJzdFNsYXNoICE9IG5vdEZvdW5kKQotICAgICAgICBjbGVh
blNsYXNoRG90RG90U2xhc2hlcyhwYXRoLCBmaXJzdFNsYXNoKTsKLQotICAgIC8vIEZJWE1FOiBT
aG91bGQgbm90IGRvIHRoaXMgaW4gdGhlIHF1ZXJ5IHBhcnQuCi0gICAgZmlyc3RTbGFzaCA9IGZp
bmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7Ci0gICAgaWYgKGZpcnN0
U2xhc2ggIT0gbm90Rm91bmQpCi0gICAgICAgIG1lcmdlRG91YmxlU2xhc2hlcyhwYXRoLCBmaXJz
dFNsYXNoKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IGRvIHRoaXMgaW4gdGhlIHF1ZXJ5
IG9yIGFuY2hvciBwYXJ0LgotICAgIGZpcnN0U2xhc2ggPSBmaW5kU2xhc2hEb3RTbGFzaChwYXRo
LmRhdGEoKSwgcGF0aC5zaXplKCksIDApOwotICAgIGlmIChmaXJzdFNsYXNoICE9IG5vdEZvdW5k
KQotICAgICAgICBjbGVhblNsYXNoRG90U2xhc2hlcyhwYXRoLCBmaXJzdFNsYXNoKTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgbWF0
Y2hMZXR0ZXIoQ2hhcmFjdGVyVHlwZSBjLCBjaGFyIGxvd2VyY2FzZUxldHRlcikKLXsKLSAgICBy
ZXR1cm4gKGMgfCAweDIwKSA9PSBsb3dlcmNhc2VMZXR0ZXI7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIG5lZWRzVHJhaWxpbmdTbGFz
aChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgaWYgKGxlbmd0aCA8IDYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1hdGNo
TGV0dGVyKGNoYXJhY3RlcnNbMF0sICdoJykKLSAgICAgICAgICAgIHx8ICFtYXRjaExldHRlcihj
aGFyYWN0ZXJzWzFdLCAndCcpCi0gICAgICAgICAgICB8fCAhbWF0Y2hMZXR0ZXIoY2hhcmFjdGVy
c1syXSwgJ3QnKQotICAgICAgICAgICAgfHwgIW1hdGNoTGV0dGVyKGNoYXJhY3RlcnNbM10sICdw
JykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIShjaGFyYWN0ZXJzWzRdID09ICc6
JwotICAgICAgICAgICAgfHwgKG1hdGNoTGV0dGVyKGNoYXJhY3RlcnNbNF0sICdzJykgJiYgY2hh
cmFjdGVyc1s1XSA9PSAnOicpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWdu
ZWQgcG9zID0gY2hhcmFjdGVyc1s0XSA9PSAnOicgPyA1IDogNjsKLQotICAgIC8vIFNraXAgaW5p
dGlhbCB0d28gc2xhc2hlcyBpZiBwcmVzZW50LgotICAgIGlmIChwb3MgKyAxIDwgbGVuZ3RoICYm
IGNoYXJhY3RlcnNbcG9zXSA9PSAnLycgJiYgY2hhcmFjdGVyc1twb3MgKyAxXSA9PSAnLycpCi0g
ICAgICAgIHBvcyArPSAyOwotCi0gICAgLy8gRmluZCBuZXh0IHNsYXNoLgotICAgIHdoaWxlIChw
b3MgPCBsZW5ndGggJiYgY2hhcmFjdGVyc1twb3NdICE9ICcvJykKLSAgICAgICAgKytwb3M7Ci0K
LSAgICByZXR1cm4gcG9zID09IGxlbmd0aDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci1zdGF0aWMgQUxXQVlTX0lOTElORSBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2hJ
bmxpbmUoY29uc3QgQ2hhcmFjdGVyVHlwZSogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIEFscmVhZHlIYXNoZWQ6OmF2b2lkRGVsZXRlZFZhbHVlKFN0cmluZ0hhc2hlcjo6Y29t
cHV0ZUhhc2godXJsLCBsZW5ndGgpKTsKLX0KLQotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNv
bnN0IFN0cmluZyYgdXJsKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHVybC5sZW5ndGgoKTsK
LSAgICBpZiAoIWxlbmd0aCB8fCB1cmwuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiB2aXNpdGVk
TGlua0hhc2hJbmxpbmUodXJsLmNoYXJhY3RlcnM4KCksIGxlbmd0aCk7Ci0gICAgcmV0dXJuIHZp
c2l0ZWRMaW5rSGFzaElubGluZSh1cmwuY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7Ci19Ci0KLUxp
bmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIHZpc2l0ZWRMaW5rSGFzaElubGluZSh1cmwsIGxlbmd0aCk7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIEFMV0FZU19JTkxJTkUg
dm9pZCB2aXNpdGVkVVJMSW5saW5lKGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBWZWN0b3I8Q2hhcmFjdGVyVHlwZSwgNTEy
PiYgYnVmZmVyKQotewotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBUaGlzIGlzIGEgcG9vciBtYW4ncyBjb21wbGV0ZVVSTC4gRmFzdGVyIHdpdGggbGVzcyBtZW1v
cnkgYWxsb2NhdGlvbi4KLSAgICAvLyBGSVhNRTogSXQncyBtaXNzaW5nIGEgbG90IG9mIHdoYXQg
Y29tcGxldGVVUkwgZG9lcyBhbmQgYSBsb3Qgb2Ygd2hhdCBVUkwgZG9lcy4KLSAgICAvLyBGb3Ig
ZXhhbXBsZSwgaXQgZG9lcyBub3QgaGFuZGxlIGludGVybmF0aW9uYWwgZG9tYWluIG5hbWVzIHBy
b3Blcmx5LgotCi0gICAgLy8gRklYTUU6IEl0IGlzIHdyb25nIHRoYXQgd2UgZG8gbm90IGRvIGZ1
cnRoZXIgcHJvY2Vzc2luZyBvbiBzdHJpbmdzIHRoYXQgaGF2ZSAiOi8vIiBpbiB0aGVtOgotICAg
IC8vICAgIDEpIFRoZSAiOi8vIiBjb3VsZCBiZSBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yLgotICAg
IC8vICAgIDIpIFRoZSBVUkwncyBwYXRoIGNvdWxkIGhhdmUgYSAiLy4vIiBvciBhICIvLi4vIiBv
ciBhICIvLyIgc2VxdWVuY2UgaW4gaXQuCi0KLSAgICAvLyBGSVhNRTogbmVlZHNUcmFpbGluZ1Ns
YXNoIGRvZXMgbm90IHByb3Blcmx5IHJldHVybiB0cnVlIGZvciBhIFVSTCB0aGF0IGhhcyBubyBw
YXRoLCBidXQgZG9lcwotICAgIC8vIGhhdmUgYSBxdWVyeSBvciBhbmNob3IuCi0KLSAgICBib29s
IGhhc0NvbG9uU2xhc2hTbGFzaCA9IGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNoYXJhY3RlcnMs
IGxlbmd0aCk7Ci0KLSAgICBpZiAoaGFzQ29sb25TbGFzaFNsYXNoICYmICFuZWVkc1RyYWlsaW5n
U2xhc2goY2hhcmFjdGVycywgbGVuZ3RoKSkgewotICAgICAgICBidWZmZXIuYXBwZW5kKGNoYXJh
Y3RlcnMsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLQotICAgIGlmIChoYXND
b2xvblNsYXNoU2xhc2gpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5jb3JyZWN0IGZv
ciBVUkxzIHRoYXQgaGF2ZSBhIHF1ZXJ5IG9yIGFuY2hvcjsgdGhlICIvIiBuZWVkcyB0byBnbyBh
dCB0aGUKLSAgICAgICAgLy8gZW5kIG9mIHRoZSBwYXRoLCAqYmVmb3JlKiB0aGUgcXVlcnkgb3Ig
YW5jaG9yLgotICAgICAgICBidWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAg
ICAgIGJ1ZmZlci5hcHBlbmQoJy8nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghbGVuZ3RoKQotICAgICAgICBhcHBlbmQoYnVmZmVyLCBiYXNlLnN0cmluZygpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgc3dpdGNoIChjaGFyYWN0ZXJzWzBdKSB7Ci0gICAgICAgICAgICBjYXNl
ICcvJzoKLSAgICAgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBTdHJpbmdWaWV3KGJhc2Uuc3Ry
aW5nKCkpLnN1YnN0cmluZygwLCBiYXNlLnBhdGhTdGFydCgpKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlICcjJzoKLSAgICAgICAgICAgICAgICBhcHBlbmQoYnVm
ZmVyLCBTdHJpbmdWaWV3KGJhc2Uuc3RyaW5nKCkpLnN1YnN0cmluZygwLCBiYXNlLnBhdGhFbmQo
KSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBTdHJpbmdWaWV3KGJhc2Uuc3RyaW5nKCkpLnN1YnN0
cmluZygwLCBiYXNlLnBhdGhBZnRlckxhc3RTbGFzaCgpKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5n
dGgpOwotICAgIGNsZWFuUGF0aChidWZmZXIpOwotICAgIGlmIChuZWVkc1RyYWlsaW5nU2xhc2go
YnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMg
aXMgaW5jb3JyZWN0IGZvciBVUkxzIHRoYXQgaGF2ZSBhIHF1ZXJ5IG9yIGFuY2hvcjsgdGhlICIv
IiBuZWVkcyB0byBnbyBhdCB0aGUKLSAgICAgICAgLy8gZW5kIG9mIHRoZSBwYXRoLCAqYmVmb3Jl
KiB0aGUgcXVlcnkgb3IgYW5jaG9yLgotICAgICAgICBidWZmZXIuYXBwZW5kKCcvJyk7Ci0gICAg
fQotCi0gICAgcmV0dXJuOwotfQotCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVVJM
JiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKLXsKLSAgICBpZiAoYXR0
cmlidXRlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWJhc2Uu
c3RyaW5nKCkuaXNFbXB0eSgpICYmIGJhc2Uuc3RyaW5nKCkuaXM4Qml0KCkgJiYgYXR0cmlidXRl
VVJMLmlzOEJpdCgpKSB7Ci0gICAgICAgIFZlY3RvcjxMQ2hhciwgNTEyPiB1cmw7Ci0gICAgICAg
IHZpc2l0ZWRVUkxJbmxpbmUoYmFzZSwgYXR0cmlidXRlVVJMLmNoYXJhY3RlcnM4KCksIGF0dHJp
YnV0ZVVSTC5sZW5ndGgoKSwgdXJsKTsKLSAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICByZXR1cm4gdmlzaXRlZExpbmtIYXNoSW5saW5l
KHVybC5kYXRhKCksIHVybC5zaXplKCkpOwotICAgIH0KLQotICAgIFZlY3RvcjxVQ2hhciwgNTEy
PiB1cmw7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGF0dHJp
YnV0ZVVSTC5zdHJpbmcoKSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgdmlzaXRlZFVSTElu
bGluZShiYXNlLCBjaGFyYWN0ZXJzLCBhdHRyaWJ1dGVVUkwubGVuZ3RoKCksIHVybCk7Ci0gICAg
aWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHZpc2l0
ZWRMaW5rSGFzaElubGluZSh1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtI
YXNoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxNjU5OTVmZTNmMTVjMWIzMGI0M2FiYTdlYzkwZjU1YmNjNWI5YTc2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IExpbmtIYXNoX2gKLSNkZWZpbmUgTGlua0hhc2hfaAotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgVVJMOwotCi10eXBlZGVmIHVpbnQ2NF90IExpbmtIYXNoOwotCi0vLyBVc2Ug
dGhlIGxvdyAzMi1iaXRzIG9mIHRoZSA2NC1iaXQgTGlua0hhc2ggYXMgdGhlIGtleSBmb3IgSGFz
aFNldHMuCi1zdHJ1Y3QgTGlua0hhc2hIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChM
aW5rSGFzaCBrZXkpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpOyB9Ci0gICAg
c3RhdGljIGJvb2wgZXF1YWwoTGlua0hhc2ggYSwgTGlua0hhc2ggYikgeyByZXR1cm4gYSA9PSBi
OyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSB0cnVlOwotCi0gICAgLy8gU2VlIEFscmVhZHlIYXNoZWQ6OmF2b2lkRGVsZXRlZFZhbHVlLgot
ICAgIHN0YXRpYyB1bnNpZ25lZCBhdm9pZERlbGV0ZWRWYWx1ZShMaW5rSGFzaCBoYXNoNjQpCi0g
ICAgewotICAgICAgICBBU1NFUlQoaGFzaDY0KTsKLSAgICAgICAgdW5zaWduZWQgaGFzaCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihoYXNoNjQpOwotICAgICAgICB1bnNpZ25lZCBuZXdIYXNoID0g
aGFzaCB8ICghKGhhc2ggKyAxKSA8PCAzMSk7Ci0gICAgICAgIEFTU0VSVChuZXdIYXNoKTsKLSAg
ICAgICAgQVNTRVJUKG5ld0hhc2ggIT0gMHhGRkZGRkZGRik7Ci0gICAgICAgIHJldHVybiBuZXdI
YXNoOwotICAgIH0KLX07Ci0KLS8vIFJldHVybnMgdGhlIGhhc2ggb2YgdGhlIHN0cmluZyB0aGF0
IHdpbGwgYmUgdXNlZCBmb3IgdmlzaXRlZCBsaW5rIGNvbG9yaW5nLgotV0VCQ09SRV9FWFBPUlQg
TGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFN0cmluZyYgdXJsKTsKLVdFQkNPUkVfRVhQ
T1JUIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBs
ZW5ndGgpOwotCi0vLyBSZXNvbHZlcyB0aGUgcG90ZW50aWFsbHkgcmVsYXRpdmUgVVJMICJhdHRy
aWJ1dGVVUkwiIHJlbGF0aXZlIHRvIHRoZSBnaXZlbgotLy8gYmFzZSBVUkwsIGFuZCByZXR1cm5z
IHRoZSBoYXNoIG9mIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQKLS8v
IGxpbmsgY29sb3JpbmcuIEl0IHdpbGwgcmV0dXJuIHRoZSBzcGVjaWFsIHZhbHVlIG9mIDAgaWYg
YXR0cmlidXRlVVJMIGRvZXMgbm90Ci0vLyBsb29rIGxpa2UgYSByZWxhdGl2ZSBVUkwuCi1MaW5r
SGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcm
IGF0dHJpYnV0ZVVSTCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAgLy8g
TGlua0hhc2hfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkU3Ry
aW5nSGFzaC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRTdHJpbmdIYXNoLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45MTkwYzBkZjdlMDg2MTEzZWI0YjFmMzE4MmQxZjAwNzM4MGVkYTIzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkU3RyaW5nSGFz
aC5jcHAKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgIlVSTC5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMg
aW5saW5lIHNpemVfdCBmaW5kU2xhc2hEb3REb3RTbGFzaChjb25zdCBDaGFyYWN0ZXJUeXBlKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgcG9zaXRpb24pCit7CisgICAgaWYgKGxl
bmd0aCA8IDQpCisgICAgICAgIHJldHVybiBub3RGb3VuZDsKKyAgICBzaXplX3QgbG9vcExpbWl0
ID0gbGVuZ3RoIC0gMzsKKyAgICBmb3IgKHNpemVfdCBpID0gcG9zaXRpb247IGkgPCBsb29wTGlt
aXQ7ICsraSkgeworICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVy
c1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcuJyAmJiBjaGFyYWN0ZXJz
W2kgKyAzXSA9PSAnLycpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJu
IG5vdEZvdW5kOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRp
YyBpbmxpbmUgc2l6ZV90IGZpbmRTbGFzaFNsYXNoKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBwb3NpdGlvbikKK3sKKyAgICBpZiAobGVuZ3Ro
IDwgMikKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgIHNpemVfdCBsb29wTGltaXQgPSBs
ZW5ndGggLSAxOworICAgIGZvciAoc2l6ZV90IGkgPSBwb3NpdGlvbjsgaSA8IGxvb3BMaW1pdDsg
KytpKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kg
KyAxXSA9PSAnLycpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIG5v
dEZvdW5kOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBp
bmxpbmUgc2l6ZV90IGZpbmRTbGFzaERvdFNsYXNoKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBwb3NpdGlvbikKK3sKKyAgICBpZiAobGVuZ3Ro
IDwgMykKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgIHNpemVfdCBsb29wTGltaXQgPSBs
ZW5ndGggLSAyOworICAgIGZvciAoc2l6ZV90IGkgPSBwb3NpdGlvbjsgaSA8IGxvb3BMaW1pdDsg
KytpKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kg
KyAxXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy8nKQorICAgICAgICAgICAgcmV0
dXJuIGk7CisgICAgfQorICAgIHJldHVybiBub3RGb3VuZDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNDb2xvblNsYXNo
U2xhc2goY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQor
eworICAgIGlmIChsZW5ndGggPCAzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdW5zaWdu
ZWQgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bG9vcExpbWl0OyArK2kpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJzonICYmIGNo
YXJhY3RlcnNbaSArIDFdID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLycpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBzcXVlZXpl
T3V0TnVsbENoYXJhY3RlcnMoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIHN0cmluZykKK3sK
KyAgICBzaXplX3Qgc2l6ZSA9IHN0cmluZy5zaXplKCk7CisgICAgc2l6ZV90IGkgPSAwOworICAg
IGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKCFzdHJpbmdbaV0pCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGkgPT0gc2l6ZSkKKyAgICAgICAgcmV0
dXJuOworICAgIHNpemVfdCBqID0gaTsKKyAgICBmb3IgKCsraTsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBpZiAoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIgPSBzdHJpbmdbaV0pCisgICAgICAg
ICAgICBzdHJpbmdbaisrXSA9IGNoYXJhY3RlcjsKKyAgICB9CisgICAgQVNTRVJUKGogPCBzaXpl
KTsKKyAgICBzdHJpbmcuc2hyaW5rKGopOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KK3N0YXRpYyB2b2lkIGNsZWFuU2xhc2hEb3REb3RTbGFzaGVzKFZlY3RvcjxDaGFy
YWN0ZXJUeXBlLCA1MTI+JiBwYXRoLCBzaXplX3QgZmlyc3RTbGFzaCkKK3sKKyAgICBzaXplX3Qg
c2xhc2ggPSBmaXJzdFNsYXNoOworICAgIGRvIHsKKyAgICAgICAgc2l6ZV90IHByZXZpb3VzU2xh
c2ggPSBzbGFzaCA/IHJldmVyc2VGaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJy8nLCBz
bGFzaCAtIDEpIDogbm90Rm91bmQ7CisgICAgICAgIC8vIERvbid0IHJlbW92ZSB0aGUgaG9zdCwg
aS5lLiBodHRwOi8vZm9vLm9yZy8uLi9mb28uaHRtbAorICAgICAgICBpZiAocHJldmlvdXNTbGFz
aCA9PSBub3RGb3VuZCB8fCAocHJldmlvdXNTbGFzaCA+IDMgJiYgcGF0aFtwcmV2aW91c1NsYXNo
IC0gMl0gPT0gJzonICYmIHBhdGhbcHJldmlvdXNTbGFzaCAtIDFdID09ICcvJykpIHsKKyAgICAg
ICAgICAgIHBhdGhbc2xhc2hdID0gMDsKKyAgICAgICAgICAgIHBhdGhbc2xhc2ggKyAxXSA9IDA7
CisgICAgICAgICAgICBwYXRoW3NsYXNoICsgMl0gPSAwOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IHByZXZpb3VzU2xhc2g7IGkgPCBzbGFzaCArIDM7ICsr
aSkKKyAgICAgICAgICAgICAgICBwYXRoW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICBzbGFz
aCArPSAzOworICAgIH0gd2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdERvdFNsYXNoKHBhdGgu
ZGF0YSgpLCBwYXRoLnNpemUoKSwgc2xhc2gpKSAhPSBub3RGb3VuZCk7CisgICAgc3F1ZWV6ZU91
dE51bGxDaGFyYWN0ZXJzKHBhdGgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KK3N0YXRpYyB2b2lkIG1lcmdlRG91YmxlU2xhc2hlcyhWZWN0b3I8Q2hhcmFjdGVyVHlw
ZSwgNTEyPiYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gpCit7CisgICAgc2l6ZV90IHJlZlBvcyA9
IGZpbmQocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAnIycpOworICAgIGlmICghcmVmUG9zIHx8
IHJlZlBvcyA9PSBub3RGb3VuZCkKKyAgICAgICAgcmVmUG9zID0gcGF0aC5zaXplKCk7CisKKyAg
ICBzaXplX3Qgc2xhc2ggPSBmaXJzdFNsYXNoOworICAgIHdoaWxlIChzbGFzaCA8IHJlZlBvcykg
eworICAgICAgICBpZiAoIXNsYXNoIHx8IHBhdGhbc2xhc2ggLSAxXSAhPSAnOicpCisgICAgICAg
ICAgICBwYXRoW3NsYXNoKytdID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2xhc2gg
Kz0gMjsKKyAgICAgICAgaWYgKChzbGFzaCA9IGZpbmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBw
YXRoLnNpemUoKSwgc2xhc2gpKSA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIHZvaWQgY2xlYW5TbGFzaERvdFNsYXNoZXMo
VmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQorewor
ICAgIHNpemVfdCBzbGFzaCA9IGZpcnN0U2xhc2g7CisgICAgZG8geworICAgICAgICBwYXRoW3Ns
YXNoXSA9IDA7CisgICAgICAgIHBhdGhbc2xhc2ggKyAxXSA9IDA7CisgICAgICAgIHNsYXNoICs9
IDI7CisgICAgfSB3aGlsZSAoKHNsYXNoID0gZmluZFNsYXNoRG90U2xhc2gocGF0aC5kYXRhKCks
IHBhdGguc2l6ZSgpLCBzbGFzaCkpICE9IG5vdEZvdW5kKTsKKyAgICBzcXVlZXplT3V0TnVsbENo
YXJhY3RlcnMocGF0aCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
c3RhdGljIGlubGluZSB2b2lkIGNsZWFuUGF0aChWZWN0b3I8Q2hhcmFjdGVyVHlwZSwgNTEyPiYg
cGF0aCkKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVyeSBv
ciBhbmNob3IgcGFydCBvZiB0aGUgVVJMLgorICAgIHNpemVfdCBmaXJzdFNsYXNoID0gZmluZFNs
YXNoRG90RG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAwKTsKKyAgICBpZiAoZmly
c3RTbGFzaCAhPSBub3RGb3VuZCkKKyAgICAgICAgY2xlYW5TbGFzaERvdERvdFNsYXNoZXMocGF0
aCwgZmlyc3RTbGFzaCk7CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBkbyB0aGlzIGluIHRo
ZSBxdWVyeSBwYXJ0LgorICAgIGZpcnN0U2xhc2ggPSBmaW5kU2xhc2hTbGFzaChwYXRoLmRhdGEo
KSwgcGF0aC5zaXplKCksIDApOworICAgIGlmIChmaXJzdFNsYXNoICE9IG5vdEZvdW5kKQorICAg
ICAgICBtZXJnZURvdWJsZVNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7CisKKyAgICAvLyBGSVhN
RTogU2hvdWxkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVyeSBvciBhbmNob3IgcGFydC4KKyAgICBm
aXJzdFNsYXNoID0gZmluZFNsYXNoRG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAw
KTsKKyAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKKyAgICAgICAgY2xlYW5TbGFzaERv
dFNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIG1hdGNoTGV0dGVyKENoYXJhY3RlclR5cGUg
YywgY2hhciBsb3dlcmNhc2VMZXR0ZXIpCit7CisgICAgcmV0dXJuIChjIHwgMHgyMCkgPT0gbG93
ZXJjYXNlTGV0dGVyOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0
YXRpYyBpbmxpbmUgYm9vbCBuZWVkc1RyYWlsaW5nU2xhc2goY29uc3QgQ2hhcmFjdGVyVHlwZSog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChsZW5ndGggPCA2KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtYXRjaExldHRlcihjaGFyYWN0ZXJzWzBdLCAn
aCcpIHx8ICFtYXRjaExldHRlcihjaGFyYWN0ZXJzWzFdLCAndCcpIHx8ICFtYXRjaExldHRlcihj
aGFyYWN0ZXJzWzJdLCAndCcpIHx8ICFtYXRjaExldHRlcihjaGFyYWN0ZXJzWzNdLCAncCcpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEoY2hhcmFjdGVyc1s0XSA9PSAnOicgfHwg
KG1hdGNoTGV0dGVyKGNoYXJhY3RlcnNbNF0sICdzJykgJiYgY2hhcmFjdGVyc1s1XSA9PSAnOicp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgcG9zID0gY2hhcmFjdGVy
c1s0XSA9PSAnOicgPyA1IDogNjsKKworICAgIC8vIFNraXAgaW5pdGlhbCB0d28gc2xhc2hlcyBp
ZiBwcmVzZW50LgorICAgIGlmIChwb3MgKyAxIDwgbGVuZ3RoICYmIGNoYXJhY3RlcnNbcG9zXSA9
PSAnLycgJiYgY2hhcmFjdGVyc1twb3MgKyAxXSA9PSAnLycpCisgICAgICAgIHBvcyArPSAyOwor
CisgICAgLy8gRmluZCBuZXh0IHNsYXNoLgorICAgIHdoaWxlIChwb3MgPCBsZW5ndGggJiYgY2hh
cmFjdGVyc1twb3NdICE9ICcvJykKKyAgICAgICAgKytwb3M7CisKKyAgICByZXR1cm4gcG9zID09
IGxlbmd0aDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMg
QUxXQVlTX0lOTElORSBTaGFyZWRTdHJpbmdIYXNoIGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoSW5s
aW5lKGNvbnN0IENoYXJhY3RlclR5cGUqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJl
dHVybiBBbHJlYWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZShTdHJpbmdIYXNoZXI6OmNvbXB1
dGVIYXNoKHVybCwgbGVuZ3RoKSk7Cit9CisKK1NoYXJlZFN0cmluZ0hhc2ggY29tcHV0ZVNoYXJl
ZFN0cmluZ0hhc2goY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0g
dXJsLmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoIHx8IHVybC5pczhCaXQoKSkKKyAgICAgICAg
cmV0dXJuIGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoSW5saW5lKHVybC5jaGFyYWN0ZXJzOCgpLCBs
ZW5ndGgpOworICAgIHJldHVybiBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSh1cmwuY2hh
cmFjdGVyczE2KCksIGxlbmd0aCk7Cit9CisKK1NoYXJlZFN0cmluZ0hhc2ggY29tcHV0ZVNoYXJl
ZFN0cmluZ0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJl
dHVybiBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSh1cmwsIGxlbmd0aCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIEFMV0FZU19JTkxJTkUgdm9p
ZCBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZShjb25zdCBVUkwmIGJhc2UsIGNvbnN0IENo
YXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVmVjdG9yPENoYXJhY3Rl
clR5cGUsIDUxMj4mIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gVGhpcyBpcyBhIHBvb3IgbWFuJ3MgY29tcGxldGVVUkwuIEZhc3RlciB3aXRo
IGxlc3MgbWVtb3J5IGFsbG9jYXRpb24uCisgICAgLy8gRklYTUU6IEl0J3MgbWlzc2luZyBhIGxv
dCBvZiB3aGF0IGNvbXBsZXRlVVJMIGRvZXMgYW5kIGEgbG90IG9mIHdoYXQgVVJMIGRvZXMuCisg
ICAgLy8gRm9yIGV4YW1wbGUsIGl0IGRvZXMgbm90IGhhbmRsZSBpbnRlcm5hdGlvbmFsIGRvbWFp
biBuYW1lcyBwcm9wZXJseS4KKworICAgIC8vIEZJWE1FOiBJdCBpcyB3cm9uZyB0aGF0IHdlIGRv
IG5vdCBkbyBmdXJ0aGVyIHByb2Nlc3Npbmcgb24gc3RyaW5ncyB0aGF0IGhhdmUgIjovLyIgaW4g
dGhlbToKKyAgICAvLyAgICAxKSBUaGUgIjovLyIgY291bGQgYmUgaW4gdGhlIHF1ZXJ5IG9yIGFu
Y2hvci4KKyAgICAvLyAgICAyKSBUaGUgVVJMJ3MgcGF0aCBjb3VsZCBoYXZlIGEgIi8uLyIgb3Ig
YSAiLy4uLyIgb3IgYSAiLy8iIHNlcXVlbmNlIGluIGl0LgorCisgICAgLy8gRklYTUU6IG5lZWRz
VHJhaWxpbmdTbGFzaCBkb2VzIG5vdCBwcm9wZXJseSByZXR1cm4gdHJ1ZSBmb3IgYSBVUkwgdGhh
dCBoYXMgbm8gcGF0aCwgYnV0IGRvZXMKKyAgICAvLyBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yLgor
CisgICAgYm9vbCBoYXNDb2xvblNsYXNoU2xhc2ggPSBjb250YWluc0NvbG9uU2xhc2hTbGFzaChj
aGFyYWN0ZXJzLCBsZW5ndGgpOworCisgICAgaWYgKGhhc0NvbG9uU2xhc2hTbGFzaCAmJiAhbmVl
ZHNUcmFpbGluZ1NsYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsKKyAgICAgICAgYnVmZmVyLmFw
cGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisKKyAg
ICBpZiAoaGFzQ29sb25TbGFzaFNsYXNoKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGlu
Y29ycmVjdCBmb3IgVVJMcyB0aGF0IGhhdmUgYSBxdWVyeSBvciBhbmNob3I7IHRoZSAiLyIgbmVl
ZHMgdG8gZ28gYXQgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUgcGF0aCwgKmJlZm9yZSogdGhl
IHF1ZXJ5IG9yIGFuY2hvci4KKyAgICAgICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5n
dGgpOworICAgICAgICBidWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgYXBwZW5kKGJ1ZmZlciwgYmFzZS5zdHJpbmco
KSk7CisgICAgZWxzZSB7CisgICAgICAgIHN3aXRjaCAoY2hhcmFjdGVyc1swXSkgeworICAgICAg
ICBjYXNlICcvJzoKKyAgICAgICAgICAgIGFwcGVuZChidWZmZXIsIFN0cmluZ1ZpZXcoYmFzZS5z
dHJpbmcoKSkuc3Vic3RyaW5nKDAsIGJhc2UucGF0aFN0YXJ0KCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICcjJzoKKyAgICAgICAgICAgIGFwcGVuZChidWZmZXIsIFN0cmlu
Z1ZpZXcoYmFzZS5zdHJpbmcoKSkuc3Vic3RyaW5nKDAsIGJhc2UucGF0aEVuZCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFwcGVuZChidWZm
ZXIsIFN0cmluZ1ZpZXcoYmFzZS5zdHJpbmcoKSkuc3Vic3RyaW5nKDAsIGJhc2UucGF0aEFmdGVy
TGFzdFNsYXNoKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IGJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICBjbGVhblBhdGgoYnVmZmVy
KTsKKyAgICBpZiAobmVlZHNUcmFpbGluZ1NsYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXpl
KCkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluY29ycmVjdCBmb3IgVVJMcyB0aGF0
IGhhdmUgYSBxdWVyeSBvciBhbmNob3I7IHRoZSAiLyIgbmVlZHMgdG8gZ28gYXQgdGhlCisgICAg
ICAgIC8vIGVuZCBvZiB0aGUgcGF0aCwgKmJlZm9yZSogdGhlIHF1ZXJ5IG9yIGFuY2hvci4KKyAg
ICAgICAgYnVmZmVyLmFwcGVuZCgnLycpOworICAgIH0KKworICAgIHJldHVybjsKK30KKworU2hh
cmVkU3RyaW5nSGFzaCBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaChjb25zdCBVUkwmIGJhc2UsIGNv
bnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQoreworICAgIGlmIChhdHRyaWJ1dGVVUkwu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghYmFzZS5zdHJpbmcoKS5p
c0VtcHR5KCkgJiYgYmFzZS5zdHJpbmcoKS5pczhCaXQoKSAmJiBhdHRyaWJ1dGVVUkwuaXM4Qml0
KCkpIHsKKyAgICAgICAgVmVjdG9yPExDaGFyLCA1MTI+IHVybDsKKyAgICAgICAgY29tcHV0ZVNo
YXJlZFN0cmluZ0hhc2hJbmxpbmUoYmFzZSwgYXR0cmlidXRlVVJMLmNoYXJhY3RlcnM4KCksIGF0
dHJpYnV0ZVVSTC5sZW5ndGgoKSwgdXJsKTsKKyAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gY29tcHV0ZVNoYXJlZFN0cmlu
Z0hhc2hJbmxpbmUodXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7CisgICAgfQorCisgICAgVmVjdG9y
PFVDaGFyLCA1MTI+IHVybDsKKyAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmlu
Z1ZpZXcoYXR0cmlidXRlVVJMLnN0cmluZygpKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKyAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKKyAgICBj
b21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZShiYXNlLCBjaGFyYWN0ZXJzLCBhdHRyaWJ1dGVV
UkwubGVuZ3RoKCksIHVybCk7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoSW5saW5lKHVybC5kYXRh
KCksIHVybC5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRTdHJpbmdIYXNoLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRTdHJpbmdIYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2EwMzNjM2ZiN2Uw
MDY2YTUzM2U4YTVkMGQ0MjRjZjE3YThkNGVhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZFN0cmluZ0hhc2guaApAQCAtMCwwICsxLDY1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFVSTDsKKwordHlwZWRlZiB1aW50
NjRfdCBTaGFyZWRTdHJpbmdIYXNoOworCisvLyBVc2UgdGhlIGxvdyAzMi1iaXRzIG9mIHRoZSA2
NC1iaXQgU2hhcmVkU3RyaW5nSGFzaCBhcyB0aGUga2V5IGZvciBIYXNoU2V0cy4KK3N0cnVjdCBT
aGFyZWRTdHJpbmdIYXNoSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goU2hhcmVkU3Ry
aW5nSGFzaCBrZXkpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpOyB9CisgICAg
c3RhdGljIGJvb2wgZXF1YWwoU2hhcmVkU3RyaW5nSGFzaCBhLCBTaGFyZWRTdHJpbmdIYXNoIGIp
IHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKKworICAgIC8vIFNlZSBBbHJlYWR5SGFzaGVkOjphdm9p
ZERlbGV0ZWRWYWx1ZS4KKyAgICBzdGF0aWMgdW5zaWduZWQgYXZvaWREZWxldGVkVmFsdWUoU2hh
cmVkU3RyaW5nSGFzaCBoYXNoNjQpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzaDY0KTsKKyAg
ICAgICAgdW5zaWduZWQgaGFzaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihoYXNoNjQpOworICAg
ICAgICB1bnNpZ25lZCBuZXdIYXNoID0gaGFzaCB8ICghKGhhc2ggKyAxKSA8PCAzMSk7CisgICAg
ICAgIEFTU0VSVChuZXdIYXNoKTsKKyAgICAgICAgQVNTRVJUKG5ld0hhc2ggIT0gMHhGRkZGRkZG
Rik7CisgICAgICAgIHJldHVybiBuZXdIYXNoOworICAgIH0KK307CisKKy8vIFJldHVybnMgdGhl
IGhhc2ggb2YgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdmlzaXRlZCBsaW5rIGNv
bG9yaW5nLgorV0VCQ09SRV9FWFBPUlQgU2hhcmVkU3RyaW5nSGFzaCBjb21wdXRlU2hhcmVkU3Ry
aW5nSGFzaChjb25zdCBTdHJpbmcmIHVybCk7CitXRUJDT1JFX0VYUE9SVCBTaGFyZWRTdHJpbmdI
YXNoIGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxl
bmd0aCk7CisKKy8vIFJlc29sdmVzIHRoZSBwb3RlbnRpYWxseSByZWxhdGl2ZSBVUkwgImF0dHJp
YnV0ZVVSTCIgcmVsYXRpdmUgdG8gdGhlIGdpdmVuCisvLyBiYXNlIFVSTCwgYW5kIHJldHVybnMg
dGhlIGhhc2ggb2YgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdmlzaXRlZAorLy8g
bGluayBjb2xvcmluZy4gSXQgd2lsbCByZXR1cm4gdGhlIHNwZWNpYWwgdmFsdWUgb2YgMCBpZiBh
dHRyaWJ1dGVVUkwgZG9lcyBub3QKKy8vIGxvb2sgbGlrZSBhIHJlbGF0aXZlIFVSTC4KK1NoYXJl
ZFN0cmluZ0hhc2ggY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2goY29uc3QgVVJMJiBiYXNlLCBjb25z
dCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0
L0NNYWtlTGlzdHMudHh0CmluZGV4IDAyYzMyYmVlZTYyMGNiNzEyYzY5MWVkNWZiY2MyOTk0Njcw
YjhkYTYuLmEzNjM4NzFkOGI2NmFiZjc2NDFkM2I5ZmE5MGY3MGY2NzAyNTYwYTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFr
ZUxpc3RzLnR4dApAQCAtMTcxLDYgKzE3MSw3IEBAIHNldChXZWJLaXRfU09VUkNFUwogICAgIFNo
YXJlZC9Gb250SW5mby5jcHAKICAgICBTaGFyZWQvRnJhbWVJbmZvRGF0YS5jcHAKICAgICBTaGFy
ZWQvTGF5ZXJUcmVlQ29udGV4dC5jcHAKKyAgICBTaGFyZWQvTGlua0hhc2hUYWJsZS5jcHAKICAg
ICBTaGFyZWQvTG9hZFBhcmFtZXRlcnMuY3BwCiAgICAgU2hhcmVkL05hdmlnYXRpb25BY3Rpb25E
YXRhLmNwcAogICAgIFNoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEuY3BwCkBAIC0xNzksMTAg
KzE4MCwxMCBAQCBzZXQoV2ViS2l0X1NPVVJDRVMKICAgICBTaGFyZWQvU2Vzc2lvblRyYWNrZXIu
Y3BwCiAgICAgU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAKICAgICBTaGFyZWQvU2hhcmVhYmxl
UmVzb3VyY2UuY3BwCisgICAgU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hTdG9yZS5jcHAKICAgICBT
aGFyZWQvU3RhdGlzdGljc0RhdGEuY3BwCiAgICAgU2hhcmVkL1VwZGF0ZUluZm8uY3BwCiAgICAg
U2hhcmVkL1VzZXJEYXRhLmNwcAotICAgIFNoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmNwcAogICAg
IFNoYXJlZC9XZWJCYWNrRm9yd2FyZExpc3RJdGVtLmNwcAogICAgIFNoYXJlZC9XZWJDb21waWxl
ZENvbnRlbnRSdWxlTGlzdC5jcHAKICAgICBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxp
c3REYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkU3RyaW5n
SGFzaFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hTdG9y
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDU5MjAzMDM5MWEzYTczYzIyMWM5MDI0ZTFhMzQ0MzM3YjY0Yjk5
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hh
c2hTdG9yZS5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRTdHJpbmdIYXNoU3RvcmUuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjb25zdCB1bnNpZ25l
ZCBzaGFyZWRTdHJpbmdIYXNoVGFibGVNYXhMb2FkID0gMjsKKworc3RhdGljIHVuc2lnbmVkIG5l
eHRQb3dlck9mMih1bnNpZ25lZCB2KQoreworICAgIC8vIFRha2VuIGZyb20gaHR0cDovL3d3dy5j
cy51dGsuZWR1L352b3NlL2Mtc3R1ZmYvYml0aGFja3MuaHRtbAorICAgIC8vIERldmlzZWQgYnkg
U2VhbiBBbmRlcnNvbiwgU2VwZW1iZXIgMTQsIDIwMDEKKworICAgIHYtLTsKKyAgICB2IHw9IHYg
Pj4gMTsKKyAgICB2IHw9IHYgPj4gMjsKKyAgICB2IHw9IHYgPj4gNDsKKyAgICB2IHw9IHYgPj4g
ODsKKyAgICB2IHw9IHYgPj4gMTY7CisgICAgdisrOworCisgICAgcmV0dXJuIHY7Cit9CisKK3N0
YXRpYyB1bnNpZ25lZCB0YWJsZVNpemVGb3JLZXlDb3VudCh1bnNpZ25lZCBrZXlDb3VudCkKK3sK
KyAgICAvLyBXZSB3YW50IHRoZSB0YWJsZSB0byBiZSBhdCBsZWFzdCBoYWxmIGVtcHR5LgorICAg
IHVuc2lnbmVkIHRhYmxlU2l6ZSA9IG5leHRQb3dlck9mMihrZXlDb3VudCAqIHNoYXJlZFN0cmlu
Z0hhc2hUYWJsZU1heExvYWQpOworCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHRhYmxlIHNpemUg
aXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgYSBwYWdlLgorICAgIHNpemVfdCBtaW5pbXVtVGFibGVT
aXplID0gU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpIC8gc2l6ZW9mKFNoYXJlZFN0cmlu
Z0hhc2gpOworICAgIGlmICh0YWJsZVNpemUgPCBtaW5pbXVtVGFibGVTaXplKQorICAgICAgICBy
ZXR1cm4gbWluaW11bVRhYmxlU2l6ZTsKKworICAgIHJldHVybiB0YWJsZVNpemU7Cit9CisKK1No
YXJlZFN0cmluZ0hhc2hTdG9yZTo6U2hhcmVkU3RyaW5nSGFzaFN0b3JlKENsaWVudCYgY2xpZW50
KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFz
aGVzVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmU2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpw
ZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzVGltZXJGaXJlZCkKK3sKK30KKworYm9vbCBTaGFyZWRT
dHJpbmdIYXNoU3RvcmU6OmNyZWF0ZVNoYXJlZE1lbW9yeUhhbmRsZShTaGFyZWRNZW1vcnk6Okhh
bmRsZSYgaGFuZGxlKQoreworICAgIHJldHVybiBtX3RhYmxlLnNoYXJlZE1lbW9yeSgpLT5jcmVh
dGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKK30K
Kwordm9pZCBTaGFyZWRTdHJpbmdIYXNoU3RvcmU6OmFkZChTaGFyZWRTdHJpbmdIYXNoIHNoYXJl
ZFN0cmluZ0hhc2gpCit7CisgICAgbV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzLmFkZChzaGFy
ZWRTdHJpbmdIYXNoKTsKKworICAgIGlmICghbV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzVGlt
ZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzVGltZXIu
c3RhcnRPbmVTaG90KDBfcyk7Cit9CisKK3ZvaWQgU2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpjbGVh
cigpCit7CisgICAgbV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzVGltZXIuc3RvcCgpOworICAg
IG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlcy5jbGVhcigpOworICAgIG1fa2V5Q291bnQgPSAw
OworICAgIG1fdGFibGVTaXplID0gMDsKKyAgICBtX3RhYmxlLmNsZWFyKCk7Cit9CisKK3ZvaWQg
U2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpyZXNpemVUYWJsZSh1bnNpZ25lZCBuZXdUYWJsZVNpemUp
Cit7CisgICAgYXV0byBuZXdUYWJsZU1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUobmV3
VGFibGVTaXplICogc2l6ZW9mKFNoYXJlZFN0cmluZ0hhc2gpKTsKKyAgICBpZiAoIW5ld1RhYmxl
TWVtb3J5KSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIHNoYXJlZCBt
ZW1vcnkgZm9yIFNoYXJlZFN0cmluZ0hhc2ggdGFibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1lbXNldChuZXdUYWJsZU1lbW9yeS0+ZGF0YSgpLCAwLCBuZXdUYWJsZU1lbW9y
eS0+c2l6ZSgpKTsKKworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGN1cnJlbnRUYWJsZU1lbW9y
eSA9IG1fdGFibGUuc2hhcmVkTWVtb3J5KCk7CisgICAgdW5zaWduZWQgY3VycmVudFRhYmxlU2l6
ZSA9IG1fdGFibGVTaXplOworCisgICAgbV90YWJsZS5zZXRTaGFyZWRNZW1vcnkobmV3VGFibGVN
ZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7
CisKKyAgICBpZiAoY3VycmVudFRhYmxlTWVtb3J5KSB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
Y3VycmVudFRhYmxlU2l6ZSwgY3VycmVudFRhYmxlTWVtb3J5LT5zaXplKCkgPT0gY3VycmVudFRh
YmxlU2l6ZSAqIHNpemVvZihTaGFyZWRTdHJpbmdIYXNoKSk7CisKKyAgICAgICAgLy8gR28gdGhy
b3VnaCB0aGUgY3VycmVudCBoYXNoIHRhYmxlIGFuZCByZS1hZGQgYWxsIGVudHJpZXMgdG8gdGhl
IG5ldyBoYXNoIHRhYmxlLgorICAgICAgICBjb25zdCBTaGFyZWRTdHJpbmdIYXNoKiBjdXJyZW50
U2hhcmVkU3RyaW5nSGFzaGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2hhcmVkU3RyaW5nSGFzaCo+
KGN1cnJlbnRUYWJsZU1lbW9yeS0+ZGF0YSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGN1cnJlbnRUYWJsZVNpemU7ICsraSkgeworICAgICAgICAgICAgYXV0byBzaGFyZWRT
dHJpbmdIYXNoID0gY3VycmVudFNoYXJlZFN0cmluZ0hhc2hlc1tpXTsKKyAgICAgICAgICAgIGlm
ICghc2hhcmVkU3RyaW5nSGFzaCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgYm9vbCBkaWRBZGRTaGFyZWRTdHJpbmdIYXNoID0gbV90YWJsZS5hZGQoc2hhcmVkU3Ry
aW5nSGFzaCk7CisKKyAgICAgICAgICAgIC8vIEl0IHNob3VsZCBhbHdheXMgYmUgcG9zc2libGUg
dG8gYWRkIHRoZSBTaGFyZWRTdHJpbmdIYXNoIHRvIGEgbmV3IHRhYmxlLgorICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChkaWRBZGRTaGFyZWRTdHJpbmdIYXNoLCBkaWRBZGRTaGFyZWRTdHJpbmdI
YXNoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgc2hhcmVkU3RyaW5nSGFz
aCA6IG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlcykgeworICAgICAgICBpZiAobV90YWJsZS5h
ZGQoc2hhcmVkU3RyaW5nSGFzaCkpCisgICAgICAgICAgICArK21fa2V5Q291bnQ7CisgICAgfQor
ICAgIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlcy5jbGVhcigpOworCisgICAgbV9jbGllbnQu
ZGlkSW52YWxpZGF0ZVNoYXJlZE1lbW9yeSgpOworfQorCit2b2lkIFNoYXJlZFN0cmluZ0hhc2hT
dG9yZTo6cGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVyRmlyZWQoKQoreworICAgIHVuc2ln
bmVkIGN1cnJlbnRUYWJsZVNpemUgPSBtX3RhYmxlU2l6ZTsKKyAgICB1bnNpZ25lZCBuZXdUYWJs
ZVNpemUgPSB0YWJsZVNpemVGb3JLZXlDb3VudChtX2tleUNvdW50ICsgbV9wZW5kaW5nU2hhcmVk
U3RyaW5nSGFzaGVzLnNpemUoKSk7CisKKyAgICBuZXdUYWJsZVNpemUgPSBzdGQ6Om1heChjdXJy
ZW50VGFibGVTaXplLCBuZXdUYWJsZVNpemUpOworCisgICAgaWYgKGN1cnJlbnRUYWJsZVNpemUg
IT0gbmV3VGFibGVTaXplKSB7CisgICAgICAgIHJlc2l6ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8U2hhcmVkU3RyaW5nSGFzaD4gYWRk
ZWRTaGFyZWRTdHJpbmdIYXNoZXM7CisgICAgYWRkZWRTaGFyZWRTdHJpbmdIYXNoZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShtX3BlbmRpbmdTaGFyZWRTdHJpbmdIYXNoZXMuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8mIHNoYXJlZFN0cmluZ0hhc2ggOiBtX3BlbmRpbmdTaGFyZWRTdHJpbmdIYXNo
ZXMpIHsKKyAgICAgICAgaWYgKG1fdGFibGUuYWRkKHNoYXJlZFN0cmluZ0hhc2gpKSB7CisgICAg
ICAgICAgICBhZGRlZFNoYXJlZFN0cmluZ0hhc2hlcy51bmNoZWNrZWRBcHBlbmQoc2hhcmVkU3Ry
aW5nSGFzaCk7CisgICAgICAgICAgICArK21fa2V5Q291bnQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBtX3BlbmRpbmdTaGFyZWRTdHJpbmdIYXNoZXMuY2xlYXIoKTsKKworICAgIGlmICghYWRk
ZWRTaGFyZWRTdHJpbmdIYXNoZXMuaXNFbXB0eSgpKQorICAgICAgICBtX2NsaWVudC5kaWRBZGRT
aGFyZWRTdHJpbmdIYXNoZXMoYWRkZWRTaGFyZWRTdHJpbmdIYXNoZXMpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0
cmluZ0hhc2hTdG9yZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFN0
b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjU0ODM5MzRiYzE2OTNkMTllNzk1ZDU5MGM2NTRhMDhiZDRjZThj
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hh
c2hTdG9yZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFz
aFRhYmxlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRTdHJpbmdIYXNoLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgU2hhcmVkU3RyaW5nSGFzaFN0b3JlIHsKK3B1YmxpYzoKKyAgICBj
bGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEludmFsaWRhdGVTaGFyZWRNZW1vcnkoKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRTaGFyZWRTdHJpbmdIYXNoZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2g+JikgPSAwOworICAgIH07CisKKyAgICBTaGFy
ZWRTdHJpbmdIYXNoU3RvcmUoQ2xpZW50Jik7CisKKyAgICBib29sIGNyZWF0ZVNoYXJlZE1lbW9y
eUhhbmRsZShTaGFyZWRNZW1vcnk6OkhhbmRsZSYpOworICAgIHZvaWQgYWRkKFdlYkNvcmU6OlNo
YXJlZFN0cmluZ0hhc2gpOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuICFtX2tleUNvdW50OyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCByZXNp
emVUYWJsZSh1bnNpZ25lZCBuZXdUYWJsZVNpemUpOworICAgIHZvaWQgcGVuZGluZ1NoYXJlZFN0
cmluZ0hhc2hlc1RpbWVyRmlyZWQoKTsKKworICAgIENsaWVudCYgbV9jbGllbnQ7CisgICAgdW5z
aWduZWQgbV9rZXlDb3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZSB7IDAgfTsK
KyAgICBTaGFyZWRTdHJpbmdIYXNoVGFibGUgbV90YWJsZTsKKyAgICBIYXNoU2V0PFdlYkNvcmU6
OlNoYXJlZFN0cmluZ0hhc2gsIFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2hIYXNoPiBtX3BlbmRp
bmdTaGFyZWRTdHJpbmdIYXNoZXM7CisgICAgUnVuTG9vcDo6VGltZXI8U2hhcmVkU3RyaW5nSGFz
aFN0b3JlPiBtX3BlbmRpbmdTaGFyZWRTdHJpbmdIYXNoZXNUaW1lcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkU3Ry
aW5nSGFzaFRhYmxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hU
YWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjZiZWY5NDc3MjIzNDU4YmJlZjVjMWJiZTkyN2RkM2RhMmI0
NjhiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmlu
Z0hhc2hUYWJsZS5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRTdHJpbmdIYXNoVGFibGUuaCIKKworI2lu
Y2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1NoYXJlZFN0cmluZ0hhc2hUYWJsZTo6U2hhcmVkU3RyaW5nSGFz
aFRhYmxlKCkKK3sKK30KKworU2hhcmVkU3RyaW5nSGFzaFRhYmxlOjp+U2hhcmVkU3RyaW5nSGFz
aFRhYmxlKCkKK3sKK30KKworI2lmICFBU1NFUlRfRElTQUJMRUQKK3N0YXRpYyBpbmxpbmUgYm9v
bCBpc1Bvd2VyT2YyKHVuc2lnbmVkIHYpCit7CisgICAgLy8gVGFrZW4gZnJvbSBodHRwOi8vd3d3
LmNzLnV0ay5lZHUvfnZvc2UvYy1zdHVmZi9iaXRoYWNrcy5odG1sCisgICAgCisgICAgcmV0dXJu
ICEodiAmICh2IC0gMSkpICYmIHY7Cit9CisjZW5kaWYKKwordm9pZCBTaGFyZWRTdHJpbmdIYXNo
VGFibGU6OnNldFNoYXJlZE1lbW9yeShSZWY8U2hhcmVkTWVtb3J5PiYmIHNoYXJlZE1lbW9yeSkK
K3sKKyAgICBtX3NoYXJlZE1lbW9yeSA9IFdURk1vdmUoc2hhcmVkTWVtb3J5KTsKKyAgICAKKyAg
ICBBU1NFUlQobV9zaGFyZWRNZW1vcnkpOworICAgIEFTU0VSVCghKG1fc2hhcmVkTWVtb3J5LT5z
aXplKCkgJSBzaXplb2YoU2hhcmVkU3RyaW5nSGFzaCkpKTsKKworICAgIG1fdGFibGUgPSBzdGF0
aWNfY2FzdDxTaGFyZWRTdHJpbmdIYXNoKj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSk7CisgICAg
bV90YWJsZVNpemUgPSBtX3NoYXJlZE1lbW9yeS0+c2l6ZSgpIC8gc2l6ZW9mKFNoYXJlZFN0cmlu
Z0hhc2gpOworICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1fdGFibGVTaXplKSk7CisgICAgCisgICAg
bV90YWJsZVNpemVNYXNrID0gbV90YWJsZVNpemUgLSAxOworfQorCitzdGF0aWMgaW5saW5lIHVu
c2lnbmVkIGRvdWJsZUhhc2godW5zaWduZWQga2V5KQoreworICAgIGtleSA9IH5rZXkgKyAoa2V5
ID4+IDIzKTsKKyAgICBrZXkgXj0gKGtleSA8PCAxMik7CisgICAga2V5IF49IChrZXkgPj4gNyk7
CisgICAga2V5IF49IChrZXkgPDwgMik7CisgICAga2V5IF49IChrZXkgPj4gMjApOworICAgIHJl
dHVybiBrZXk7Cit9CisgICAgCitib29sIFNoYXJlZFN0cmluZ0hhc2hUYWJsZTo6YWRkKFNoYXJl
ZFN0cmluZ0hhc2ggc2hhcmVkU3RyaW5nSGFzaCkKK3sKKyAgICBBU1NFUlQobV9zaGFyZWRNZW1v
cnkpOworCisgICAgaW50IGsgPSAwOworICAgIFNoYXJlZFN0cmluZ0hhc2gqIHRhYmxlID0gbV90
YWJsZTsKKyAgICBpbnQgc2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7CisgICAgdW5zaWduZWQg
aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaGFyZWRTdHJpbmdIYXNoKTsKKyAgICBpbnQgaSA9
IGggJiBzaXplTWFzazsKKworICAgIFNoYXJlZFN0cmluZ0hhc2gqIGVudHJ5OworICAgIHdoaWxl
ICgxKSB7CisgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOworCisgICAgICAgIC8vIENoZWNrIGlm
IHRoaXMgYnVja2V0IGlzIGVtcHR5LgorICAgICAgICBpZiAoISplbnRyeSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBzYW1lIGxpbmsgaGFzaCBpcyBpbiB0
aGUgdGFibGUgYWxyZWFkeS4KKyAgICAgICAgaWYgKCplbnRyeSA9PSBzaGFyZWRTdHJpbmdIYXNo
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghaykKKyAgICAgICAg
ICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFz
azsKKyAgICB9CisKKyAgICAqZW50cnkgPSBzaGFyZWRTdHJpbmdIYXNoOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFNoYXJlZFN0cmluZ0hhc2hUYWJsZTo6Y29udGFpbnMoU2hhcmVkU3Ry
aW5nSGFzaCBzaGFyZWRTdHJpbmdIYXNoKSBjb25zdAoreworICAgIGlmICghbV9zaGFyZWRNZW1v
cnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBrID0gMDsKKyAgICBTaGFyZWRT
dHJpbmdIYXNoKiB0YWJsZSA9IG1fdGFibGU7CisgICAgaW50IHNpemVNYXNrID0gbV90YWJsZVNp
emVNYXNrOworICAgIHVuc2lnbmVkIGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2hhcmVkU3Ry
aW5nSGFzaCk7CisgICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7CisgICAgCisgICAgU2hhcmVkU3Ry
aW5nSGFzaCogZW50cnk7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZW50cnkgPSB0YWJsZSAr
IGk7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSB0
YWJsZS4KKyAgICAgICAgaWYgKCEqZW50cnkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgICAgIGlmICgqZW50cnkgPT0gc2hhcmVkU3RyaW5nSGFzaCkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKCFrKQorICAgICAgICAgICAgayA9IDEg
fCBkb3VibGVIYXNoKGgpOworICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmNs
ZWFyKCkKK3sKKyAgICBtX3RhYmxlU2l6ZSA9IDA7CisgICAgbV90YWJsZVNpemVNYXNrID0gMDsK
KyAgICBtX3NoYXJlZE1lbW9yeSA9IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFRhYmxl
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFibGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45Y2QyZDNlODNhZjU5Y2NlZmIwNDJiZjE5NjE4ZDk1YzI5MjRmMzI4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmgKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxXZWJDb3JlL1NoYXJlZFN0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTaGFyZWRNZW1vcnk7CisKK2NsYXNzIFNoYXJl
ZFN0cmluZ0hhc2hUYWJsZSB7CitwdWJsaWM6CisgICAgU2hhcmVkU3RyaW5nSGFzaFRhYmxlKCk7
CisgICAgflNoYXJlZFN0cmluZ0hhc2hUYWJsZSgpOworCisgICAgdm9pZCBzZXRTaGFyZWRNZW1v
cnkoUmVmPFNoYXJlZE1lbW9yeT4mJik7CisKKyAgICAvLyBDYW4gb25seSBiZSBjYWxsZWQgaWYg
dGhlIHVuZGVybHlpbmcgc2hhcmVkIG1lbW9yeSBpcyBpbiByZWFkIC8gd3JpdGUgbW9kZS4KKyAg
ICBib29sIGFkZChXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoKTsKKworICAgIGJvb2wgY29udGFp
bnMoV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCkgY29uc3Q7CisKKyAgICBTaGFyZWRNZW1vcnkq
IHNoYXJlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkTWVtb3J5LmdldCgpOyB9Cisg
ICAgdm9pZCBjbGVhcigpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1f
c2hhcmVkTWVtb3J5OworCisgICAgdW5zaWduZWQgbV90YWJsZVNpemUgeyAwIH07CisgICAgdW5z
aWduZWQgbV90YWJsZVNpemVNYXNrIHsgMCB9OworICAgIFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hh
c2gqIG1fdGFibGUgeyBudWxscHRyIH07Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Zp
c2l0ZWRMaW5rVGFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmIxMWI3
M2NmMmQ3N2FiODBmNTMzMjY5MWZiODdlZDJiYjJmMDljLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Zpc2l0ZWRMaW5r
VGFibGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVmlzaXRlZExpbmtUYWJsZS5oIgotCi0jaW5j
bHVkZSAiU2hhcmVkTWVtb3J5LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotVmlzaXRlZExpbmtUYWJsZTo6VmlzaXRlZExpbmtUYWJsZSgpCi0g
ICAgOiBtX3RhYmxlU2l6ZSgwKQotICAgICwgbV90YWJsZVNpemVNYXNrKDApCi0gICAgLCBtX3Rh
YmxlKG51bGxwdHIpCi17Ci19Ci0KLVZpc2l0ZWRMaW5rVGFibGU6On5WaXNpdGVkTGlua1RhYmxl
KCkKLXsKLX0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Bv
d2VyT2YyKHVuc2lnbmVkIHYpCi17Ci0gICAgLy8gVGFrZW4gZnJvbSBodHRwOi8vd3d3LmNzLnV0
ay5lZHUvfnZvc2UvYy1zdHVmZi9iaXRoYWNrcy5odG1sCi0gICAgCi0gICAgcmV0dXJuICEodiAm
ICh2IC0gMSkpICYmIHY7Ci19Ci0jZW5kaWYKLQotdm9pZCBWaXNpdGVkTGlua1RhYmxlOjpzZXRT
aGFyZWRNZW1vcnkoUmVmPFNoYXJlZE1lbW9yeT4mJiBzaGFyZWRNZW1vcnkpCi17Ci0gICAgbV9z
aGFyZWRNZW1vcnkgPSBXVEZNb3ZlKHNoYXJlZE1lbW9yeSk7Ci0gICAgCi0gICAgQVNTRVJUKG1f
c2hhcmVkTWVtb3J5KTsKLSAgICBBU1NFUlQoIShtX3NoYXJlZE1lbW9yeS0+c2l6ZSgpICUgc2l6
ZW9mKExpbmtIYXNoKSkpOwotCi0gICAgbV90YWJsZSA9IHN0YXRpY19jYXN0PExpbmtIYXNoKj4o
bV9zaGFyZWRNZW1vcnktPmRhdGEoKSk7Ci0gICAgbV90YWJsZVNpemUgPSBtX3NoYXJlZE1lbW9y
eS0+c2l6ZSgpIC8gc2l6ZW9mKExpbmtIYXNoKTsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX3Rh
YmxlU2l6ZSkpOwotICAgIAotICAgIG1fdGFibGVTaXplTWFzayA9IG1fdGFibGVTaXplIC0gMTsK
LX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBkb3VibGVIYXNoKHVuc2lnbmVkIGtleSkKLXsK
LSAgICBrZXkgPSB+a2V5ICsgKGtleSA+PiAyMyk7Ci0gICAga2V5IF49IChrZXkgPDwgMTIpOwot
ICAgIGtleSBePSAoa2V5ID4+IDcpOwotICAgIGtleSBePSAoa2V5IDw8IDIpOwotICAgIGtleSBe
PSAoa2V5ID4+IDIwKTsKLSAgICByZXR1cm4ga2V5OwotfQotICAgIAotYm9vbCBWaXNpdGVkTGlu
a1RhYmxlOjphZGRMaW5rSGFzaChMaW5rSGFzaCBsaW5rSGFzaCkKLXsKLSAgICBBU1NFUlQobV9z
aGFyZWRNZW1vcnkpOwotCi0gICAgaW50IGsgPSAwOwotICAgIExpbmtIYXNoKiB0YWJsZSA9IG1f
dGFibGU7Ci0gICAgaW50IHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNrOwotICAgIHVuc2lnbmVk
IGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGlua0hhc2gpOwotICAgIGludCBpID0gaCAmIHNp
emVNYXNrOwotICAKLSAgICBMaW5rSGFzaCogZW50cnk7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAg
ICAgZW50cnkgPSB0YWJsZSArIGk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBidWNrZXQg
aXMgZW1wdHkuCi0gICAgICAgIGlmICghKmVudHJ5KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNhbWUgbGluayBoYXNoIGlzIGluIHRoZSB0YWJsZSBhbHJl
YWR5LgotICAgICAgICBpZiAoKmVudHJ5ID09IGxpbmtIYXNoKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGlmICghaykKLSAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFz
aChoKTsKLSAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKLSAgICB9Ci0KLSAgICAqZW50
cnkgPSBsaW5rSGFzaDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWaXNpdGVkTGlua1Rh
YmxlOjppc0xpbmtWaXNpdGVkKExpbmtIYXNoIGxpbmtIYXNoKSBjb25zdAotewotICAgIGlmICgh
bV9zaGFyZWRNZW1vcnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBrID0gMDsK
LSAgICBMaW5rSGFzaCogdGFibGUgPSBtX3RhYmxlOwotICAgIGludCBzaXplTWFzayA9IG1fdGFi
bGVTaXplTWFzazsKLSAgICB1bnNpZ25lZCBoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmtI
YXNoKTsKLSAgICBpbnQgaSA9IGggJiBzaXplTWFzazsKLSAgICAKLSAgICBMaW5rSGFzaCogZW50
cnk7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgZW50cnkgPSB0YWJsZSArIGk7Ci0KLSAgICAg
ICAgLy8gQ2hlY2sgaWYgd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSB0YWJsZS4KLSAgICAg
ICAgaWYgKCEqZW50cnkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGlm
ICgqZW50cnkgPT0gbGlua0hhc2gpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghaykKLSAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKLSAg
ICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgVmlzaXRlZExpbmtUYWJsZTo6Y2xlYXIoKQotewotICAgIG1fdGFibGVTaXpl
ID0gMDsKLSAgICBtX3RhYmxlU2l6ZU1hc2sgPSAwOwotICAgIG1fc2hhcmVkTWVtb3J5ID0gbnVs
bHB0cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9WaXNp
dGVkTGlua1RhYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOTEyNjc1ODE1
NGMxODk0OWQ0NWQyODUwYTMxYjFjZmU5NGVjMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvVmlzaXRlZExpbmtUYWJs
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
VmlzaXRlZExpbmtUYWJsZV9oCi0jZGVmaW5lIFZpc2l0ZWRMaW5rVGFibGVfaAotCi0jaW5jbHVk
ZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFNoYXJlZE1lbW9yeTsKLQotY2xhc3MgVmlzaXRlZExpbmtU
YWJsZSB7Ci1wdWJsaWM6Ci0gICAgVmlzaXRlZExpbmtUYWJsZSgpOwotICAgIH5WaXNpdGVkTGlu
a1RhYmxlKCk7Ci0KLSAgICB2b2lkIHNldFNoYXJlZE1lbW9yeShSZWY8U2hhcmVkTWVtb3J5PiYm
KTsKLQotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIFVJIHByb2Nl
c3MuCi0gICAgYm9vbCBhZGRMaW5rSGFzaChXZWJDb3JlOjpMaW5rSGFzaCk7Ci0KLSAgICBib29s
IGlzTGlua1Zpc2l0ZWQoV2ViQ29yZTo6TGlua0hhc2gpIGNvbnN0OwotCi0gICAgU2hhcmVkTWVt
b3J5KiBzaGFyZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZE1lbW9yeS5nZXQoKTsg
fQotICAgIHZvaWQgY2xlYXIoKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5
PiBtX3NoYXJlZE1lbW9yeTsKLQotICAgIHVuc2lnbmVkIG1fdGFibGVTaXplOwotICAgIHVuc2ln
bmVkIG1fdGFibGVTaXplTWFzazsKLSAgICBXZWJDb3JlOjpMaW5rSGFzaCogbV90YWJsZTsKLX07
Ci0KLX0KLQotI2VuZGlmIC8vIFZpc2l0ZWRMaW5rVGFibGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXggNzgzMzhlZDY1NzhjZGNlYzFlZTBjZTEz
NDQzODJlYjQ5NzYwNjI1OS4uMzQ0OGU2YmUyZjJkODhmOGQxMTYzYmUwN2FiODYzN2MxOGRhODQ4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCkBAIC0z
MTUsNyArMzE1LDcgQEAgdm9pZCBXS0NvbnRleHRBZGRWaXNpdGVkTGluayhXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgV0tTdHJpbmdSZWYgdmlzaXRlZFVSTCkKICAgICBpZiAodmlzaXRlZFVSTFN0
cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHRvSW1wbChjb250ZXh0UmVm
KS0+dmlzaXRlZExpbmtTdG9yZSgpLmFkZFZpc2l0ZWRMaW5rSGFzaCh2aXNpdGVkTGlua0hhc2go
dmlzaXRlZFVSTFN0cmluZykpOworICAgIHRvSW1wbChjb250ZXh0UmVmKS0+dmlzaXRlZExpbmtT
dG9yZSgpLmFkZFZpc2l0ZWRMaW5rSGFzaChjb21wdXRlU2hhcmVkU3RyaW5nSGFzaCh2aXNpdGVk
VVJMU3RyaW5nKSk7CiB9CiAKIHZvaWQgV0tDb250ZXh0Q2xlYXJWaXNpdGVkTGlua3MoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVmlzaXRlZExpbmtTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tWaXNpdGVkTGlua1N0b3JlLm1tCmluZGV4IGM1NmYwMmMwZTg2YmUxODA4
YjFhYjAzZTFmZWQ3OTQ1N2I4NGVkMDEuLmZhZGY4MDgwZDAwNjZhZGNhZWY5ZGYwZmNhYjU5MzQw
ZmJhNzFkYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tWaXNpdGVkTGlua1N0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tWaXNpdGVkTGlua1N0b3JlLm1tCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgV0tfQVBJ
X0VOQUJMRUQKIAogI2ltcG9ydCAiVmlzaXRlZExpbmtTdG9yZS5oIgotI2ltcG9ydCA8V2ViQ29y
ZS9MaW5rSGFzaC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRTdHJpbmdIYXNoLmg+CiAKIEBp
bXBsZW1lbnRhdGlvbiBfV0tWaXNpdGVkTGlua1N0b3JlCiAKQEAgLTUyLDcgKzUyLDcgQEAgLSAo
dm9pZClkZWFsbG9jCiAKIC0gKHZvaWQpYWRkVmlzaXRlZExpbmtXaXRoVVJMOihOU1VSTCAqKVVS
TAogewotICAgIGF1dG8gbGlua0hhc2ggPSBXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2goVVJMLmFi
c29sdXRlU3RyaW5nKTsKKyAgICBhdXRvIGxpbmtIYXNoID0gV2ViQ29yZTo6Y29tcHV0ZVNoYXJl
ZFN0cmluZ0hhc2goVVJMLmFic29sdXRlU3RyaW5nKTsKIAogICAgIF92aXNpdGVkTGlua1N0b3Jl
LT5hZGRWaXNpdGVkTGlua0hhc2gobGlua0hhc2gpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9WaXNpdGVkTGlua1N0b3JlLmNwcAppbmRleCBiZDAwMmMwNmY2NDExMmRiZDU5MDZjYTcw
NGNjNmViMzE3OTkyNzM2Li4xZmRkMWI1MDZhMzdhOWU5YTZjYzA4MjNiMjNlZTIyYjY5ODcwNWM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw5
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdG9y
ZS5oIgogCi0jaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtT
dG9yZU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiVmlzaXRlZExpbmtUYWJsZS5oIgogI2luY2x1ZGUg
IlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgpAQCAtMzgsOCArMzYs
NiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0
YXRpYyBjb25zdCBpbnQgdmlzaXRlZExpbmtUYWJsZU1heExvYWQgPSAyOwotCiBSZWY8VmlzaXRl
ZExpbmtTdG9yZT4gVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRlKCkKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBWaXNpdGVkTGlua1N0b3JlKTsKQEAgLTU0LDkgKzUwLDcgQEAgVmlzaXRlZExp
bmtTdG9yZTo6flZpc2l0ZWRMaW5rU3RvcmUoKQogfQogCiBWaXNpdGVkTGlua1N0b3JlOjpWaXNp
dGVkTGlua1N0b3JlKCkKLSAgICA6IG1fa2V5Q291bnQoMCkKLSAgICAsIG1fdGFibGVTaXplKDAp
Ci0gICAgLCBtX3BlbmRpbmdWaXNpdGVkTGlua3NUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMs
ICZWaXNpdGVkTGlua1N0b3JlOjpwZW5kaW5nVmlzaXRlZExpbmtzVGltZXJGaXJlZCkKKyAgICA6
IG1fbGlua0hhc2hTdG9yZSgqdGhpcykKIHsKIH0KIApAQCAtNjksMTIgKzYzLDEwIEBAIHZvaWQg
VmlzaXRlZExpbmtTdG9yZTo6YWRkUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAK
ICAgICBwcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlzaXRlZExpbmtTdG9y
ZTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBpZGVudGlmaWVyKCksICp0aGlzKTsKIAotICAgIGlm
ICghbV9rZXlDb3VudCkKKyAgICBpZiAobV9saW5rSGFzaFN0b3JlLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fdGFibGUuc2hhcmVkTWVtb3J5KCkpOwotCi0gICAg
c2VuZFRhYmxlKHByb2Nlc3MpOworICAgIHNlbmRTdG9yZUhhbmRsZVRvUHJvY2Vzcyhwcm9jZXNz
KTsKIH0KIAogdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpyZW1vdmVQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSYgcHJvY2VzcykKQEAgLTg1LDIxICs3NywxNCBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6
OnJlbW92ZVByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogICAgIHByb2Nlc3MucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1N0b3JlOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIGlkZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgVmlzaXRlZExpbmtTdG9yZTo6
YWRkVmlzaXRlZExpbmtIYXNoKExpbmtIYXNoIGxpbmtIYXNoKQordm9pZCBWaXNpdGVkTGlua1N0
b3JlOjphZGRWaXNpdGVkTGlua0hhc2goU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKLSAg
ICBtX3BlbmRpbmdWaXNpdGVkTGlua3MuYWRkKGxpbmtIYXNoKTsKLQotICAgIGlmICghbV9wZW5k
aW5nVmlzaXRlZExpbmtzVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9wZW5kaW5nVmlzaXRl
ZExpbmtzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CisgICAgbV9saW5rSGFzaFN0b3JlLmFkZChs
aW5rSGFzaCk7CiB9CiAKIHZvaWQgVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlQWxsKCkKIHsKLSAg
ICBtX3BlbmRpbmdWaXNpdGVkTGlua3NUaW1lci5zdG9wKCk7Ci0gICAgbV9wZW5kaW5nVmlzaXRl
ZExpbmtzLmNsZWFyKCk7Ci0gICAgbV9rZXlDb3VudCA9IDA7Ci0gICAgbV90YWJsZVNpemUgPSAw
OwotICAgIG1fdGFibGUuY2xlYXIoKTsKKyAgICBtX2xpbmtIYXNoU3RvcmUuY2xlYXIoKTsKIAog
ICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKICAgICAg
ICAgQVNTRVJUKHByb2Nlc3MtPnByb2Nlc3NQb29sKCkucHJvY2Vzc2VzKCkuY29udGFpbnMocHJv
Y2VzcykpOwpAQCAtMTE3LDkgKzEwMiw5IEBAIHZvaWQgVmlzaXRlZExpbmtTdG9yZTo6d2ViUHJv
Y2Vzc0RpZENsb3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBJUEM6OkNvbm5lCiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNp
dGVkTGlua0hhc2hGcm9tUGFnZSh1aW50NjRfdCBwYWdlSUQsIExpbmtIYXNoIGxpbmtIYXNoKQor
dm9pZCBWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGlua0hhc2hGcm9tUGFnZSh1aW50NjRf
dCBwYWdlSUQsIFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCiB7Ci0gICAgaWYgKFdlYlBhZ2VQ
cm94eSogd2ViUGFnZVByb3h5ID0gV2ViUHJvY2Vzc1Byb3h5Ojp3ZWJQYWdlKHBhZ2VJRCkpIHsK
KyAgICBpZiAoYXV0byogd2ViUGFnZVByb3h5ID0gV2ViUHJvY2Vzc1Byb3h5Ojp3ZWJQYWdlKHBh
Z2VJRCkpIHsKICAgICAgICAgaWYgKCF3ZWJQYWdlUHJveHktPmFkZHNWaXNpdGVkTGlua3MoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjcsMTI1ICsxMTIsMzUgQEAgdm9pZCBW
aXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGlua0hhc2hGcm9tUGFnZSh1aW50NjRfdCBwYWdl
SUQsIExpbmtIYXNoIGxpbmsKICAgICBhZGRWaXNpdGVkTGlua0hhc2gobGlua0hhc2gpOwogfQog
Ci1zdGF0aWMgdW5zaWduZWQgbmV4dFBvd2VyT2YyKHVuc2lnbmVkIHYpCit2b2lkIFZpc2l0ZWRM
aW5rU3RvcmU6OnNlbmRTdG9yZUhhbmRsZVRvUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nl
c3MpCiB7Ci0gICAgLy8gVGFrZW4gZnJvbSBodHRwOi8vd3d3LmNzLnV0ay5lZHUvfnZvc2UvYy1z
dHVmZi9iaXRoYWNrcy5odG1sCi0gICAgLy8gRGV2aXNlZCBieSBTZWFuIEFuZGVyc29uLCBTZXBl
bWJlciAxNCwgMjAwMQotICAgIAotICAgIHYtLTsKLSAgICB2IHw9IHYgPj4gMTsKLSAgICB2IHw9
IHYgPj4gMjsKLSAgICB2IHw9IHYgPj4gNDsKLSAgICB2IHw9IHYgPj4gODsKLSAgICB2IHw9IHYg
Pj4gMTY7Ci0gICAgdisrOwotICAgIAotICAgIHJldHVybiB2OworICAgIEFTU0VSVChwcm9jZXNz
LnByb2Nlc3NQb29sKCkucHJvY2Vzc2VzKCkuY29udGFpbnMoJnByb2Nlc3MpKTsKKworICAgIFNo
YXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICBpZiAoIW1fbGlua0hhc2hTdG9yZS5jcmVh
dGVTaGFyZWRNZW1vcnlIYW5kbGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJv
Y2Vzcy5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6U2V0VmlzaXRl
ZExpbmtUYWJsZShoYW5kbGUpLCBpZGVudGlmaWVyKCkpOwogfQogCi1zdGF0aWMgdW5zaWduZWQg
dGFibGVTaXplRm9yS2V5Q291bnQodW5zaWduZWQga2V5Q291bnQpCit2b2lkIFZpc2l0ZWRMaW5r
U3RvcmU6OmRpZEludmFsaWRhdGVTaGFyZWRNZW1vcnkoKQogewotICAgIC8vIFdlIHdhbnQgdGhl
IHRhYmxlIHRvIGJlIGF0IGxlYXN0IGhhbGYgZW1wdHkuCi0gICAgdW5zaWduZWQgdGFibGVTaXpl
ID0gbmV4dFBvd2VyT2YyKGtleUNvdW50ICogdmlzaXRlZExpbmtUYWJsZU1heExvYWQpOwotCi0g
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIHRhYmxlIHNpemUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Yg
YSBwYWdlLgotICAgIHNpemVfdCBtaW5pbXVtVGFibGVTaXplID0gU2hhcmVkTWVtb3J5OjpzeXN0
ZW1QYWdlU2l6ZSgpIC8gc2l6ZW9mKExpbmtIYXNoKTsKLSAgICBpZiAodGFibGVTaXplIDwgbWlu
aW11bVRhYmxlU2l6ZSkKLSAgICAgICAgcmV0dXJuIG1pbmltdW1UYWJsZVNpemU7Ci0gICAgCi0g
ICAgcmV0dXJuIHRhYmxlU2l6ZTsKKyAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6
IG1fcHJvY2Vzc2VzKQorICAgICAgICBzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MoKnByb2Nlc3Mp
OwogfQogCi12b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OnBlbmRpbmdWaXNpdGVkTGlua3NUaW1lckZp
cmVkKCkKK3ZvaWQgVmlzaXRlZExpbmtTdG9yZTo6ZGlkQWRkU2hhcmVkU3RyaW5nSGFzaGVzKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoPiYgbGlua0hhc2hlcykKIHsKLSAg
ICB1bnNpZ25lZCBjdXJyZW50VGFibGVTaXplID0gbV90YWJsZVNpemU7Ci0gICAgdW5zaWduZWQg
bmV3VGFibGVTaXplID0gdGFibGVTaXplRm9yS2V5Q291bnQobV9rZXlDb3VudCArIG1fcGVuZGlu
Z1Zpc2l0ZWRMaW5rcy5zaXplKCkpOwotCi0gICAgbmV3VGFibGVTaXplID0gc3RkOjptYXgoY3Vy
cmVudFRhYmxlU2l6ZSwgbmV3VGFibGVTaXplKTsKLQotICAgIGlmIChjdXJyZW50VGFibGVTaXpl
ICE9IG5ld1RhYmxlU2l6ZSkgewotICAgICAgICByZXNpemVUYWJsZShuZXdUYWJsZVNpemUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiBh
ZGRlZFZpc2l0ZWRMaW5rczsKLQotICAgIGZvciAoYXV0byYgbGlua0hhc2ggOiBtX3BlbmRpbmdW
aXNpdGVkTGlua3MpIHsKLSAgICAgICAgaWYgKG1fdGFibGUuYWRkTGlua0hhc2gobGlua0hhc2gp
KSB7Ci0gICAgICAgICAgICBhZGRlZFZpc2l0ZWRMaW5rcy5hcHBlbmQobGlua0hhc2gpOwotICAg
ICAgICAgICAgKyttX2tleUNvdW50OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9wZW5kaW5n
VmlzaXRlZExpbmtzLmNsZWFyKCk7Ci0KLSAgICBpZiAoYWRkZWRWaXNpdGVkTGlua3MuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFsaW5rSGFzaGVzLmlzRW1wdHkoKSk7
CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7CiAg
ICAgICAgIEFTU0VSVChwcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRhaW5z
KHByb2Nlc3MpKTsKIAotICAgICAgICBpZiAoYWRkZWRWaXNpdGVkTGlua3Muc2l6ZSgpID4gMjAp
CisgICAgICAgIGlmIChsaW5rSGFzaGVzLnNpemUoKSA+IDIwKQogICAgICAgICAgICAgcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OkFsbFZpc2l0ZWRM
aW5rU3RhdGVDaGFuZ2VkKCksIGlkZW50aWZpZXIoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpW
aXNpdGVkTGlua1N0YXRlQ2hhbmdlZChhZGRlZFZpc2l0ZWRMaW5rcyksIGlkZW50aWZpZXIoKSk7
Ci0gICAgfQotfQotCi12b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OnJlc2l6ZVRhYmxlKHVuc2lnbmVk
IG5ld1RhYmxlU2l6ZSkKLXsKLSAgICBhdXRvIG5ld1RhYmxlTWVtb3J5ID0gU2hhcmVkTWVtb3J5
OjphbGxvY2F0ZShuZXdUYWJsZVNpemUgKiBzaXplb2YoTGlua0hhc2gpKTsKLQotICAgIGlmICgh
bmV3VGFibGVNZW1vcnkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgYWxsb2NhdGUg
c2hhcmVkIG1lbW9yeSBmb3IgdmlzaXRlZCBsaW5rIHRhYmxlIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtZW1zZXQobmV3VGFibGVNZW1vcnktPmRhdGEoKSwgMCwgbmV3VGFibGVN
ZW1vcnktPnNpemUoKSk7Ci0KLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBjdXJyZW50VGFibGVN
ZW1vcnkgPSBtX3RhYmxlLnNoYXJlZE1lbW9yeSgpOwotICAgIHVuc2lnbmVkIGN1cnJlbnRUYWJs
ZVNpemUgPSBtX3RhYmxlU2l6ZTsKLQotICAgIG1fdGFibGUuc2V0U2hhcmVkTWVtb3J5KG5ld1Rh
YmxlTWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpOwotICAgIG1fdGFibGVTaXplID0gbmV3VGFibGVT
aXplOwotCi0gICAgaWYgKGN1cnJlbnRUYWJsZU1lbW9yeSkgewotICAgICAgICBBU1NFUlRfVU5V
U0VEKGN1cnJlbnRUYWJsZVNpemUsIGN1cnJlbnRUYWJsZU1lbW9yeS0+c2l6ZSgpID09IGN1cnJl
bnRUYWJsZVNpemUgKiBzaXplb2YoTGlua0hhc2gpKTsKLQotICAgICAgICAvLyBHbyB0aHJvdWdo
IHRoZSBjdXJyZW50IGhhc2ggdGFibGUgYW5kIHJlLWFkZCBhbGwgZW50cmllcyB0byB0aGUgbmV3
IGhhc2ggdGFibGUuCi0gICAgICAgIGNvbnN0IExpbmtIYXNoKiBjdXJyZW50TGlua0hhc2hlcyA9
IHN0YXRpY19jYXN0PGNvbnN0IExpbmtIYXNoKj4oY3VycmVudFRhYmxlTWVtb3J5LT5kYXRhKCkp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY3VycmVudFRhYmxlU2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICBMaW5rSGFzaCBsaW5rSGFzaCA9IGN1cnJlbnRMaW5rSGFzaGVzW2ld
OwotCi0gICAgICAgICAgICBpZiAoIWxpbmtIYXNoKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICBib29sIGRpZEFkZExpbmtIYXNoID0gbV90YWJsZS5hZGRMaW5rSGFz
aChsaW5rSGFzaCk7Ci0KLSAgICAgICAgICAgIC8vIEl0IHNob3VsZCBhbHdheXMgYmUgcG9zc2li
bGUgdG8gYWRkIHRoZSBsaW5rIGhhc2ggdG8gYSBuZXcgdGFibGUuCi0gICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKGRpZEFkZExpbmtIYXNoLCBkaWRBZGRMaW5rSGFzaCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmb3IgKGF1dG8mIGxpbmtIYXNoIDogbV9wZW5kaW5nVmlzaXRlZExpbmtzKSB7
Ci0gICAgICAgIGlmIChtX3RhYmxlLmFkZExpbmtIYXNoKGxpbmtIYXNoKSkKLSAgICAgICAgICAg
IG1fa2V5Q291bnQrKzsKKyAgICAgICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OlZpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVyOjpWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZChsaW5rSGFzaGVz
KSwgaWRlbnRpZmllcigpKTsKICAgICB9Ci0gICAgbV9wZW5kaW5nVmlzaXRlZExpbmtzLmNsZWFy
KCk7Ci0KLSAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQot
ICAgICAgICBzZW5kVGFibGUoKnByb2Nlc3MpOwotfQotCi12b2lkIFZpc2l0ZWRMaW5rU3RvcmU6
OnNlbmRUYWJsZShXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCi17Ci0gICAgQVNTRVJUKHByb2Nl
c3MucHJvY2Vzc1Bvb2woKS5wcm9jZXNzZXMoKS5jb250YWlucygmcHJvY2VzcykpOwotCi0gICAg
U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgIGlmICghbV90YWJsZS5zaGFyZWRNZW1v
cnkoKS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFk
T25seSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3Muc2VuZChNZXNzYWdlczo6Vmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OlNldFZpc2l0ZWRMaW5rVGFibGUoaGFuZGxlKSwgaWRl
bnRpZmllcigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmgKaW5kZXggNWM2YWQ4ZGQyZjZlZDFmYWUzNTg2YTFl
MWNkMGU0MzI3MmY1ZWRiZS4uNzI4Y2RjOTkwYjE5MTJkYmVjMDkxZjlmOGI1NDAyMGM2NzAyMDJm
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyNyAr
MjMsMjQgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIFZpc2l0ZWRMaW5rU3RvcmVfaAotI2RlZmluZSBWaXNpdGVkTGlua1N0b3JlX2gKKyNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2Vp
dmVyLmgiCi0jaW5jbHVkZSAiVmlzaXRlZExpbmtUYWJsZS5oIgorI2luY2x1ZGUgIlNoYXJlZFN0
cmluZ0hhc2hTdG9yZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NMaWZldGltZU9ic2VydmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5o
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvSWRlbnRpZmllZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdl
YlBhZ2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKICAgICAKLWNsYXNzIFZpc2l0ZWRM
aW5rU3RvcmUgZmluYWwgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBl
OjpWaXNpdGVkTGlua1N0b3JlPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciwgcHVibGlj
IFdlYlByb2Nlc3NMaWZldGltZU9ic2VydmVyLCBwdWJsaWMgSWRlbnRpZmllZDxWaXNpdGVkTGlu
a1N0b3JlPiAgeworY2xhc3MgVmlzaXRlZExpbmtTdG9yZSBmaW5hbCA6IHB1YmxpYyBBUEk6Ok9i
amVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlZpc2l0ZWRMaW5rU3RvcmU+LCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyLCBwdWJsaWMgV2ViUHJvY2Vzc0xpZmV0aW1lT2JzZXJ2ZXIsIHB1
YmxpYyBJZGVudGlmaWVkPFZpc2l0ZWRMaW5rU3RvcmU+LCBwcml2YXRlIFNoYXJlZFN0cmluZ0hh
c2hTdG9yZTo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFZpc2l0ZWRMaW5rU3Rv
cmU+IGNyZWF0ZSgpOwogCkBAIC01MywzNCArNTAsMjcgQEAgcHVibGljOgogICAgIHZvaWQgYWRk
UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmKTsKICAgICB2b2lkIHJlbW92ZVByb2Nlc3MoV2ViUHJv
Y2Vzc1Byb3h5Jik7CiAKLSAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rSGFzaChXZWJDb3JlOjpMaW5r
SGFzaCk7CisgICAgdm9pZCBhZGRWaXNpdGVkTGlua0hhc2goV2ViQ29yZTo6U2hhcmVkU3RyaW5n
SGFzaCk7CiAgICAgdm9pZCByZW1vdmVBbGwoKTsKIAogcHJpdmF0ZToKICAgICAvLyBJUEM6Ok1l
c3NhZ2VSZWNlaXZlcgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKIAogICAgIC8vIFdlYlByb2Nl
c3NMaWZldGltZU9ic2VydmVyCi0gICAgdm9pZCB3ZWJQcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9u
KFdlYlByb2Nlc3NQcm94eSYsIElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwotICAgIHZvaWQg
d2ViUHJvY2Vzc0RpZENsb3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBJUEM6OkNvbm5l
Y3Rpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHdlYlByb2Nlc3NXaWxsT3BlbkNvbm5lY3Rpb24o
V2ViUHJvY2Vzc1Byb3h5JiwgSVBDOjpDb25uZWN0aW9uJikgZmluYWw7CisgICAgdm9pZCB3ZWJQ
cm9jZXNzRGlkQ2xvc2VDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIElQQzo6Q29ubmVjdGlv
biYpIGZpbmFsOwogCi0gICAgdm9pZCBhZGRWaXNpdGVkTGlua0hhc2hGcm9tUGFnZSh1aW50NjRf
dCBwYWdlSUQsIFdlYkNvcmU6OkxpbmtIYXNoKTsKKyAgICAvLyBTaGFyZWRTdHJpbmdIYXNoU3Rv
cmU6OkNsaWVudAorICAgIHZvaWQgZGlkSW52YWxpZGF0ZVNoYXJlZE1lbW9yeSgpIGZpbmFsOwor
ICAgIHZvaWQgZGlkQWRkU2hhcmVkU3RyaW5nSGFzaGVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpT
aGFyZWRTdHJpbmdIYXNoPiYpIGZpbmFsOwogCi0gICAgdm9pZCBwZW5kaW5nVmlzaXRlZExpbmtz
VGltZXJGaXJlZCgpOworICAgIHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2UodWludDY0
X3QgcGFnZUlELCBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoKTsKIAotICAgIHZvaWQgcmVzaXpl
VGFibGUodW5zaWduZWQgbmV3VGFibGVTaXplKTsKLSAgICB2b2lkIHNlbmRUYWJsZShXZWJQcm9j
ZXNzUHJveHkmKTsKKyAgICB2b2lkIHNlbmRTdG9yZUhhbmRsZVRvUHJvY2VzcyhXZWJQcm9jZXNz
UHJveHkmKTsKIAogICAgIEhhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5Kj4gbV9wcm9jZXNzZXM7Ci0K
LSAgICB1bnNpZ25lZCBtX2tleUNvdW50OwotICAgIHVuc2lnbmVkIG1fdGFibGVTaXplOwotICAg
IFZpc2l0ZWRMaW5rVGFibGUgbV90YWJsZTsKLQotICAgIEhhc2hTZXQ8V2ViQ29yZTo6TGlua0hh
c2gsIFdlYkNvcmU6OkxpbmtIYXNoSGFzaD4gbV9wZW5kaW5nVmlzaXRlZExpbmtzOwotICAgIFJ1
bkxvb3A6OlRpbWVyPFZpc2l0ZWRMaW5rU3RvcmU+IG1fcGVuZGluZ1Zpc2l0ZWRMaW5rc1RpbWVy
OworICAgIFNoYXJlZFN0cmluZ0hhc2hTdG9yZSBtX2xpbmtIYXNoU3RvcmU7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFZpc2l0ZWRMaW5rU3RvcmVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGFjYjlkNTYyNWVhYjc5
NGJlNWNlZDYxZDdlYmMzOGEyYzUyMzU1YjcuLjgyNTEwNDlkNjhjYzkwODVkZDk1OTQwMDE2YTEx
ZTFkNTAwYzhhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAKQEAgLTcyLDcgKzcyLDYgQEAKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5j
bHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMUGFyc2VyLmg+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCBlMTlmNmRmMmFmODZkNWNh
NDQ3MGFkNmM4NjE0OTE3YTFmZjI4MDdhLi44ZjJkOGFmOWYyYmI1NTA2N2UyYmQ4Y2E1OTFhYjc1
M2Q3N2MwZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKQEAg
LTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlICJXZWJDb250ZXh0Q2xpZW50LmgiCiAjaW5jbHVkZSAi
V2ViQ29udGV4dENvbm5lY3Rpb25DbGllbnQuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHku
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0xpbmtIYXNoLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFy
ZWRTdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKaW5kZXggZmE1ZjdlNTAyZmNkYjk2YjI5NzIwMTJjNzBi
ZDE3ODNhNmY2N2U2Yi4uZDUxZjBjMjJkODQwMGM2MTBiN2Q0MGFkNWNjM2U4ZWM4ODRkN2RlMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKQEAgLTM4LDcgKzM4
LDcgQEAKICNpbmNsdWRlICJWaXNpYmxlV2ViUGFnZUNvdW50ZXIuaCIKICNpbmNsdWRlICJXZWJD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0xpbmtIYXNoLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
aGFyZWRTdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHBhbC9TZXNz
aW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjJhNGI3MjJiNmQ2MzJlMjJlNDk4
ZGZjNmI1OGU0YTBhYTQxMTE2Zi4uYzFmZDg2Y2VjY2Q5ZDc4MjE1NmJhOTNhNjM0Mzc4NWM0MGI2
N2QyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xNTMsOCArMTUzLDYgQEAKIAkJMUEwRUM5MDcxMjRDMEFCODAwN0VGNEE1IC8qIFBs
dWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMEVDOTA1MTI0QzBBQjgwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbi5jcHAgKi87IH07CiAJCTFBMEVDOTBGMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEVDOTBEMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbk1hbmFnZXIuaCAqLzsgfTsKIAkJMUEwRUM5MTAxMjRDMEFGNTAwN0VGNEE1
IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBFQzkwRTEyNEMwQUY1MDA3RUY0QTUgLyog
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmNwcCAqLzsgfTsKLQkJMUEwRjI5Q0IxMjBC
MzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRjI5QzkxMjBCMzcxNjAwNTNEMUI5IC8qIFZp
c2l0ZWRMaW5rVGFibGUuY3BwICovOyB9OwotCQkxQTBGMjlDQzEyMEIzNzE2MDA1M0QxQjkgLyog
VmlzaXRlZExpbmtUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUEwRjI5Q0ExMjBCMzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rVGFibGUuaCAq
LzsgfTsKIAkJMUEwRjI5RTMxMjBCNDQ0MjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rU3RvcmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRjI5RTEx
MjBCNDQ0MjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rU3RvcmUuY3BwICovOyB9OwogCQkxQTBGMjlF
NDEyMEI0NDQyMDA1M0QxQjkgLyogVmlzaXRlZExpbmtTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRjI5RTIxMjBCNDQ0MjAwNTNEMUI5IC8q
IFZpc2l0ZWRMaW5rU3RvcmUuaCAqLzsgfTsKIAkJMUExNEY4RTExRDc0QzgzNDAwNkNCRUM2IC8q
IEZyYW1lSW5mb0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUExNEY4REYxRDc0QzgzNDAwNkNCRUM2IC8qIEZyYW1lSW5mb0RhdGEuY3BwICov
OyB9OwpAQCAtMTM1Niw2ICsxMzU0LDEwIEBACiAJCTgzMDQ4QUU2MUFDQTQ1REMwMDgyQzgzMiAv
KiBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MzA0OEFFNTFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vzc1Rocm90
dGxlckNsaWVudC5oICovOyB9OwogCQk4MzEwNDI4QjFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29y
a0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgzMTA0Mjg5MUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVT
dWJyZXNvdXJjZXNFbnRyeS5oICovOyB9OwogCQk4MzEwNDI4QzFCRDZCNjZGMDBBNzE1RTQgLyog
TmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMxMDQyOEExQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdv
cmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcCAqLzsgfTsKKwkJODMxM0Y3RUIxRjdEQUUwODAw
Qjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzEzRjdFQTFGN0RBRTA0MDBCOTQ0RUIgLyogU2hh
cmVkU3RyaW5nSGFzaFN0b3JlLmNwcCAqLzsgfTsKKwkJODMxM0Y3RUMxRjdEQUUwODAwQjk0NEVC
IC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODMxM0Y3RTkxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmlu
Z0hhc2hTdG9yZS5oICovOyB9OworCQk4MzEzRjdFRDFGN0RBRTA4MDBCOTQ0RUIgLyogU2hhcmVk
U3RyaW5nSGFzaFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDgzMTNGN0U4MUY3REFFMDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoVGFi
bGUuY3BwICovOyB9OworCQk4MzEzRjdFRTFGN0RBRTA4MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5n
SGFzaFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4MzEzRjdFNzFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmggKi87
IH07CiAJCTgzMUVFQkJEMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2
ZUxvYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgz
MUVFQkJCMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaCAq
LzsgfTsKIAkJODMxRUVCQkUxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0
aXZlTG9hZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4MzFFRUJCQzFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2Fk
LmNwcCAqLzsgfTsKIAkJODMyQUUyNTIxQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDgzMkFFMjUwMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyLmggKi87IH07CkBAIC0yMzY1LDggKzIzNjcsNiBAQAogCQkxQTBF
QzkwNTEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBFQzkwRDEyNEMwQUY1MDA3RUY0
QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBFQzkwRTEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBMEYyOUM5MTIwQjM3MTYwMDUzRDFCOSAvKiBWaXNpdGVkTGlu
a1RhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpc2l0ZWRM
aW5rVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTBGMjlDQTEyMEIz
NzE2MDA1M0QxQjkgLyogVmlzaXRlZExpbmtUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXNpdGVkTGlua1RhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBMEYyOUUxMTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpc2l0ZWRMaW5rU3RvcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBGMjlFMjEyMEI0NDQyMDA1M0QxQjkgLyog
VmlzaXRlZExpbmtTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNp
dGVkTGlua1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMTRGOERGMUQ3
NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZyYW1lSW5mb0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzcwNyw2ICszNzA3LDEwIEBACiAJCTgzMDQ4QUU1MUFDQTQ1REMwMDgyQzgzMiAv
KiBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODMxMDQyODkxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0Vu
dHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN1YnJl
c291cmNlc0VudHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzMTA0MjhBMUJE
NkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNF
bnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzMTNGN0U3MUY3REFFMDMw
MEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTgzMTNGN0U4MUY3REFFMDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoVGFi
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVkU3RyaW5n
SGFzaFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODMxM0Y3RTkxRjdE
QUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODMxM0Y3RUExRjdEQUUwNDAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hh
c2hTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFyZWRT
dHJpbmdIYXNoU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzFFRUJC
QjFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzFFRUJCQzFCRDg1QzQzMDBCQjY0QzMg
LyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzMkFFMjUwMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3Jr
Q2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUwMjIsNiArNTAyNiwxMCBAQAogCQkJCTFBNjQyMEUzMTJEQ0Uy
RkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuaCAqLywKIAkJCQk1MTIxNzQ1RTE2NEMyMEUz
MDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuY3BwICovLAogCQkJCTUxMjE3NDVGMTY0QzIw
RTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oICovLAorCQkJCTgzMTNGN0VBMUY3REFF
MDQwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwICovLAorCQkJCTgzMTNGN0U5
MUY3REFFMDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuaCAqLywKKwkJCQk4MzEz
RjdFODFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmNwcCAqLywKKwkJ
CQk4MzEzRjdFNzFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmggKi8s
CiAJCQkJNTI3MkIyODgxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCAqLywK
IAkJCQk1MjcyQjI4OTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCAqLywKIAkJ
CQkxQTVFNERBMzEyRDNCRDNEMDA5OUEyQkIgLyogVGV4dENoZWNrZXJTdGF0ZS5oICovLApAQCAt
NTAzMSw4ICs1MDM5LDYgQEAKIAkJCQkxQUMxMzM2NjE4NTY1QjU3MDBGM0VDMDUgLyogVXNlckRh
dGEuaCAqLywKIAkJCQkyNjg0MDU0QTE4Qjg2NkZGMDAyMkMzOEIgLyogVmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlSW5mby5jcHAgKi8sCiAJCQkJMjY4NDA1NDIxOEI4NUE2MzAwMjJDMzhCIC8qIFZp
c2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8uaCAqLywKLQkJCQkxQTBGMjlDOTEyMEIzNzE2MDA1
M0QxQjkgLyogVmlzaXRlZExpbmtUYWJsZS5jcHAgKi8sCi0JCQkJMUEwRjI5Q0ExMjBCMzcxNjAw
NTNEMUI5IC8qIFZpc2l0ZWRMaW5rVGFibGUuaCAqLywKIAkJCQk1MThEMkNBQjEyRDUxNTNCMDAz
QkI5M0IgLyogV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgKi8sCiAJCQkJNTE4RDJDQUMxMkQ1
MTUzQjAwM0JCOTNCIC8qIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCAqLywKIAkJCQlCQ0Y1MDcy
NjEyNDMyOUFBMDA1OTU1QUUgLyogV2ViQ2VydGlmaWNhdGVJbmZvLmggKi8sCkBAIC04NzU4LDYg
Kzg3NjQsOCBAQAogCQkJCTUxMjE3NDYxMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyNEJFRDUxMjA4OTREMTAwRkJCMDU5IC8qIFNo
YXJlZE1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q0QjREOUQxRTc2NUUwMDAwRDI3MDky
IC8qIFNoYXJlZFJpbmdCdWZmZXJTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4MzEzRjdF
QzFGN0RBRTA4MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk4MzEzRjdFRTFGN0RBRTA4MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRhYmxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREFGMDZENjE4QkQxQTQ3MDA4MUNFQjEgLyogU21hcnRN
YWduaWZpY2F0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFNjk0M0UxOEJE
MkE2ODAwNUMxNUU1IC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXJNZXNzYWdlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTI3MkIyOEIxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NE
YXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTg4MDYsNyArODgxNCw2IEBACiAJCQkJMkRENUE3Mjkx
RUJGMDhENTAwOUJBNTk3IC8qIFZpc2libGVXZWJQYWdlQ291bnRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUEwRjI5RTQxMjBCNDQ0MjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rU3RvcmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBNjAyMjREMThDMTZCOUYwMEMzRThDOSAvKiBWaXNpdGVkTGlua1N0
b3JlTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMEYyOUNDMTIwQjM3MTYwMDUzRDFC
OSAvKiBWaXNpdGVkTGlua1RhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUY0Q0VGMDE4QkM0
ODE4MDBCQzJEMzQgLyogVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBOEU3RDNEMThDMTUxNDkwMDVBNzAyQSAvKiBWaXNpdGVkTGlua1RhYmxlQ29udHJv
bGxlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE5QkFFMTE4NEZGQUM3MDAzQjZC
QzYgLyogV2Vha09iakNQdHIuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzNDQsNiArMTAzNTEsOCBA
QAogCQkJCTUxMjE3NDYwMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0NDUwQUVDMDFEQzNGQUU1MDA5OTQzRjIgLyogU2hhcmVkTWVt
b3J5Q29jb2EuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q0QjREOUMxRTc2NUUwMDAwRDI3MDky
IC8qIFNoYXJlZFJpbmdCdWZmZXJTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTgzMTNG
N0VCMUY3REFFMDgwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJODMxM0Y3RUQxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREFGMDZENzE4QkQxQTQ3MDA4MUNFQjEgLyog
U21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJERTY5
NDNEMThCRDJBNjgwMDVDMTVFNSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzJCMjhBMTQwNjk4NUQwMDk2QTVE
MCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDA1LDcgKzEwNDE0
LDYgQEAKIAkJCQkyNjg0MDU0QzE4Qjg2QzM1MDAyMkMzOEIgLyogVmlzaWJsZUNvbnRlbnRSZWN0
VXBkYXRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTBGMjlFMzEyMEI0NDQyMDA1M0Qx
QjkgLyogVmlzaXRlZExpbmtTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTYwMjI0QzE4
QzE2QjlGMDBDM0U4QzkgLyogVmlzaXRlZExpbmtTdG9yZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkxQTBGMjlDQjEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRlZExpbmtU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUY0Q0VFRjE4QkM0ODE4MDBCQzJEMzQgLyog
VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RTdE
M0MxOEMxNTE0OTAwNUE3MDJBIC8qIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNFREExMkUyMTUyQ0QxQUUwMEQ5RTA4RCAv
KiBXZWJBbHRlcm5hdGl2ZVRleHRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlci5jcHAKaW5kZXggNmU4YjA2ZGZiOGQzZDVmMGJjZDUzZDUwODgxOTU4NGM4
ZjM3MTExNS4uZWY3MTI4MDJmMWJhZDNhMDUwYzBlYjI5MTZiMDBmZDA4ZTUzYzFhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcApAQCAtNzEsMTQgKzcxLDE0IEBAIFZpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyOjp+VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIoKQogICAgIHZpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVycygpLnJlbW92ZShtX2lkZW50aWZpZXIpOwogfQogCi1ib29s
IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjppc0xpbmtWaXNpdGVkKFBhZ2UmLCBMaW5rSGFz
aCBsaW5rSGFzaCwgY29uc3QgVVJMJiwgY29uc3QgQXRvbWljU3RyaW5nJikKK2Jvb2wgVmlzaXRl
ZExpbmtUYWJsZUNvbnRyb2xsZXI6OmlzTGlua1Zpc2l0ZWQoUGFnZSYsIFNoYXJlZFN0cmluZ0hh
c2ggbGlua0hhc2gsIGNvbnN0IFVSTCYsIGNvbnN0IEF0b21pY1N0cmluZyYpCiB7Ci0gICAgcmV0
dXJuIG1fdmlzaXRlZExpbmtUYWJsZS5pc0xpbmtWaXNpdGVkKGxpbmtIYXNoKTsKKyAgICByZXR1
cm4gbV92aXNpdGVkTGlua1RhYmxlLmNvbnRhaW5zKGxpbmtIYXNoKTsKIH0KIAotdm9pZCBWaXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlcjo6YWRkVmlzaXRlZExpbmsoUGFnZSYgcGFnZSwgTGlua0hh
c2ggbGlua0hhc2gpCit2b2lkIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjphZGRWaXNpdGVk
TGluayhQYWdlJiBwYWdlLCBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQogewotICAgIGlmICht
X3Zpc2l0ZWRMaW5rVGFibGUuaXNMaW5rVmlzaXRlZChsaW5rSGFzaCkpCisgICAgaWYgKG1fdmlz
aXRlZExpbmtUYWJsZS5jb250YWlucyhsaW5rSGFzaCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UoJnBhZ2UpOwpAQCAtOTks
NyArOTksNyBAQCB2b2lkIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpzZXRWaXNpdGVkTGlu
a1RhYmxlKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJgogICAgIGludmFsaWRhdGVTdHlsZXNG
b3JBbGxMaW5rcygpOwogfQogCi12b2lkIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjp2aXNp
dGVkTGlua1N0YXRlQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TGlua0hhc2g+JiBsaW5r
SGFzaGVzKQordm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6dmlzaXRlZExpbmtTdGF0
ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2g+JiBsaW5rSGFz
aGVzKQogewogICAgIGZvciAoYXV0byBsaW5rSGFzaCA6IGxpbmtIYXNoZXMpCiAgICAgICAgIGlu
dmFsaWRhdGVTdHlsZXNGb3JMaW5rKGxpbmtIYXNoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5o
CmluZGV4IGQ2ZTgyYmY3ZGU1MzQwZGFiZTUxOGQ4M2FlMjFmZmUzNjhhOTFhZWIuLjc0N2UzZDhi
YTczNWViYzAyZmE3YTVlYTFmMzVjODU3NGRhMGI0YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmgKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xs
ZXIuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAj
aW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCi0jaW5jbHVkZSAiVmlzaXRlZExpbmtUYWJsZS5oIgor
I2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvVmlz
aXRlZExpbmtTdG9yZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQxLDE5ICs0MSwxOSBA
QCBwcml2YXRlOgogICAgIGV4cGxpY2l0IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKHVpbnQ2
NF90IGlkZW50aWZpZXIpOwogCiAgICAgLy8gV2ViQ29yZTo6VmlzaXRlZExpbmtTdG9yZS4KLSAg
ICBib29sIGlzTGlua1Zpc2l0ZWQoV2ViQ29yZTo6UGFnZSYsIFdlYkNvcmU6OkxpbmtIYXNoLCBj
b25zdCBXZWJDb3JlOjpVUkwmIGJhc2VVUkwsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRl
VVJMKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rKFdlYkNvcmU6OlBhZ2UmLCBX
ZWJDb3JlOjpMaW5rSGFzaCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0xpbmtWaXNpdGVkKFdlYkNv
cmU6OlBhZ2UmLCBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoLCBjb25zdCBXZWJDb3JlOjpVUkwm
IGJhc2VVUkwsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGFkZFZpc2l0ZWRMaW5rKFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpTaGFyZWRTdHJp
bmdIYXNoKSBvdmVycmlkZTsKIAogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyLgogICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIHNldFZpc2l0ZWRMaW5rVGFibGUoY29uc3QgU2hhcmVkTWVtb3J5
OjpIYW5kbGUmKTsKLSAgICB2b2lkIHZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpMaW5rSGFzaD4mKTsKKyAgICB2b2lkIHZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoPiYpOwogICAgIHZvaWQgYWxs
VmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoKTsKICAgICB2b2lkIHJlbW92ZUFsbFZpc2l0ZWRMaW5r
cygpOwogCiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVyOwotICAgIFZpc2l0ZWRMaW5rVGFibGUg
bV92aXNpdGVkTGlua1RhYmxlOworICAgIFNoYXJlZFN0cmluZ0hhc2hUYWJsZSBtX3Zpc2l0ZWRM
aW5rVGFibGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtU
YWJsZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4KaW5kZXggMDM5ZGQzMDIyOWMxMDJkN2M2OGRmNmYw
OTg3OTVkMTRkYWI1YWM5ZS4uZjkxNjQ1M2U0MGU1ZDA1OGQ1OWNjNTljYWM1M2VjNDEwMzgzYjM5
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4KQEAgLTIy
LDcgKzIyLDcgQEAKIAogbWVzc2FnZXMgLT4gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIgewog
ICAgIFNldFZpc2l0ZWRMaW5rVGFibGUoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5k
bGUpCi0gICAgVmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNo
PiBsaW5rSGFzaGVzKQorICAgIFZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKFZlY3RvcjxXZWJDb3Jl
OjpTaGFyZWRTdHJpbmdIYXNoPiBsaW5rSGFzaGVzKQogICAgIEFsbFZpc2l0ZWRMaW5rU3RhdGVD
aGFuZ2VkKCkKICAgICBSZW1vdmVBbGxWaXNpdGVkTGlua3MoKQogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5o
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtT
dG9yZS5oCmluZGV4IDE2NGZlZDFmMDBhNjE4OWE0Nzc1MTllZTkzZGRjYWI1NjgzZTFmYjUuLmFl
ZjRmYzUyYWFlNDEyZjNlNmM0ZWNmNDAzOTViNDNlODdjYzk0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlu
a1N0b3JlLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViVmlzaXRlZExpbmtTdG9yZV9o
CiAjZGVmaW5lIFdlYlZpc2l0ZWRMaW5rU3RvcmVfaAogCi0jaW1wb3J0IDxXZWJDb3JlL0xpbmtI
YXNoLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZFN0cmluZ0hhc2guaD4KICNpbXBvcnQgPFdl
YkNvcmUvVmlzaXRlZExpbmtTdG9yZS5oPgogI2ltcG9ydCA8d3RmL1JlZi5oPgogCkBAIC00NCwx
NCArNDQsMTQgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJWaXNpdGVkTGlua1N0b3JlKCk7
CiAKLSAgICBib29sIGlzTGlua1Zpc2l0ZWQoV2ViQ29yZTo6UGFnZSYsIFdlYkNvcmU6OkxpbmtI
YXNoLCBjb25zdCBXZWJDb3JlOjpVUkwmIGJhc2VVUkwsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0
cmlidXRlVVJMKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rKFdlYkNvcmU6OlBh
Z2UmLCBXZWJDb3JlOjpMaW5rSGFzaCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0xpbmtWaXNpdGVk
KFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoLCBjb25zdCBXZWJDb3Jl
OjpVUkwmIGJhc2VVUkwsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rKFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpTaGFy
ZWRTdHJpbmdIYXNoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlua3NJ
Zk5lZWRlZChXZWJDb3JlOjpQYWdlJik7Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGlua0hhc2goV2Vi
Q29yZTo6TGlua0hhc2gpOworICAgIHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoKFdlYkNvcmU6OlNo
YXJlZFN0cmluZ0hhc2gpOwogICAgIHZvaWQgcmVtb3ZlVmlzaXRlZExpbmtIYXNoZXMoKTsKIAot
ICAgIEhhc2hTZXQ8V2ViQ29yZTo6TGlua0hhc2gsIFdlYkNvcmU6OkxpbmtIYXNoSGFzaD4gbV92
aXNpdGVkTGlua0hhc2hlczsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2gs
IFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2hIYXNoPiBtX3Zpc2l0ZWRMaW5rSGFzaGVzOwogICAg
IGJvb2wgbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9y
ZS5tbQppbmRleCBhMTUyOTMzNGIzODYwZjZiMWU3MWQ0MDlhMmYzMjA2OGYyZGM3ZGY0Li5iMjIx
ZDkzNTViMDNhZGE4YjZlYzY1MThmMjljZmZjYzhjYzVlNDFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5r
U3RvcmUubW0KQEAgLTg0LDE5ICs4NCwxOSBAQCB2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFk
ZFZpc2l0ZWRMaW5rKE5TU3RyaW5nICp1cmxTdHJpbmcpCiAgICAgc2l6ZV90IGxlbmd0aCA9IHVy
bFN0cmluZy5sZW5ndGg7CiAKICAgICBpZiAoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBDRlN0
cmluZ0dldENoYXJhY3RlcnNQdHIoKF9fYnJpZGdlIENGU3RyaW5nUmVmKXVybFN0cmluZykpIHsK
LSAgICAgICAgYWRkVmlzaXRlZExpbmtIYXNoKHZpc2l0ZWRMaW5rSGFzaChjaGFyYWN0ZXJzLCBs
ZW5ndGgpKTsKKyAgICAgICAgYWRkVmlzaXRlZExpbmtIYXNoKGNvbXB1dGVTaGFyZWRTdHJpbmdI
YXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
VmVjdG9yPFVDaGFyLCA1MTI+IGJ1ZmZlcihsZW5ndGgpOwogICAgIFt1cmxTdHJpbmcgZ2V0Q2hh
cmFjdGVyczpidWZmZXIuZGF0YSgpXTsKIAotICAgIGFkZFZpc2l0ZWRMaW5rSGFzaCh2aXNpdGVk
TGlua0hhc2goYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSk7CisgICAgYWRkVmlzaXRlZExpbmtIYXNo
KGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCkpOwogfQogCiB2
b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZVZpc2l0ZWRMaW5rKE5TU3RyaW5nICp1cmxT
dHJpbmcpCiB7Ci0gICAgTGlua0hhc2ggbGlua0hhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsU3Ry
aW5nKTsKKyAgICBhdXRvIGxpbmtIYXNoID0gY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2godXJsU3Ry
aW5nKTsKIAogICAgIEFTU0VSVChtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNvbnRhaW5zKGxpbmtIYXNo
KSk7CiAgICAgbV92aXNpdGVkTGlua0hhc2hlcy5yZW1vdmUobGlua0hhc2gpOwpAQCAtMTA0LDE0
ICsxMDQsMTQgQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjpyZW1vdmVWaXNpdGVkTGluayhO
U1N0cmluZyAqdXJsU3RyaW5nKQogICAgIGludmFsaWRhdGVTdHlsZXNGb3JMaW5rKGxpbmtIYXNo
KTsKIH0KIAotYm9vbCBXZWJWaXNpdGVkTGlua1N0b3JlOjppc0xpbmtWaXNpdGVkKFBhZ2UmIHBh
Z2UsIExpbmtIYXNoIGxpbmtIYXNoLCBjb25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0IEF0b21pY1N0
cmluZyYgYXR0cmlidXRlVVJMKQorYm9vbCBXZWJWaXNpdGVkTGlua1N0b3JlOjppc0xpbmtWaXNp
dGVkKFBhZ2UmIHBhZ2UsIFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gsIGNvbnN0IFVSTCYgYmFz
ZVVSTCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCiB7CiAgICAgcG9wdWxhdGVW
aXNpdGVkTGlua3NJZk5lZWRlZChwYWdlKTsKIAogICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rSGFz
aGVzLmNvbnRhaW5zKGxpbmtIYXNoKTsKIH0KIAotdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjph
ZGRWaXNpdGVkTGluayhQYWdlJiBzb3VyY2VQYWdlLCBMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQg
V2ViVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmsoUGFnZSYgc291cmNlUGFnZSwgU2hh
cmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKICAgICBpZiAoIXNfc2hvdWxkVHJhY2tWaXNpdGVk
TGlua3MpCiAgICAgICAgIHJldHVybjsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIFdlYlZpc2l0
ZWRMaW5rU3RvcmU6OnBvcHVsYXRlVmlzaXRlZExpbmtzSWZOZWVkZWQoUGFnZSYgcGFnZSkKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIFdlYlZpc2l0ZWRMaW5rU3Rv
cmU6OmFkZFZpc2l0ZWRMaW5rSGFzaChMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQgV2ViVmlzaXRl
ZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoKFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gp
CiB7CiAgICAgQVNTRVJUKHNfc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0
b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0
ZWRMaW5rU3RvcmUuY3BwCmluZGV4IDZiNDNjMTEyMWFhNTlmMzdjOTlmOTY3MWYyZTc1N2Y5NjMz
YzY1OGIuLjJhN2E3ZDdlNTc4ZDQ1Y2I3M2E2MzhiMjk4ZGVkYTg0NmM3OTA3MzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5r
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YlZpc2l0ZWRMaW5rU3RvcmUuY3BwCkBAIC03NSwxNyArNzUsMTcgQEAgdm9pZCBXZWJWaXNpdGVk
TGlua1N0b3JlOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQogCiB2b2lkIFdlYlZpc2l0ZWRMaW5r
U3RvcmU6OmFkZFZpc2l0ZWRMaW5rKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewotICAgIGFk
ZFZpc2l0ZWRMaW5rSGFzaCh2aXNpdGVkTGlua0hhc2godXJsU3RyaW5nKSk7CisgICAgYWRkVmlz
aXRlZExpbmtIYXNoKGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoKHVybFN0cmluZykpOwogfQogCi1i
b29sIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmlzTGlua1Zpc2l0ZWQoUGFnZSYgcGFnZSwgTGlua0hh
c2ggbGlua0hhc2gsIGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRy
aWJ1dGVVUkwpCitib29sIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmlzTGlua1Zpc2l0ZWQoUGFnZSYg
cGFnZSwgU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCwgY29uc3QgVVJMJiBiYXNlVVJMLCBjb25z
dCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKIHsKICAgICBwb3B1bGF0ZVZpc2l0ZWRMaW5r
c0lmTmVlZGVkKHBhZ2UpOwogCiAgICAgcmV0dXJuIG1fdmlzaXRlZExpbmtIYXNoZXMuY29udGFp
bnMobGlua0hhc2gpOwogfQogCi12b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRM
aW5rKFBhZ2UmLCBMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6
YWRkVmlzaXRlZExpbmsoUGFnZSYsIFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCiB7CiAgICAg
aWYgKCFzX3Nob3VsZFRyYWNrVmlzaXRlZExpbmtzKQogICAgICAgICByZXR1cm47CkBAIC0xMTcs
NyArMTE3LDcgQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjpwb3B1bGF0ZVZpc2l0ZWRMaW5r
c0lmTmVlZGVkKFBhZ2UmIHNvdXJjZVBhZ2UpCiAgICAgaGlzdG9yeS0+YWRkVmlzaXRlZExpbmtz
VG9WaXNpdGVkTGlua1N0b3JlKCp0aGlzKTsKIH0KIAotdm9pZCBXZWJWaXNpdGVkTGlua1N0b3Jl
OjphZGRWaXNpdGVkTGlua0hhc2goTGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFdlYlZpc2l0ZWRM
aW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rSGFzaChTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQog
ewogICAgIEFTU0VSVChzX3Nob3VsZFRyYWNrVmlzaXRlZExpbmtzKTsKICAgICBtX3Zpc2l0ZWRM
aW5rSGFzaGVzLmFkZChsaW5rSGFzaCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmgKaW5kZXggZTll
MTI0NDQ0ZjQ0NzA5NGJhOTQ2Y2Q3Yjc2NzhmMDk1Y2Y0ZTQ0OS4uNmE3Yjk5MjJjM2EzOTE1MjJj
M2RhMDQ3ZTRhMDY5NzNiNDA0ZDExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaApAQCAtMjYs
NyArMjYsNyBAQAogI2lmbmRlZiBXZWJWaXNpdGVkTGlua1N0b3JlX2gKICNkZWZpbmUgV2ViVmlz
aXRlZExpbmtTdG9yZV9oCiAKLSNpbmNsdWRlIDxXZWJDb3JlL0xpbmtIYXNoLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TaGFyZWRTdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaXNpdGVk
TGlua1N0b3JlLmg+CiAKIGNsYXNzIFdlYlZpc2l0ZWRMaW5rU3RvcmUgZmluYWwgOiBwdWJsaWMg
V2ViQ29yZTo6VmlzaXRlZExpbmtTdG9yZSB7CkBAIC00MiwxNCArNDIsMTQgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBXZWJWaXNpdGVkTGlua1N0b3JlKCk7CiAKLSAgICBib29sIGlzTGlua1Zp
c2l0ZWQoV2ViQ29yZTo6UGFnZSYsIFdlYkNvcmU6OkxpbmtIYXNoLCBjb25zdCBXZWJDb3JlOjpV
UkwmIGJhc2VVUkwsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKSBvdmVycmlkZTsK
LSAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rKFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpMaW5rSGFz
aCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0xpbmtWaXNpdGVkKFdlYkNvcmU6OlBhZ2UmLCBXZWJD
b3JlOjpTaGFyZWRTdHJpbmdIYXNoLCBjb25zdCBXZWJDb3JlOjpVUkwmIGJhc2VVUkwsIGNvbnN0
IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZFZpc2l0
ZWRMaW5rKFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoKSBvdmVycmlk
ZTsKIAogICAgIHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlua3NJZk5lZWRlZChXZWJDb3JlOjpQYWdl
Jik7Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGlua0hhc2goV2ViQ29yZTo6TGlua0hhc2gpOworICAg
IHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2gpOwogICAg
IHZvaWQgcmVtb3ZlVmlzaXRlZExpbmtIYXNoZXMoKTsKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6
TGlua0hhc2gsIFdlYkNvcmU6OkxpbmtIYXNoSGFzaD4gbV92aXNpdGVkTGlua0hhc2hlczsKKyAg
ICBIYXNoU2V0PFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2gsIFdlYkNvcmU6OlNoYXJlZFN0cmlu
Z0hhc2hIYXNoPiBtX3Zpc2l0ZWRMaW5rSGFzaGVzOwogICAgIGJvb2wgbV92aXNpdGVkTGlua3NQ
b3B1bGF0ZWQ7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322140</attachid>
            <date>2017-09-28 16:22:19 -0700</date>
            <delta_ts>2017-09-28 16:45:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177575-20170928162219.patch</filename>
            <type>text/plain</type>
            <size>114290</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDE1YjFkZDc1NjUwNTFi
OWQwYjdkM2JhYTBiODkxMGMyZWUxNjk1My4uNzk0ZDdmZmYxY2U1NjZhNzQwNjM4ODhiN2M1MDFh
NmFhZmVlY2NjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE3LTA5LTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgc29tZSBsb2dpYyBv
dXQgb2YgVmlzaXRlZExpbmtTdG9yZSBhbmQgbWFrZSBpdCByZXVzYWJsZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTc1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIExpbmtIYXNoIHRvIFNo
YXJlZFN0cmluZ0hhc2ggdG8gbWFrZSBpdCBtb3JlIHJldXNhYmxlLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKiBkb20vVmlzaXRl
ZExpbmtTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsaW5rSGFzaEZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yTGlu
ayk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3Rh
dGVTbG93Q2FzZSk6CisgICAgICAgICogZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9y
RWxlbWVudDo6dmlzaXRlZExpbmtIYXNoIGNvbnN0KToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlD
bGllbnRzLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkVmlzaXRlZExpbmspOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayk6CisgICAg
ICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RvcmU6OmludmFsaWRhdGVTdHlsZXNGb3JM
aW5rKToKKyAgICAgICAgKiBwYWdlL1Zpc2l0ZWRMaW5rU3RvcmUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9TaGFyZWRTdHJpbmdIYXNoLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xpbmtIYXNoLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Om5lZWRzVHJhaWxpbmdTbGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2hhcmVkU3RyaW5nSGFzaCk6CisgICAgICAgICogcGxh
dGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTGlua0hhc2guaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2hIYXNo
OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2hIYXNoOjplcXVhbCk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoSGFzaDo6YXZvaWREZWxldGVkVmFs
dWUpOgorCiAyMDE3LTA5LTI4ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgVGV4dFJ1bjo6c2V0Q2hhcmFjdGVyc0xlbmd0aCgpIGFuZCBUZXh0UnVu
OjpjaGFyYWN0ZXJzTGVuZ3RoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNTVlM2VmN2Y2YzY1MmQ2OTFiY2Q5YWIx
ZjgzOTVjMGMxZTFiYjYyYS4uMDhmYTAyZmIzY2IwZGUxNDdmOTZlMjJiODBmNDgxNjFhZGRmNTEy
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxNy0wOS0yOCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IHNvbWUgbG9naWMgb3V0IG9mIFZpc2l0
ZWRMaW5rU3RvcmUgYW5kIG1ha2UgaXQgcmV1c2FibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzU3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IHNvbWUgbG9naWMgb3V0IG9mIFZpc2l0ZWRM
aW5rU3RvcmUgYW5kIG1ha2UgaXQgcmV1c2FibGUgZm9yIG90aGVyIHB1cnBvc2VzIHRoYW4KKyAg
ICAgICAgdmlzaXRlZCBsaW5rcyBhbmQgZnJvbSBvdGhlciBwcm9jZXNzZXMgdGhhbiB0aGUgVUlQ
cm9jZXNzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIHJldXNlIHRoZSBuZXcgU2hhcmVkU3Ry
aW5nSGFzaFN0b3JlIGZvciBTZXJ2aWNlIFdvcmtlciByZWdpc3RyYXRpb24KKyAgICAgICAgb24g
U3RvcmFnZVByb2Nlc3Mgc2lkZSBhbmQgcXVlcnlpbmcgb24gV2ViQ29udGVudCBwcm9jZXNzIHNp
ZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVk
U3RyaW5nSGFzaFN0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Om5leHRQb3dlck9m
Mik6CisgICAgICAgIChXZWJLaXQ6OnRhYmxlU2l6ZUZvcktleUNvdW50KToKKyAgICAgICAgKFdl
YktpdDo6U2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpTaGFyZWRTdHJpbmdIYXNoU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpTaGFyZWRTdHJpbmdIYXNoU3RvcmU6OmNyZWF0ZVNoYXJlZE1lbW9yeUhh
bmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6YWRkKToKKyAg
ICAgICAgKFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpjbGVhcik6CisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6cmVzaXplVGFibGUpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWRTdHJpbmdIYXNoU3RvcmU6OnBlbmRpbmdTaGFyZWRTdHJpbmdIYXNoZXNUaW1l
ckZpcmVkKToKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyLmguCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6Q2xp
ZW50Ojp+Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpp
c0VtcHR5IGNvbnN0KToKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1Zpc2l0ZWRMaW5rVGFibGUuY3Bw
LgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRTdHJpbmdIYXNoVGFibGU6OlNoYXJlZFN0cmluZ0hh
c2hUYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hUYWJsZTo6flNoYXJl
ZFN0cmluZ0hhc2hUYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hUYWJs
ZTo6c2V0U2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFRh
YmxlOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmNvbnRh
aW5zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFRhYmxlOjpjbGVh
cik6CisgICAgICAgICogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZS5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9TaGFyZWQvVmlzaXRlZExpbmtUYWJsZS5oLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0QWRkVmlzaXRl
ZExpbmspOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVmlzaXRlZExpbmtTdG9y
ZS5tbToKKyAgICAgICAgKC1bX1dLVmlzaXRlZExpbmtTdG9yZSBhZGRWaXNpdGVkTGlua1dpdGhV
Ukw6XSk6CisgICAgICAgICogVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpWaXNpdGVkTGlua1N0b3JlOjpWaXNpdGVkTGlua1N0b3JlKToKKyAgICAgICAg
KFdlYktpdDo6VmlzaXRlZExpbmtTdG9yZTo6YWRkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgIChXZWJLaXQ6
OlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZUFsbCk6CisgICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRM
aW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rSGFzaEZyb21QYWdlKToKKyAgICAgICAgKFdlYktpdDo6
VmlzaXRlZExpbmtTdG9yZTo6c2VuZFN0b3JlSGFuZGxlVG9Qcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6VmlzaXRlZExpbmtTdG9yZTo6ZGlkSW52YWxpZGF0ZVNoYXJlZE1lbW9yeSk6CisgICAg
ICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OmRpZEFkZFNoYXJlZFN0cmluZ0hhc2hlcyk6
CisgICAgICAgICogVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAg
KiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6aXNMaW5rVmlzaXRlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjphZGRWaXNpdGVkTGluayk6CisgICAg
ICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjp2aXNpdGVkTGlua1N0YXRl
Q2hhbmdlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFi
bGVDb250cm9sbGVyLm1lc3NhZ2VzLmluOgorCiAyMDE3LTA5LTI4ICBUaW1vdGh5IEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpc2UgZGVwbG95bWVudCB0
YXJnZXQgbWFjcm9zIGZyb20gcjIyMjYyMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4
IDdjMGNmZTZmMzEzNTA3ZWM1Yjg4ZDE4ZGU4ZmEzNjNmZmFmN2Q1ZWMuLjAzODM5YThlYWY4MTBi
YjRlY2YyZWI5Yjk5MWNjMjZlNGVjMjZjYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxNy0wOS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCisgICAgICAgIFNwbGl0IHNvbWUgbG9naWMgb3V0IG9mIFZpc2l0ZWRMaW5rU3RvcmUg
YW5kIG1ha2UgaXQgcmV1c2FibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NzU3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUubW06CisgICAgICAgIChX
ZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGluayk6CisgICAgICAgIChXZWJWaXNpdGVk
TGlua1N0b3JlOjpyZW1vdmVWaXNpdGVkTGluayk6CisgICAgICAgIChXZWJWaXNpdGVkTGlua1N0
b3JlOjppc0xpbmtWaXNpdGVkKToKKyAgICAgICAgKFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZp
c2l0ZWRMaW5rSGFzaCk6CisKIDIwMTctMDktMjggIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRA
YXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgSGlnaCBTaWVycmEgMzIgYml0IE1h
YwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IDhkZjVkOGM1MWVlYmI0Njc3NGExN2M1
NzVlMjg3YTZlNjg0ZGJkYWYuLjc2NzU5ODQzOGI4MGRkZDY4OGNhOTIwOGMxY2Y4ZjExOWViN2I4
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0w
OS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IHNv
bWUgbG9naWMgb3V0IG9mIFZpc2l0ZWRMaW5rU3RvcmUgYW5kIG1ha2UgaXQgcmV1c2FibGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzU3NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5jcHA6CisgICAgICAgIChXZWJWaXNpdGVkTGlua1N0
b3JlOjphZGRWaXNpdGVkTGluayk6CisgICAgICAgIChXZWJWaXNpdGVkTGlua1N0b3JlOjppc0xp
bmtWaXNpdGVkKToKKyAgICAgICAgKFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5r
SGFzaCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oOgor
CiAyMDE3LTA5LTI1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgTWFrZSBQb2xpY3lBY3Rpb24gYW4gZW5jb2RhYmxlIGVudW0gY2xhc3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggMWUzOWQyOWE3ODhhYTkyYWZlZDIwYmE1MzA1YjI2OTY2NDQ2
ZDQ4Ni4uNGViN2M2NTEyZTgwMWVjZDI4ZDk0MDFhMmMwOTJmOWQzMzM4ODc0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTIzMjMsNyArMjMyMyw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9MZW5ndGhCb3guY3BwCiAgICAgcGxhdGZvcm0vTGVuZ3RoUG9pbnQuY3BwCiAg
ICAgcGxhdGZvcm0vTGVuZ3RoU2l6ZS5jcHAKLSAgICBwbGF0Zm9ybS9MaW5rSGFzaC5jcHAKICAg
ICBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmNwcAogICAgIHBsYXRmb3JtL0xvZ2dpbmcuY3Bw
CiAgICAgcGxhdGZvcm0vTG93UG93ZXJNb2RlTm90aWZpZXIuY3BwCkBAIC0yMzQ3LDYgKzIzNDYs
NyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUuY3BwCiAgICAgcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAogICAgIHBsYXRmb3JtL1No
YXJlZEJ1ZmZlckNodW5rUmVhZGVyLmNwcAorICAgIHBsYXRmb3JtL1NoYXJlZFN0cmluZ0hhc2gu
Y3BwCiAgICAgcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKICAgICBwbGF0Zm9ybS9UaGVt
ZS5jcHAKICAgICBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI1MTQxY2JhY2U4
MDI0OTJlMzg1ZGJiOWQyNWU5NTFkMjg1NGMxYzEuLjlmODc5OTc3MWM1Njk3NjVjOWEyN2EzZWIw
NDIxMTRmODU3Mzk4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTM0OTgsNiArMzQ5OCw4IEBACiAJCTgzNDhCRkFCMUI4NTcy
OTgwMDkxMkYzNiAvKiBDbGFzc0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0OEJGQTkxQjg1NzI5NTAwOTEyRjM2IC8qIENsYXNz
Q29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTgzNDhCRkFDMUI4NTcyOTgwMDkxMkYzNiAvKiBDbGFz
c0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDgzNDhCRkFBMUI4NTcyOTUwMDkxMkYzNiAvKiBDbGFzc0NvbGxlY3Rpb24uaCAqLzsgfTsK
IAkJODM0REQ0RjQxQkUwODk4OTAwMkM5QzNFIC8qIFBhZ2VNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRERDRGMzFCRTA4OTg5MDAyQzlDM0Ug
LyogUGFnZU1hYy5tbSAqLzsgfTsKKwkJODM0REZBQ0YxRjdEQUU1RDAwQzI3MjVCIC8qIFNoYXJl
ZFN0cmluZ0hhc2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODM0REZBQ0UxRjdEQUU1NzAwQzI3MjVCIC8qIFNoYXJlZFN0cmluZ0hhc2guY3BwICov
OyB9OworCQk4MzRERkFEMDFGN0RBRTVEMDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0REZBQ0MxRjdE
QUU1NjAwQzI3MjVCIC8qIFNoYXJlZFN0cmluZ0hhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4MzUyMEM3RTFBNzFCRkNDMDA2QkQyQUEgLyog
Q1NTRm9udEZhbWlseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODM1MjBDN0QxQTcxQkZDQzAwNkJEMkFBIC8qIENTU0ZvbnRGYW1pbHkuaCAqLzsgfTsK
IAkJODM1NjU3QzcxRUNBQjEwNzAwQ0RFNzJEIC8qIEpTRE9NTWF0cml4SW5pdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzU2NTdDNjFFQ0FCMEU4
MDBDREU3MkQgLyogSlNET01NYXRyaXhJbml0LmNwcCAqLzsgfTsKIAkJODM1OENCNkYxQzUzMjc3
MjAwRTBDMkQ4IC8qIEpTWE1MRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODNGNTcwQUUxQzUzMjY4RTAwN0ZENkNCIC8qIEpTWE1MRG9j
dW1lbnQuY3BwICovOyB9OwpAQCAtNDY3MCw4ICs0NjcyLDYgQEAKIAkJQTc5QkFEQTMxNjFFN0Yz
RjAwQzJFNjUyIC8qIFJ1bGVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc5QkFEOUYxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuY3BwICov
OyB9OwogCQlBNzlCQURBNDE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc5QkFEQTAxNjFFN0YzRjAwQzJF
NjUyIC8qIFJ1bGVTZXQuaCAqLzsgfTsKIAkJQTdBNzhDRDUxNTMyQkE2MjAwNkMyMUU0IC8qIENv
bnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QTc4Q0Q0MTUzMkJBNjIwMDZDMjFFNCAvKiBDb250YWluZXJOb2Rl
QWxnb3JpdGhtcy5jcHAgKi87IH07Ci0JCUE3QUQyRjg3MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5r
SGFzaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0FEMkY4NTBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guY3BwICovOyB9OwotCQlBN0FEMkY4
ODBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QUQyRjg2MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFz
aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
QjZFNjlGMEIyOTFBOTYwMEQwNTI5RiAvKiBEcmFnRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNkU2OUQwQjI5MUE5NjAwRDA1MjlGIC8qIERy
YWdEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTdCQkUyNjYxMUFGQjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1ldGVyRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JCRTI2NDExQUZC
M0YyMDAwNUVBMDMgLyogSlNIVE1MTWV0ZXJFbGVtZW50LmNwcCAqLzsgfTsKIAkJQTdCQkUyNjcx
MUFGQjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1ldGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCQkUyNjUxMUFGQjNGMjAwMDVFQTAzIC8q
IEpTSFRNTE1ldGVyRWxlbWVudC5oICovOyB9OwpAQCAtMTE3NzMsNiArMTE3NzMsOCBAQAogCQk4
MzRCODZBODFDNTZFOTNFMDBGM0YwRTMgLyogSlNIVE1MRGF0YUVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MRGF0YUVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODM0Qjg2QTkxQzU2RTkzRTAwRjNGMEUzIC8qIEpTSFRNTERhdGFF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTERh
dGFFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM0REQ0RjMxQkUw
ODk4OTAwMkM5QzNFIC8qIFBhZ2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBQYWdlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzRE
RkFDQzFGN0RBRTU2MDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRTdHJpbmdIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTgzNERGQUNFMUY3REFFNTcwMEMyNzI1QiAvKiBTaGFyZWRTdHJpbmdIYXNo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZFN0cmluZ0hh
c2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzUwQzNFNzFEQTU5QjYyMDAz
NTY0NDYgLyogU2Nyb2xsVG9PcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcm9sbFRvT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzUw
QzNFODFEQTU5QjYyMDAzNTY0NDYgLyogU2Nyb2xsVG9PcHRpb25zLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBTY3JvbGxUb09wdGlvbnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4MzUyMEM3RDFBNzFCRkNDMDA2QkQyQUEgLyogQ1NTRm9udEZhbWlseS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250RmFtaWx5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzE0Nyw4ICsxMzE0OSw2IEBACiAJCUE3OUJBRDlGMTYxRTdGM0Yw
MEMyRTY1MiAvKiBSdWxlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJ1bGVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzlCQURBMDE2
MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSdWxlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTc4Q0Q0MTUz
MkJBNjIwMDZDMjFFNCAvKiBDb250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3QUQyRjg1MEVDODlEMDcwMDhBQjAwMiAvKiBM
aW5rSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5rSGFz
aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3QUQyRjg2MEVDODlEMDcwMDhB
QjAwMiAvKiBMaW5rSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5r
SGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0RUE2ODE0QzkzNDg0MDBD
OEY1QkYgLyogSlNNYWxsb2NTdGF0aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTTWFsbG9jU3RhdGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3QjRFQTY5MTRDOTM0ODQwMEM4RjVCRiAvKiBKU01hbGxvY1N0YXRpc3RpY3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNYWxsb2NTdGF0aXN0aWNzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QjRFQTc4MTRDOTM0ODQwMEM4RjVCRiAv
KiBKU0ludGVybmFsU2V0dGluZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNJbnRlcm5hbFNldHRpbmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI0NjIwLDggKzI0NjIwLDYgQEAKIAkJCQkwRjg3MTY2RTFDODY5RDgzMDA0RkYwREUgLyog
TGVuZ3RoUG9pbnQuaCAqLywKIAkJCQkwRkVGMjBDRDFCRDRBMjQxMDAxMjhFNUQgLyogTGVuZ3Ro
U2l6ZS5jcHAgKi8sCiAJCQkJQkNGRjY0OTAwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aFNpemUu
aCAqLywKLQkJCQlBN0FEMkY4NTBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guY3BwICovLAot
CQkJCUE3QUQyRjg2MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5oICovLAogCQkJCTUxNDNC
MjYyMURERDE0OTAwMDE0RkFDNiAvKiBMaW5rSWNvbi5oICovLAogCQkJCUMwNDZFMUFCMTIwOEE5
RkUwMEJBMkNGNyAvKiBMb2NhbGl6ZWRTdHJpbmdzLmNwcCAqLywKIAkJCQk5MzUyMDdCRDA5QkQ0
MTBBMDBGMjAzOEQgLyogTG9jYWxpemVkU3RyaW5ncy5oICovLApAQCAtMjQ2OTUsNiArMjQ2OTMs
OCBAQAogCQkJCTA3N0FGMTNFMThGNEFFNDAwMDAxRUQ2MSAvKiBTZXJpYWxpemVkUGxhdGZvcm1S
ZXByZXNlbnRhdGlvbi5oICovLAogCQkJCTFBNEE5NTRCMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFy
ZWRCdWZmZXIuY3BwICovLAogCQkJCTFBNEE5NTRDMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRC
dWZmZXIuaCAqLywKKwkJCQk4MzRERkFDRTFGN0RBRTU3MDBDMjcyNUIgLyogU2hhcmVkU3RyaW5n
SGFzaC5jcHAgKi8sCisJCQkJODM0REZBQ0MxRjdEQUU1NjAwQzI3MjVCIC8qIFNoYXJlZFN0cmlu
Z0hhc2guaCAqLywKIAkJCQk5MzMwOUVBMDA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXIu
aCAqLywKIAkJCQlGNTg3ODY2MjAyREUzQjExMDFFQTQxMjIgLyogU1NMS2V5R2VuZXJhdG9yLmgg
Ki8sCiAJCQkJRjQzM0U5MDQxREJCREJDMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQuY3Bw
ICovLApAQCAtMjkxNTEsNyArMjkxNTEsNiBAQAogCQkJCTg5QjVFQUEyMTFFODAwM0QwMEYyMzY3
RSAvKiBMaW5lRW5kaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRkVGQUIyQTE4MzgwREEwMDA1
MTQ1MzQgLyogTGluZUxheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRkRCQzA0NzE4
M0QyN0I3MDA0MDcxMDkgLyogTGluZVdpZHRoLmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0FEMkY4
ODBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUNCQTlE
QzBCMURGNDRERjQwMDA1Njc1QyAvKiBMaW5rSGVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTQzQjI2MzFEREQxNTIwMDAxNEZBQzYgLyogTGlua0ljb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBNERBNDIyMUNERDNBODMwMEY0NDczQyAvKiBMaW5rSWNvbkNvbGxlY3Rvci5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMDAwNyw2ICszMDAwNiw3IEBACiAJCQkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIx
RUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMUFGMTUwMTY1
NkYxNTEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBOTU0
RTBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk4
MzRERkFEMDFGN0RBRTVEMDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDg5NDRBMzE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTFFMDY3RUUxRTYyNDZFNTAwMTYyRDE2IC8qIFNpbXBs
ZUxpbmVMYXlvdXRDb3ZlcmFnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzIyNiw3ICszMzIyNiw2
IEBACiAJCQkJODlCNUVBQTExMUU4MDAzRDAwRjIzNjdFIC8qIExpbmVFbmRpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkZCNjk4Q0YxODM0MDJCQjAwMTU4QTMxIC8qIExpbmVJbmZvLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZGREJDMDQ4MTgzRDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lkdGgu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTdBRDJGODcwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtI
YXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNCQTlEQzBBMURGNDRERjEwMDA1Njc1QyAvKiBM
aW5rSGVhZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNERBNDIxMUNERDNBODMwMEY0NDcz
QyAvKiBMaW5rSWNvbkNvbGxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OENFNDMyNjEy
OUUwMEJEMDA1ODIxREMgLyogTGlua0xvYWRlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzOTE2
LDYgKzMzOTE1LDcgQEAKIAkJCQkxQTRBOTU0RDBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVm
ZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkREOEUzMEQ5MUUyQjQwMDBGODlFRSAvKiBT
aGFyZWRCdWZmZXJDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAy
RDhDM0MgLyogU2hhcmVkQnVmZmVyQ29jb2EubW0gaW4gU291cmNlcyAqLywKKwkJCQk4MzRERkFD
RjFGN0RBRTVEMDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNjNFODhGNzExOEEzOUQyMDBFRDkyMzEgLyogU2ltcGxlRm9udERhdGFDb3JlVGV4dC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDg5NDRBMjE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxl
TGluZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxMUUwNjdFQzFFNjI0NjEzMDAxNjJE
MTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDM1MDBhMDE4MTk5NTJhNGNhNjAwODI2MTY1
OWE2YWU5Njg4MjhhZjYuLjE5NjM2MjIzMjdjNDc1ZDNjMDRjODY2MDNiNjc1YTUwZDVhOWJjNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTY2LDcgKzY2LDYgQEAKICNp
bmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCi0jaW5jbHVkZSAiTGlua0hh
c2guaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5oIgog
I2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCkBAIC04OSw2ICs4OCw3IEBACiAjaW5jbHVkZSAiU1ZH
VVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dS
b290LmgiCisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlN0eWxlQnVp
bGRlci5oIgogI2luY2x1ZGUgIlN0eWxlQ29sb3IuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZElt
YWdlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKaW5kZXggNTkyMGJk
YWRjZGNlMGE0YmQ0M2IxNTQ4NzM4NmJkMzU0NDM0MTA2Ni4uYzM5OTNkNjUzNWRhNWYzOTZkMmFi
M2ZhZWVkNzhjY2EwYTJkM2FlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0
ZWRMaW5rU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRl
LmNwcApAQCAtNjYsMTYgKzY2LDE2IEBAIHZvaWQgVmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0
ZVN0eWxlRm9yQWxsTGlua3MoKQogICAgIH0KIH0KIAotaW5saW5lIHN0YXRpYyBMaW5rSGFzaCBs
aW5rSGFzaEZvckVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQoraW5saW5lIHN0YXRpYyBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoRm9yRWxlbWVudChE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKGlz
PEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxBbmNob3JFbGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsKICAgICBpZiAoY29u
c3QgQXRvbWljU3RyaW5nKiBhdHRyaWJ1dGUgPSBsaW5rQXR0cmlidXRlKGVsZW1lbnQpKQotICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoKGRvY3VtZW50LmJhc2VVUkwoKSwg
KmF0dHJpYnV0ZSk7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpjb21wdXRlU2hhcmVkU3RyaW5n
SGFzaChkb2N1bWVudC5iYXNlVVJMKCksICphdHRyaWJ1dGUpOwogICAgIHJldHVybiAwOwogfQog
Ci12b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckxpbmsoTGlua0hhc2gg
bGlua0hhc2gpCit2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckxpbmso
U2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKICAgICBpZiAoIW1fbGlua3NDaGVja2VkRm9y
VmlzaXRlZFN0YXRlLmNvbnRhaW5zKGxpbmtIYXNoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTgs
MTEgKzk4LDExIEBAIEVJbnNpZGVMaW5rIFZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtT
dGF0ZVNsb3dDYXNlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgaWYgKGF0dHJpYnV0ZS0+
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gSW5zaWRlVmlzaXRlZExpbms7CiAKLSAgICBMaW5r
SGFzaCBoYXNoOworICAgIFNoYXJlZFN0cmluZ0hhc2ggaGFzaDsKICAgICBpZiAoaXM8SFRNTEFu
Y2hvckVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICBoYXNoID0gZG93bmNhc3Q8SFRNTEFuY2hv
ckVsZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5rSGFzaCgpOwogICAgIGVsc2UKLSAgICAgICAg
aGFzaCA9IFdlYkNvcmU6OnZpc2l0ZWRMaW5rSGFzaChlbGVtZW50LmRvY3VtZW50KCkuYmFzZVVS
TCgpLCAqYXR0cmlidXRlKTsKKyAgICAgICAgaGFzaCA9IFdlYkNvcmU6OmNvbXB1dGVTaGFyZWRT
dHJpbmdIYXNoKGVsZW1lbnQuZG9jdW1lbnQoKS5iYXNlVVJMKCksICphdHRyaWJ1dGUpOwogCiAg
ICAgaWYgKCFoYXNoKQogICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5oCmluZGV4IDJhMTQyYWQ4NjZhNDVkOTYxOTczMzFj
MDVjMjkyYTYwYTgzOWNjZjguLmNjOWU1ZWM0N2E2NjZlNTgxM2JiNWYwYmY3M2ZmZjcyOGM3YWZk
OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaApAQCAtMjksOCArMjksOCBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiTGlua0hh
c2guaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgorI2luY2x1ZGUgIlNoYXJl
ZFN0cmluZ0hhc2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00MywxNCArNDMsMTQgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFZpc2l0ZWRM
aW5rU3RhdGUoRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlu
a3MoKTsKLSAgICB2b2lkIGludmFsaWRhdGVTdHlsZUZvckxpbmsoTGlua0hhc2gpOworICAgIHZv
aWQgaW52YWxpZGF0ZVN0eWxlRm9yTGluayhTaGFyZWRTdHJpbmdIYXNoKTsKICAgICBFSW5zaWRl
TGluayBkZXRlcm1pbmVMaW5rU3RhdGUoY29uc3QgRWxlbWVudCYpOwogCiBwcml2YXRlOgogICAg
IEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKGNvbnN0IEVsZW1lbnQmKTsK
IAogICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwotICAgIEhhc2hTZXQ8TGlua0hhc2gsIExpbmtI
YXNoSGFzaD4gbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGU7CisgICAgSGFzaFNldDxTaGFy
ZWRTdHJpbmdIYXNoLCBTaGFyZWRTdHJpbmdIYXNoSGFzaD4gbV9saW5rc0NoZWNrZWRGb3JWaXNp
dGVkU3RhdGU7CiB9OwogCiBpbmxpbmUgRUluc2lkZUxpbmsgVmlzaXRlZExpbmtTdGF0ZTo6ZGV0
ZXJtaW5lTGlua1N0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmgKaW5kZXggYTdiYzYwOTllMTI1OTFlNTJhNzBjMWI1Y2NjZGIz
YmQ3MDA4NTRmNS4uZTRlNGEzZGNkYzVhNmE5MWY4NWY0OTU3MjZjZGZhNTE3NDg3Mzg0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaApAQCAtMjUsNyArMjUsNyBAQAog
CiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNs
dWRlICJMaW5rSGFzaC5oIgorI2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2guaCIKICNpbmNsdWRl
ICJVUkxVdGlscy5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtNjIsNyArNjIs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1JlbChSZWxhdGlvbikgY29uc3Q7CiAgICAgCi0g
ICAgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKCkgY29uc3Q7CisgICAgU2hhcmVkU3RyaW5nSGFz
aCB2aXNpdGVkTGlua0hhc2goKSBjb25zdDsKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZWRWaXNp
dGVkTGlua0hhc2goKSB7IG1fY2FjaGVkVmlzaXRlZExpbmtIYXNoID0gMDsgfQogCiAgICAgV0VC
Q09SRV9FWFBPUlQgRE9NVG9rZW5MaXN0JiByZWxMaXN0KCk7CkBAIC0xMDQsMTUgKzEwNCwxNSBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNSb290RWRpdGFibGVFbGVtZW50Rm9yU2VsZWN0aW9u
T25Nb3VzZURvd247CiAgICAgYm9vbCBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duOwogICAg
IE9wdGlvblNldDxSZWxhdGlvbj4gbV9saW5rUmVsYXRpb25zOwotICAgIG11dGFibGUgTGlua0hh
c2ggbV9jYWNoZWRWaXNpdGVkTGlua0hhc2g7CisgICAgbXV0YWJsZSBTaGFyZWRTdHJpbmdIYXNo
IG1fY2FjaGVkVmlzaXRlZExpbmtIYXNoOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERPTVRva2Vu
TGlzdD4gbV9yZWxMaXN0OwogfTsKIAotaW5saW5lIExpbmtIYXNoIEhUTUxBbmNob3JFbGVtZW50
Ojp2aXNpdGVkTGlua0hhc2goKSBjb25zdAoraW5saW5lIFNoYXJlZFN0cmluZ0hhc2ggSFRNTEFu
Y2hvckVsZW1lbnQ6OnZpc2l0ZWRMaW5rSGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NhY2hl
ZFZpc2l0ZWRMaW5rSGFzaCkKLSAgICAgICAgbV9jYWNoZWRWaXNpdGVkTGlua0hhc2ggPSBXZWJD
b3JlOjp2aXNpdGVkTGlua0hhc2goZG9jdW1lbnQoKS5iYXNlVVJMKCksIGF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpocmVmQXR0cikpOworICAgICAgICBtX2NhY2hl
ZFZpc2l0ZWRMaW5rSGFzaCA9IFdlYkNvcmU6OmNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoKGRvY3Vt
ZW50KCkuYmFzZVVSTCgpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1l
czo6aHJlZkF0dHIpKTsKICAgICByZXR1cm4gbV9jYWNoZWRWaXNpdGVkTGlua0hhc2g7IAogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCmluZGV4IDFiOTk4OWM0NjA2NTY2
OGExMWRjNzZlYzQxMWQ4ZmZhNTc5NWVjMTIuLjEzMTgzMzBkMjVkNGQ2NzMwZGFjMDQ1OGZlNDEy
YWQ1NWE4ZWYwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVu
dHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCkBAIC01
NjcsOCArNTY3LDggQEAgY2xhc3MgRW1wdHlVc2VyQ29udGVudFByb3ZpZGVyIGZpbmFsIDogcHVi
bGljIFVzZXJDb250ZW50UHJvdmlkZXIgewogfTsKIAogY2xhc3MgRW1wdHlWaXNpdGVkTGlua1N0
b3JlIGZpbmFsIDogcHVibGljIFZpc2l0ZWRMaW5rU3RvcmUgewotICAgIGJvb2wgaXNMaW5rVmlz
aXRlZChQYWdlJiwgTGlua0hhc2gsIGNvbnN0IFVSTCYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGluayhQYWdlJiwgTGlu
a0hhc2gpIGZpbmFsIHsgfQorICAgIGJvb2wgaXNMaW5rVmlzaXRlZChQYWdlJiwgU2hhcmVkU3Ry
aW5nSGFzaCwgY29uc3QgVVJMJiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWwgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rKFBhZ2UmLCBTaGFyZWRTdHJpbmdIYXNo
KSBmaW5hbCB7IH0KIH07CiAKIFJlZlB0cjxQb3B1cE1lbnU+IEVtcHR5Q2hyb21lQ2xpZW50Ojpj
cmVhdGVQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50JikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCmluZGV4IDAzYzY1M2I0ZDY2ZjA4MTA5YjcxZWMz
ZmViZTNhMTViY2Q1MmQ2YjIuLjJiYWM4YTgyOGQwYzMzZGNkZDQ0ZTBjMWJjMmRmYTQyOTFiODZi
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcApAQCAt
NDEsMTMgKzQxLDEzIEBACiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKLSNpbmNsdWRlICJMaW5rSGFzaC5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJT
aGFyZWRTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdG9yZS5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRWaXNpdGVkTGluayhQYWdlJiBwYWdlLCBj
b25zdCBVUkwmIHVybCkKIHsKLSAgICBwYWdlLnZpc2l0ZWRMaW5rU3RvcmUoKS5hZGRWaXNpdGVk
TGluayhwYWdlLCB2aXNpdGVkTGlua0hhc2godXJsLnN0cmluZygpKSk7CisgICAgcGFnZS52aXNp
dGVkTGlua1N0b3JlKCkuYWRkVmlzaXRlZExpbmsocGFnZSwgY29tcHV0ZVNoYXJlZFN0cmluZ0hh
c2godXJsLnN0cmluZygpKSk7CiB9CiAKIEhpc3RvcnlDb250cm9sbGVyOjpIaXN0b3J5Q29udHJv
bGxlcihGcmFtZSYgZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA5MTgyYmM5YTQ5OGFmZmI4
N2QyOTA3MmJjYWI1ZmQ4YTM3NGRkMzVkLi5kYmUyODUxY2M2NjE5ODA0Mjk0YjNkN2RlNWM2ZDgw
NGI2ZDcyZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEyMDEsNyArMTIwMSw3IEBAIHZvaWQg
UGFnZTo6aW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKCkKICAgICB9CiB9CiAKLXZvaWQgUGFn
ZTo6aW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsoTGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFBhZ2U6
OmludmFsaWRhdGVTdHlsZXNGb3JMaW5rKFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCiB7CiAg
ICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgaWYgKCFmcmFtZS0+ZG9j
dW1lbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggMjRmNTBkYmE3NGJmNTRiYWU4ZGM1ODhlYjM5ZmEw
OWZlYzNlNTA2ZC4uMDIzYTJiMGJmNzk5YWU0NDQyMTlhZjIyMTZjNjA3OGE4NmQ2ZmUxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgKQEAgLTEzMSw3ICsxMzEsNyBAQCBjbGFzcyBBY3Rpdml0eVN0YXRlQ2hhbmdl
T2JzZXJ2ZXI7CiBjbGFzcyBWaXNpdGVkTGlua1N0b3JlOwogY2xhc3MgV2ViR0xTdGF0ZVRyYWNr
ZXI7CiAKLXR5cGVkZWYgdWludDY0X3QgTGlua0hhc2g7Cit0eXBlZGVmIHVpbnQ2NF90IFNoYXJl
ZFN0cmluZ0hhc2g7CiAKIGVudW0gRmluZERpcmVjdGlvbiB7CiAgICAgRmluZERpcmVjdGlvbkZv
cndhcmQsCkBAIC0zOTgsNyArMzk4LDcgQEAgcHVibGljOgogICAgIEpTQzo6RGVidWdnZXIqIGRl
YnVnZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlcjsgfQogCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlua3MoKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGludmFsaWRhdGVTdHlsZXNGb3JMaW5rKExpbmtIYXNoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGludmFsaWRhdGVTdHlsZXNGb3JMaW5rKFNoYXJlZFN0cmluZ0hhc2gpOwogCiAg
ICAgdm9pZCBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lcygpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcAppbmRleCA5NzNiNzhlZTYz
OGY3M2JhMTI1NDQzZTAwNTBhOWEwNTllYjc3ODljLi5kN2E1OGI1ZWYyYzZlZWI1ZDdkOGE4MjNk
NTBiZjk4OTQ5ZmE0NTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Zpc2l0ZWRM
aW5rU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzaXRlZExpbmtTdG9yZS5j
cHAKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3JlOjppbnZhbGlkYXRlU3R5
bGVzRm9yQWxsTGlua3MoKQogICAgICAgICBwYWdlLT5pbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlu
a3MoKTsKIH0KIAotdm9pZCBWaXNpdGVkTGlua1N0b3JlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGlu
ayhMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQgVmlzaXRlZExpbmtTdG9yZTo6aW52YWxpZGF0ZVN0
eWxlc0ZvckxpbmsoU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKICAgICBmb3IgKGF1dG8m
IHBhZ2UgOiBtX3BhZ2VzKQogICAgICAgICBwYWdlLT5pbnZhbGlkYXRlU3R5bGVzRm9yTGluayhs
aW5rSGFzaCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Zpc2l0ZWRMaW5rU3Rv
cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzaXRlZExpbmtTdG9yZS5oCmluZGV4IDQ0MTMw
NmE0NzRiZGMwYTNiZGUwNGU3Y2ZjZGY0NGM0NWE3OGY2MjkuLjQzYzM1MTM3MmQ2MThiNjgxMDli
MGZiOGNjZDY5ZmM4NWY4YmRkNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlz
aXRlZExpbmtTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzaXRlZExpbmtTdG9y
ZS5oCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiB1
aW50NjRfdCBMaW5rSGFzaDsKK3R5cGVkZWYgdWludDY0X3QgU2hhcmVkU3RyaW5nSGFzaDsKIGNs
YXNzIFBhZ2U7CiBjbGFzcyBVUkw7CiAKQEAgLTQxLDE0ICs0MSwxNCBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+VmlzaXRlZExpbmtTdG9yZSgpOwogCiAgICAgLy8gRklY
TUU6IFRoZXNlIHR3byBtZW1iZXJzIHNob3VsZCBvbmx5IHRha2UgdGhlIGxpbmsgaGFzaC4KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hhc2gsIGNvbnN0IFVSTCYg
YmFzZVVSTCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRkVmlzaXRlZExpbmsoUGFnZSYsIExpbmtIYXNoKSA9IDA7CisgICAgdmlydHVh
bCBib29sIGlzTGlua1Zpc2l0ZWQoUGFnZSYsIFNoYXJlZFN0cmluZ0hhc2gsIGNvbnN0IFVSTCYg
YmFzZVVSTCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkVmlzaXRlZExpbmsoUGFnZSYsIFNoYXJlZFN0cmluZ0hhc2gpID0gMDsKIAog
ICAgIHZvaWQgYWRkUGFnZShQYWdlJik7CiAgICAgdm9pZCByZW1vdmVQYWdlKFBhZ2UmKTsKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVzRm9yTGluayhMaW5rSGFzaCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVzRm9yTGluayhTaGFyZWRT
dHJpbmdIYXNoKTsKIAogcHJpdmF0ZToKICAgICBIYXNoU2V0PFBhZ2UqPiBtX3BhZ2VzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjODMzZTRiODkxZjNhNzVhNzNlOWI0YzAwMmVlMmQ3NWZjMDRkOWQxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xpbmtIYXNoLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJM
aW5rSGFzaC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci1zdGF0aWMgaW5saW5lIHNpemVfdCBmaW5kU2xhc2hEb3REb3RTbGFzaChjb25zdCBDaGFy
YWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgcG9zaXRpb24pCi17
Ci0gICAgaWYgKGxlbmd0aCA8IDQpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICBzaXpl
X3QgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMzsKLSAgICBmb3IgKHNpemVfdCBpID0gcG9zaXRpb247
IGkgPCBsb29wTGltaXQ7ICsraSkgewotICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycg
JiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcuJyAm
JiBjaGFyYWN0ZXJzW2kgKyAzXSA9PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9
Ci0gICAgcmV0dXJuIG5vdEZvdW5kOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpbmRTbGFzaFNsYXNoKGNvbnN0IENoYXJhY3Rl
clR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBwb3NpdGlvbikKLXsKLSAg
ICBpZiAobGVuZ3RoIDwgMikKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHNpemVfdCBs
b29wTGltaXQgPSBsZW5ndGggLSAxOwotICAgIGZvciAoc2l6ZV90IGkgPSBwb3NpdGlvbjsgaSA8
IGxvb3BMaW1pdDsgKytpKSB7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBj
aGFyYWN0ZXJzW2kgKyAxXSA9PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0g
ICAgcmV0dXJuIG5vdEZvdW5kOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpbmRTbGFzaERvdFNsYXNoKGNvbnN0IENoYXJhY3Rl
clR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBwb3NpdGlvbikKLXsKLSAg
ICBpZiAobGVuZ3RoIDwgMykKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHNpemVfdCBs
b29wTGltaXQgPSBsZW5ndGggLSAyOwotICAgIGZvciAoc2l6ZV90IGkgPSBwb3NpdGlvbjsgaSA8
IGxvb3BMaW1pdDsgKytpKSB7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBj
aGFyYWN0ZXJzW2kgKyAxXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy8nKQotICAg
ICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiBub3RGb3VuZDsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgY29udGFp
bnNDb2xvblNsYXNoU2xhc2goY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIGlmIChsZW5ndGggPCAzKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgdW5zaWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMjsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKLSAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0g
PT0gJzonICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9
PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUg
dm9pZCBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4m
IHN0cmluZykKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0cmluZy5zaXplKCk7Ci0gICAgc2l6ZV90
IGkgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFz
dHJpbmdbaV0pCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGkgPT0gc2l6ZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHNpemVfdCBqID0gaTsKLSAgICBmb3IgKCsraTsgaSA8IHNp
emU7ICsraSkgewotICAgICAgICBpZiAoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIgPSBzdHJpbmdb
aV0pCi0gICAgICAgICAgICBzdHJpbmdbaisrXSA9IGNoYXJhY3RlcjsKLSAgICB9Ci0gICAgQVNT
RVJUKGogPCBzaXplKTsKLSAgICBzdHJpbmcuc2hyaW5rKGopOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyB2b2lkIGNsZWFuU2xhc2hEb3REb3RTbGFzaGVz
KFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCA1MTI+JiBwYXRoLCBzaXplX3QgZmlyc3RTbGFzaCkKLXsK
LSAgICBzaXplX3Qgc2xhc2ggPSBmaXJzdFNsYXNoOwotICAgIGRvIHsKLSAgICAgICAgc2l6ZV90
IHByZXZpb3VzU2xhc2ggPSBzbGFzaCA/IHJldmVyc2VGaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNp
emUoKSwgJy8nLCBzbGFzaCAtIDEpIDogbm90Rm91bmQ7Ci0gICAgICAgIC8vIERvbid0IHJlbW92
ZSB0aGUgaG9zdCwgaS5lLiBodHRwOi8vZm9vLm9yZy8uLi9mb28uaHRtbAotICAgICAgICBpZiAo
cHJldmlvdXNTbGFzaCA9PSBub3RGb3VuZCB8fCAocHJldmlvdXNTbGFzaCA+IDMgJiYgcGF0aFtw
cmV2aW91c1NsYXNoIC0gMl0gPT0gJzonICYmIHBhdGhbcHJldmlvdXNTbGFzaCAtIDFdID09ICcv
JykpIHsKLSAgICAgICAgICAgIHBhdGhbc2xhc2hdID0gMDsKLSAgICAgICAgICAgIHBhdGhbc2xh
c2ggKyAxXSA9IDA7Ci0gICAgICAgICAgICBwYXRoW3NsYXNoICsgMl0gPSAwOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHByZXZpb3VzU2xhc2g7IGkgPCBz
bGFzaCArIDM7ICsraSkKLSAgICAgICAgICAgICAgICBwYXRoW2ldID0gMDsKLSAgICAgICAgfQot
ICAgICAgICBzbGFzaCArPSAzOwotICAgIH0gd2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdERv
dFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgc2xhc2gpKSAhPSBub3RGb3VuZCk7Ci0g
ICAgc3F1ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKHBhdGgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyB2b2lkIG1lcmdlRG91YmxlU2xhc2hlcyhWZWN0b3I8
Q2hhcmFjdGVyVHlwZSwgNTEyPiYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gpCi17Ci0gICAgc2l6
ZV90IHJlZlBvcyA9IGZpbmQocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAnIycpOwotICAgIGlm
ICghcmVmUG9zIHx8IHJlZlBvcyA9PSBub3RGb3VuZCkKLSAgICAgICAgcmVmUG9zID0gcGF0aC5z
aXplKCk7Ci0KLSAgICBzaXplX3Qgc2xhc2ggPSBmaXJzdFNsYXNoOwotICAgIHdoaWxlIChzbGFz
aCA8IHJlZlBvcykgewotICAgICAgICBpZiAoIXNsYXNoIHx8IHBhdGhbc2xhc2ggLSAxXSAhPSAn
OicpCi0gICAgICAgICAgICBwYXRoW3NsYXNoKytdID0gMDsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc2xhc2ggKz0gMjsKLSAgICAgICAgaWYgKChzbGFzaCA9IGZpbmRTbGFzaFNsYXNoKHBh
dGguZGF0YSgpLCBwYXRoLnNpemUoKSwgc2xhc2gpKSA9PSBub3RGb3VuZCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIHZvaWQgY2xlYW5TbGFz
aERvdFNsYXNoZXMoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJz
dFNsYXNoKQotewotICAgIHNpemVfdCBzbGFzaCA9IGZpcnN0U2xhc2g7Ci0gICAgZG8gewotICAg
ICAgICBwYXRoW3NsYXNoXSA9IDA7Ci0gICAgICAgIHBhdGhbc2xhc2ggKyAxXSA9IDA7Ci0gICAg
ICAgIHNsYXNoICs9IDI7Ci0gICAgfSB3aGlsZSAoKHNsYXNoID0gZmluZFNsYXNoRG90U2xhc2go
cGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCBzbGFzaCkpICE9IG5vdEZvdW5kKTsKLSAgICBzcXVl
ZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSB2b2lkIGNsZWFuUGF0aChWZWN0b3I8Q2hhcmFjdGVy
VHlwZSwgNTEyPiYgcGF0aCkKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBkbyB0aGlzIGlu
IHRoZSBxdWVyeSBvciBhbmNob3IgcGFydCBvZiB0aGUgVVJMLgotICAgIHNpemVfdCBmaXJzdFNs
YXNoID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAwKTsK
LSAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKLSAgICAgICAgY2xlYW5TbGFzaERvdERv
dFNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBk
byB0aGlzIGluIHRoZSBxdWVyeSBwYXJ0LgotICAgIGZpcnN0U2xhc2ggPSBmaW5kU2xhc2hTbGFz
aChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIDApOwotICAgIGlmIChmaXJzdFNsYXNoICE9IG5v
dEZvdW5kKQotICAgICAgICBtZXJnZURvdWJsZVNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7Ci0K
LSAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVyeSBvciBhbmNob3Ig
cGFydC4KLSAgICBmaXJzdFNsYXNoID0gZmluZFNsYXNoRG90U2xhc2gocGF0aC5kYXRhKCksIHBh
dGguc2l6ZSgpLCAwKTsKLSAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKLSAgICAgICAg
Y2xlYW5TbGFzaERvdFNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIG1hdGNoTGV0dGVyKENo
YXJhY3RlclR5cGUgYywgY2hhciBsb3dlcmNhc2VMZXR0ZXIpCi17Ci0gICAgcmV0dXJuIChjIHwg
MHgyMCkgPT0gbG93ZXJjYXNlTGV0dGVyOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkc1RyYWlsaW5nU2xhc2goY29uc3QgQ2hh
cmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGlmIChsZW5n
dGggPCA2KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtYXRjaExldHRlcihjaGFy
YWN0ZXJzWzBdLCAnaCcpCi0gICAgICAgICAgICB8fCAhbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1sx
XSwgJ3QnKQotICAgICAgICAgICAgfHwgIW1hdGNoTGV0dGVyKGNoYXJhY3RlcnNbMl0sICd0JykK
LSAgICAgICAgICAgIHx8ICFtYXRjaExldHRlcihjaGFyYWN0ZXJzWzNdLCAncCcpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCEoY2hhcmFjdGVyc1s0XSA9PSAnOicKLSAgICAgICAg
ICAgIHx8IChtYXRjaExldHRlcihjaGFyYWN0ZXJzWzRdLCAncycpICYmIGNoYXJhY3RlcnNbNV0g
PT0gJzonKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIHBvcyA9IGNo
YXJhY3RlcnNbNF0gPT0gJzonID8gNSA6IDY7Ci0KLSAgICAvLyBTa2lwIGluaXRpYWwgdHdvIHNs
YXNoZXMgaWYgcHJlc2VudC4KLSAgICBpZiAocG9zICsgMSA8IGxlbmd0aCAmJiBjaGFyYWN0ZXJz
W3Bvc10gPT0gJy8nICYmIGNoYXJhY3RlcnNbcG9zICsgMV0gPT0gJy8nKQotICAgICAgICBwb3Mg
Kz0gMjsKLQotICAgIC8vIEZpbmQgbmV4dCBzbGFzaC4KLSAgICB3aGlsZSAocG9zIDwgbGVuZ3Ro
ICYmIGNoYXJhY3RlcnNbcG9zXSAhPSAnLycpCi0gICAgICAgICsrcG9zOwotCi0gICAgcmV0dXJu
IHBvcyA9PSBsZW5ndGg7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
c3RhdGljIEFMV0FZU19JTkxJTkUgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoSW5saW5lKGNvbnN0
IENoYXJhY3RlclR5cGUqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBBbHJl
YWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZShTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKHVy
bCwgbGVuZ3RoKSk7Ci19Ci0KLUxpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBTdHJpbmcm
IHVybCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB1cmwubGVuZ3RoKCk7Ci0gICAgaWYgKCFs
ZW5ndGggfHwgdXJsLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gdmlzaXRlZExpbmtIYXNoSW5s
aW5lKHVybC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOwotICAgIHJldHVybiB2aXNpdGVkTGlua0hh
c2hJbmxpbmUodXJsLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwotfQotCi1MaW5rSGFzaCB2aXNp
dGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiB2aXNpdGVkTGlua0hhc2hJbmxpbmUodXJsLCBsZW5ndGgpOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRl
ZFVSTElubGluZShjb25zdCBVUkwmIGJhc2UsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIGJ1ZmZlcikK
LXsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhpcyBpcyBh
IHBvb3IgbWFuJ3MgY29tcGxldGVVUkwuIEZhc3RlciB3aXRoIGxlc3MgbWVtb3J5IGFsbG9jYXRp
b24uCi0gICAgLy8gRklYTUU6IEl0J3MgbWlzc2luZyBhIGxvdCBvZiB3aGF0IGNvbXBsZXRlVVJM
IGRvZXMgYW5kIGEgbG90IG9mIHdoYXQgVVJMIGRvZXMuCi0gICAgLy8gRm9yIGV4YW1wbGUsIGl0
IGRvZXMgbm90IGhhbmRsZSBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcyBwcm9wZXJseS4KLQot
ICAgIC8vIEZJWE1FOiBJdCBpcyB3cm9uZyB0aGF0IHdlIGRvIG5vdCBkbyBmdXJ0aGVyIHByb2Nl
c3Npbmcgb24gc3RyaW5ncyB0aGF0IGhhdmUgIjovLyIgaW4gdGhlbToKLSAgICAvLyAgICAxKSBU
aGUgIjovLyIgY291bGQgYmUgaW4gdGhlIHF1ZXJ5IG9yIGFuY2hvci4KLSAgICAvLyAgICAyKSBU
aGUgVVJMJ3MgcGF0aCBjb3VsZCBoYXZlIGEgIi8uLyIgb3IgYSAiLy4uLyIgb3IgYSAiLy8iIHNl
cXVlbmNlIGluIGl0LgotCi0gICAgLy8gRklYTUU6IG5lZWRzVHJhaWxpbmdTbGFzaCBkb2VzIG5v
dCBwcm9wZXJseSByZXR1cm4gdHJ1ZSBmb3IgYSBVUkwgdGhhdCBoYXMgbm8gcGF0aCwgYnV0IGRv
ZXMKLSAgICAvLyBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yLgotCi0gICAgYm9vbCBoYXNDb2xvblNs
YXNoU2xhc2ggPSBjb250YWluc0NvbG9uU2xhc2hTbGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpOwot
Ci0gICAgaWYgKGhhc0NvbG9uU2xhc2hTbGFzaCAmJiAhbmVlZHNUcmFpbGluZ1NsYXNoKGNoYXJh
Y3RlcnMsIGxlbmd0aCkpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5n
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0KLSAgICBpZiAoaGFzQ29sb25TbGFzaFNs
YXNoKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluY29ycmVjdCBmb3IgVVJMcyB0aGF0
IGhhdmUgYSBxdWVyeSBvciBhbmNob3I7IHRoZSAiLyIgbmVlZHMgdG8gZ28gYXQgdGhlCi0gICAg
ICAgIC8vIGVuZCBvZiB0aGUgcGF0aCwgKmJlZm9yZSogdGhlIHF1ZXJ5IG9yIGFuY2hvci4KLSAg
ICAgICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotICAgICAgICBidWZmZXIu
YXBwZW5kKCcvJyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgYXBwZW5kKGJ1ZmZlciwgYmFzZS5zdHJpbmcoKSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIHN3aXRjaCAoY2hhcmFjdGVyc1swXSkgewotICAgICAgICAgICAgY2FzZSAnLyc6Ci0gICAg
ICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgU3RyaW5nVmlldyhiYXNlLnN0cmluZygpKS5zdWJz
dHJpbmcoMCwgYmFzZS5wYXRoU3RhcnQoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSAnIyc6Ci0gICAgICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgU3RyaW5n
VmlldyhiYXNlLnN0cmluZygpKS5zdWJzdHJpbmcoMCwgYmFzZS5wYXRoRW5kKCkpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
YXBwZW5kKGJ1ZmZlciwgU3RyaW5nVmlldyhiYXNlLnN0cmluZygpKS5zdWJzdHJpbmcoMCwgYmFz
ZS5wYXRoQWZ0ZXJMYXN0U2xhc2goKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVycywgbGVuZ3RoKTsKLSAgICBj
bGVhblBhdGgoYnVmZmVyKTsKLSAgICBpZiAobmVlZHNUcmFpbGluZ1NsYXNoKGJ1ZmZlci5kYXRh
KCksIGJ1ZmZlci5zaXplKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluY29ycmVj
dCBmb3IgVVJMcyB0aGF0IGhhdmUgYSBxdWVyeSBvciBhbmNob3I7IHRoZSAiLyIgbmVlZHMgdG8g
Z28gYXQgdGhlCi0gICAgICAgIC8vIGVuZCBvZiB0aGUgcGF0aCwgKmJlZm9yZSogdGhlIHF1ZXJ5
IG9yIGFuY2hvci4KLSAgICAgICAgYnVmZmVyLmFwcGVuZCgnLycpOwotICAgIH0KLQotICAgIHJl
dHVybjsKLX0KLQotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVSTCYgYmFzZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCi17Ci0gICAgaWYgKGF0dHJpYnV0ZVVSTC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFiYXNlLnN0cmluZygpLmlz
RW1wdHkoKSAmJiBiYXNlLnN0cmluZygpLmlzOEJpdCgpICYmIGF0dHJpYnV0ZVVSTC5pczhCaXQo
KSkgewotICAgICAgICBWZWN0b3I8TENoYXIsIDUxMj4gdXJsOwotICAgICAgICB2aXNpdGVkVVJM
SW5saW5lKGJhc2UsIGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzOCgpLCBhdHRyaWJ1dGVVUkwubGVu
Z3RoKCksIHVybCk7Ci0gICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAgICAgcmV0dXJuIHZpc2l0ZWRMaW5rSGFzaElubGluZSh1cmwuZGF0YSgp
LCB1cmwuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gdXJsOwotICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhhdHRyaWJ1dGVVUkwuc3Ry
aW5nKCkpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIHZpc2l0ZWRVUkxJbmxpbmUoYmFzZSwg
Y2hhcmFjdGVycywgYXR0cmlidXRlVVJMLmxlbmd0aCgpLCB1cmwpOwotICAgIGlmICh1cmwuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiB2aXNpdGVkTGlua0hhc2hJ
bmxpbmUodXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTY1OTk1ZmUzZjE1YzFiMzBiNDNhYmE3ZWM5MGY1NWJjYzViOWE3Ni4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MaW5rSGFzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMaW5rSGFzaF9o
Ci0jZGVmaW5lIExpbmtIYXNoX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IFVSTDsKLQotdHlwZWRlZiB1aW50NjRfdCBMaW5rSGFzaDsKLQotLy8gVXNlIHRoZSBsb3cgMzIt
Yml0cyBvZiB0aGUgNjQtYml0IExpbmtIYXNoIGFzIHRoZSBrZXkgZm9yIEhhc2hTZXRzLgotc3Ry
dWN0IExpbmtIYXNoSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goTGlua0hhc2gga2V5
KSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KTsgfQotICAgIHN0YXRpYyBib29s
IGVxdWFsKExpbmtIYXNoIGEsIExpbmtIYXNoIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLQot
ICAgIC8vIFNlZSBBbHJlYWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZS4KLSAgICBzdGF0aWMg
dW5zaWduZWQgYXZvaWREZWxldGVkVmFsdWUoTGlua0hhc2ggaGFzaDY0KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGhhc2g2NCk7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaGFzaDY0KTsKLSAgICAgICAgdW5zaWduZWQgbmV3SGFzaCA9IGhhc2ggfCAoISho
YXNoICsgMSkgPDwgMzEpOwotICAgICAgICBBU1NFUlQobmV3SGFzaCk7Ci0gICAgICAgIEFTU0VS
VChuZXdIYXNoICE9IDB4RkZGRkZGRkYpOwotICAgICAgICByZXR1cm4gbmV3SGFzaDsKLSAgICB9
Ci19OwotCi0vLyBSZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVz
ZWQgZm9yIHZpc2l0ZWQgbGluayBjb2xvcmluZy4KLVdFQkNPUkVfRVhQT1JUIExpbmtIYXNoIHZp
c2l0ZWRMaW5rSGFzaChjb25zdCBTdHJpbmcmIHVybCk7Ci1XRUJDT1JFX0VYUE9SVCBMaW5rSGFz
aCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKTsKLQot
Ly8gUmVzb2x2ZXMgdGhlIHBvdGVudGlhbGx5IHJlbGF0aXZlIFVSTCAiYXR0cmlidXRlVVJMIiBy
ZWxhdGl2ZSB0byB0aGUgZ2l2ZW4KLS8vIGJhc2UgVVJMLCBhbmQgcmV0dXJucyB0aGUgaGFzaCBv
ZiB0aGUgc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB2aXNpdGVkCi0vLyBsaW5rIGNvbG9y
aW5nLiBJdCB3aWxsIHJldHVybiB0aGUgc3BlY2lhbCB2YWx1ZSBvZiAwIGlmIGF0dHJpYnV0ZVVS
TCBkb2VzIG5vdAotLy8gbG9vayBsaWtlIGEgcmVsYXRpdmUgVVJMLgotTGlua0hhc2ggdmlzaXRl
ZExpbmtIYXNoKGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVV
UkwpOwotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgIC8vIExpbmtIYXNoX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZFN0cmluZ0hhc2guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTE5MGMwZGY3ZTA4NjExM2ViNGIxZjMxODJkMWYwMDczODBlZGEyMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZFN0cmluZ0hhc2guY3BwCkBAIC0w
LDAgKzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Vi
a2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTaGFyZWRTdHJpbmdIYXNoLmgiCisKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBzaXpl
X3QgZmluZFNsYXNoRG90RG90U2xhc2goY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCwgc2l6ZV90IHBvc2l0aW9uKQoreworICAgIGlmIChsZW5ndGggPCA0KQor
ICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgc2l6ZV90IGxvb3BMaW1pdCA9IGxlbmd0aCAt
IDM7CisgICAgZm9yIChzaXplX3QgaSA9IHBvc2l0aW9uOyBpIDwgbG9vcExpbWl0OyArK2kpIHsK
KyAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09
ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgM10gPT0g
Jy8nKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiBub3RGb3VuZDsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIHNp
emVfdCBmaW5kU2xhc2hTbGFzaChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBzaXplX3QgcG9zaXRpb24pCit7CisgICAgaWYgKGxlbmd0aCA8IDIpCisgICAg
ICAgIHJldHVybiBub3RGb3VuZDsKKyAgICBzaXplX3QgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMTsK
KyAgICBmb3IgKHNpemVfdCBpID0gcG9zaXRpb247IGkgPCBsb29wTGltaXQ7ICsraSkgeworICAg
ICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy8n
KQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiBub3RGb3VuZDsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIHNpemVf
dCBmaW5kU2xhc2hEb3RTbGFzaChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBzaXplX3QgcG9zaXRpb24pCit7CisgICAgaWYgKGxlbmd0aCA8IDMpCisgICAg
ICAgIHJldHVybiBub3RGb3VuZDsKKyAgICBzaXplX3QgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMjsK
KyAgICBmb3IgKHNpemVfdCBpID0gcG9zaXRpb247IGkgPCBsb29wTGltaXQ7ICsraSkgeworICAg
ICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4n
ICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiBpOworICAg
IH0KKyAgICByZXR1cm4gbm90Rm91bmQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNvbnN0
IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAo
bGVuZ3RoIDwgMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIGxvb3BMaW1p
dCA9IGxlbmd0aCAtIDI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3BMaW1pdDsg
KytpKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICc6JyAmJiBjaGFyYWN0ZXJzW2kg
KyAxXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy8nKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIHZvaWQgc3F1ZWV6ZU91dE51bGxDaGFy
YWN0ZXJzKFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCA1MTI+JiBzdHJpbmcpCit7CisgICAgc2l6ZV90
IHNpemUgPSBzdHJpbmcuc2l6ZSgpOworICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmICghc3RyaW5nW2ldKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGlmIChpID09IHNpemUpCisgICAgICAgIHJldHVybjsKKyAgICBz
aXplX3QgaiA9IGk7CisgICAgZm9yICgrK2k7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYg
KENoYXJhY3RlclR5cGUgY2hhcmFjdGVyID0gc3RyaW5nW2ldKQorICAgICAgICAgICAgc3RyaW5n
W2orK10gPSBjaGFyYWN0ZXI7CisgICAgfQorICAgIEFTU0VSVChqIDwgc2l6ZSk7CisgICAgc3Ry
aW5nLnNocmluayhqKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citz
dGF0aWMgdm9pZCBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhWZWN0b3I8Q2hhcmFjdGVyVHlwZSwg
NTEyPiYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gpCit7CisgICAgc2l6ZV90IHNsYXNoID0gZmly
c3RTbGFzaDsKKyAgICBkbyB7CisgICAgICAgIHNpemVfdCBwcmV2aW91c1NsYXNoID0gc2xhc2gg
PyByZXZlcnNlRmluZChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksICcvJywgc2xhc2ggLSAxKSA6
IG5vdEZvdW5kOworICAgICAgICAvLyBEb24ndCByZW1vdmUgdGhlIGhvc3QsIGkuZS4gaHR0cDov
L2Zvby5vcmcvLi4vZm9vLmh0bWwKKyAgICAgICAgaWYgKHByZXZpb3VzU2xhc2ggPT0gbm90Rm91
bmQgfHwgKHByZXZpb3VzU2xhc2ggPiAzICYmIHBhdGhbcHJldmlvdXNTbGFzaCAtIDJdID09ICc6
JyAmJiBwYXRoW3ByZXZpb3VzU2xhc2ggLSAxXSA9PSAnLycpKSB7CisgICAgICAgICAgICBwYXRo
W3NsYXNoXSA9IDA7CisgICAgICAgICAgICBwYXRoW3NsYXNoICsgMV0gPSAwOworICAgICAgICAg
ICAgcGF0aFtzbGFzaCArIDJdID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBwcmV2aW91c1NsYXNoOyBpIDwgc2xhc2ggKyAzOyArK2kpCisgICAgICAg
ICAgICAgICAgcGF0aFtpXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgc2xhc2ggKz0gMzsKKyAg
ICB9IHdoaWxlICgoc2xhc2ggPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0
aC5zaXplKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOworICAgIHNxdWVlemVPdXROdWxsQ2hhcmFj
dGVycyhwYXRoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0
aWMgdm9pZCBtZXJnZURvdWJsZVNsYXNoZXMoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIHBh
dGgsIHNpemVfdCBmaXJzdFNsYXNoKQoreworICAgIHNpemVfdCByZWZQb3MgPSBmaW5kKHBhdGgu
ZGF0YSgpLCBwYXRoLnNpemUoKSwgJyMnKTsKKyAgICBpZiAoIXJlZlBvcyB8fCByZWZQb3MgPT0g
bm90Rm91bmQpCisgICAgICAgIHJlZlBvcyA9IHBhdGguc2l6ZSgpOworCisgICAgc2l6ZV90IHNs
YXNoID0gZmlyc3RTbGFzaDsKKyAgICB3aGlsZSAoc2xhc2ggPCByZWZQb3MpIHsKKyAgICAgICAg
aWYgKCFzbGFzaCB8fCBwYXRoW3NsYXNoIC0gMV0gIT0gJzonKQorICAgICAgICAgICAgcGF0aFtz
bGFzaCsrXSA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNsYXNoICs9IDI7CisgICAg
ICAgIGlmICgoc2xhc2ggPSBmaW5kU2xhc2hTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCks
IHNsYXNoKSkgPT0gbm90Rm91bmQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgc3F1
ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKHBhdGgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KK3N0YXRpYyB2b2lkIGNsZWFuU2xhc2hEb3RTbGFzaGVzKFZlY3RvcjxDaGFy
YWN0ZXJUeXBlLCA1MTI+JiBwYXRoLCBzaXplX3QgZmlyc3RTbGFzaCkKK3sKKyAgICBzaXplX3Qg
c2xhc2ggPSBmaXJzdFNsYXNoOworICAgIGRvIHsKKyAgICAgICAgcGF0aFtzbGFzaF0gPSAwOwor
ICAgICAgICBwYXRoW3NsYXNoICsgMV0gPSAwOworICAgICAgICBzbGFzaCArPSAyOworICAgIH0g
d2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUo
KSwgc2xhc2gpKSAhPSBub3RGb3VuZCk7CisgICAgc3F1ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKHBh
dGgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxp
bmUgdm9pZCBjbGVhblBhdGgoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIHBhdGgpCit7Cisg
ICAgLy8gRklYTUU6IFNob3VsZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBh
cnQgb2YgdGhlIFVSTC4KKyAgICBzaXplX3QgZmlyc3RTbGFzaCA9IGZpbmRTbGFzaERvdERvdFNs
YXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7CisgICAgaWYgKGZpcnN0U2xhc2ggIT0g
bm90Rm91bmQpCisgICAgICAgIGNsZWFuU2xhc2hEb3REb3RTbGFzaGVzKHBhdGgsIGZpcnN0U2xh
c2gpOworCisgICAgLy8gRklYTUU6IFNob3VsZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgcGFy
dC4KKyAgICBmaXJzdFNsYXNoID0gZmluZFNsYXNoU2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6
ZSgpLCAwKTsKKyAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKKyAgICAgICAgbWVyZ2VE
b3VibGVTbGFzaGVzKHBhdGgsIGZpcnN0U2xhc2gpOworCisgICAgLy8gRklYTUU6IFNob3VsZCBu
b3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBhcnQuCisgICAgZmlyc3RTbGFzaCA9
IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7CisgICAgaWYg
KGZpcnN0U2xhc2ggIT0gbm90Rm91bmQpCisgICAgICAgIGNsZWFuU2xhc2hEb3RTbGFzaGVzKHBh
dGgsIGZpcnN0U2xhc2gpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
K3N0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaExldHRlcihDaGFyYWN0ZXJUeXBlIGMsIGNoYXIgbG93
ZXJjYXNlTGV0dGVyKQoreworICAgIHJldHVybiAoYyB8IDB4MjApID09IGxvd2VyY2FzZUxldHRl
cjsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5l
IGJvb2wgbmVlZHNUcmFpbGluZ1NsYXNoKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDwgNikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1swXSwgJ2gnKSB8fCAhbWF0
Y2hMZXR0ZXIoY2hhcmFjdGVyc1sxXSwgJ3QnKSB8fCAhbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1sy
XSwgJ3QnKSB8fCAhbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1szXSwgJ3AnKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghKGNoYXJhY3RlcnNbNF0gPT0gJzonIHx8IChtYXRjaExldHRl
cihjaGFyYWN0ZXJzWzRdLCAncycpICYmIGNoYXJhY3RlcnNbNV0gPT0gJzonKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHBvcyA9IGNoYXJhY3RlcnNbNF0gPT0gJzon
ID8gNSA6IDY7CisKKyAgICAvLyBTa2lwIGluaXRpYWwgdHdvIHNsYXNoZXMgaWYgcHJlc2VudC4K
KyAgICBpZiAocG9zICsgMSA8IGxlbmd0aCAmJiBjaGFyYWN0ZXJzW3Bvc10gPT0gJy8nICYmIGNo
YXJhY3RlcnNbcG9zICsgMV0gPT0gJy8nKQorICAgICAgICBwb3MgKz0gMjsKKworICAgIC8vIEZp
bmQgbmV4dCBzbGFzaC4KKyAgICB3aGlsZSAocG9zIDwgbGVuZ3RoICYmIGNoYXJhY3RlcnNbcG9z
XSAhPSAnLycpCisgICAgICAgICsrcG9zOworCisgICAgcmV0dXJuIHBvcyA9PSBsZW5ndGg7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIEFMV0FZU19JTkxJ
TkUgU2hhcmVkU3RyaW5nSGFzaCBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZShjb25zdCBD
aGFyYWN0ZXJUeXBlKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gQWxyZWFk
eUhhc2hlZDo6YXZvaWREZWxldGVkVmFsdWUoU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaCh1cmws
IGxlbmd0aCkpOworfQorCitTaGFyZWRTdHJpbmdIYXNoIGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNo
KGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHVybC5sZW5ndGgo
KTsKKyAgICBpZiAoIWxlbmd0aCB8fCB1cmwuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBjb21w
dXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSh1cmwuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKKyAg
ICByZXR1cm4gY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2hJbmxpbmUodXJsLmNoYXJhY3RlcnMxNigp
LCBsZW5ndGgpOworfQorCitTaGFyZWRTdHJpbmdIYXNoIGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNo
KGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gY29tcHV0
ZVNoYXJlZFN0cmluZ0hhc2hJbmxpbmUodXJsLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgY29tcHV0ZVNo
YXJlZFN0cmluZ0hhc2hJbmxpbmUoY29uc3QgVVJMJiBiYXNlLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCA1MTI+
JiBidWZmZXIpCit7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFRoaXMgaXMgYSBwb29yIG1hbidzIGNvbXBsZXRlVVJMLiBGYXN0ZXIgd2l0aCBsZXNzIG1lbW9y
eSBhbGxvY2F0aW9uLgorICAgIC8vIEZJWE1FOiBJdCdzIG1pc3NpbmcgYSBsb3Qgb2Ygd2hhdCBj
b21wbGV0ZVVSTCBkb2VzIGFuZCBhIGxvdCBvZiB3aGF0IFVSTCBkb2VzLgorICAgIC8vIEZvciBl
eGFtcGxlLCBpdCBkb2VzIG5vdCBoYW5kbGUgaW50ZXJuYXRpb25hbCBkb21haW4gbmFtZXMgcHJv
cGVybHkuCisKKyAgICAvLyBGSVhNRTogSXQgaXMgd3JvbmcgdGhhdCB3ZSBkbyBub3QgZG8gZnVy
dGhlciBwcm9jZXNzaW5nIG9uIHN0cmluZ3MgdGhhdCBoYXZlICI6Ly8iIGluIHRoZW06CisgICAg
Ly8gICAgMSkgVGhlICI6Ly8iIGNvdWxkIGJlIGluIHRoZSBxdWVyeSBvciBhbmNob3IuCisgICAg
Ly8gICAgMikgVGhlIFVSTCdzIHBhdGggY291bGQgaGF2ZSBhICIvLi8iIG9yIGEgIi8uLi8iIG9y
IGEgIi8vIiBzZXF1ZW5jZSBpbiBpdC4KKworICAgIC8vIEZJWE1FOiBuZWVkc1RyYWlsaW5nU2xh
c2ggZG9lcyBub3QgcHJvcGVybHkgcmV0dXJuIHRydWUgZm9yIGEgVVJMIHRoYXQgaGFzIG5vIHBh
dGgsIGJ1dCBkb2VzCisgICAgLy8gaGF2ZSBhIHF1ZXJ5IG9yIGFuY2hvci4KKworICAgIGJvb2wg
aGFzQ29sb25TbGFzaFNsYXNoID0gY29udGFpbnNDb2xvblNsYXNoU2xhc2goY2hhcmFjdGVycywg
bGVuZ3RoKTsKKworICAgIGlmIChoYXNDb2xvblNsYXNoU2xhc2ggJiYgIW5lZWRzVHJhaWxpbmdT
bGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoY2hhcmFj
dGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgaWYgKGhhc0Nv
bG9uU2xhc2hTbGFzaCkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3QgZm9y
IFVSTHMgdGhhdCBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yOyB0aGUgIi8iIG5lZWRzIHRvIGdvIGF0
IHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhlIHBhdGgsICpiZWZvcmUqIHRoZSBxdWVyeSBvciBh
bmNob3IuCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAg
ICAgYnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFsZW5ndGgpCisgICAgICAgIGFwcGVuZChidWZmZXIsIGJhc2Uuc3RyaW5nKCkpOworICAgIGVs
c2UgeworICAgICAgICBzd2l0Y2ggKGNoYXJhY3RlcnNbMF0pIHsKKyAgICAgICAgY2FzZSAnLyc6
CisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBTdHJpbmdWaWV3KGJhc2Uuc3RyaW5nKCkpLnN1
YnN0cmluZygwLCBiYXNlLnBhdGhTdGFydCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnIyc6CisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBTdHJpbmdWaWV3KGJhc2Uu
c3RyaW5nKCkpLnN1YnN0cmluZygwLCBiYXNlLnBhdGhFbmQoKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBTdHJpbmdW
aWV3KGJhc2Uuc3RyaW5nKCkpLnN1YnN0cmluZygwLCBiYXNlLnBhdGhBZnRlckxhc3RTbGFzaCgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBidWZmZXIuYXBw
ZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgY2xlYW5QYXRoKGJ1ZmZlcik7CisgICAgaWYg
KG5lZWRzVHJhaWxpbmdTbGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSkgeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3QgZm9yIFVSTHMgdGhhdCBoYXZlIGEgcXVl
cnkgb3IgYW5jaG9yOyB0aGUgIi8iIG5lZWRzIHRvIGdvIGF0IHRoZQorICAgICAgICAvLyBlbmQg
b2YgdGhlIHBhdGgsICpiZWZvcmUqIHRoZSBxdWVyeSBvciBhbmNob3IuCisgICAgICAgIGJ1ZmZl
ci5hcHBlbmQoJy8nKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKK1NoYXJlZFN0cmluZ0hh
c2ggY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2goY29uc3QgVVJMJiBiYXNlLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVVSTCkKK3sKKyAgICBpZiAoYXR0cmlidXRlVVJMLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWJhc2Uuc3RyaW5nKCkuaXNFbXB0eSgpICYm
IGJhc2Uuc3RyaW5nKCkuaXM4Qml0KCkgJiYgYXR0cmlidXRlVVJMLmlzOEJpdCgpKSB7CisgICAg
ICAgIFZlY3RvcjxMQ2hhciwgNTEyPiB1cmw7CisgICAgICAgIGNvbXB1dGVTaGFyZWRTdHJpbmdI
YXNoSW5saW5lKGJhc2UsIGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzOCgpLCBhdHRyaWJ1dGVVUkwu
bGVuZ3RoKCksIHVybCk7CisgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoSW5saW5l
KHVybC5kYXRhKCksIHVybC5zaXplKCkpOworICAgIH0KKworICAgIFZlY3RvcjxVQ2hhciwgNTEy
PiB1cmw7CisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGF0dHJp
YnV0ZVVSTC5zdHJpbmcoKSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CisgICAgY29tcHV0ZVNoYXJl
ZFN0cmluZ0hhc2hJbmxpbmUoYmFzZSwgY2hhcmFjdGVycywgYXR0cmlidXRlVVJMLmxlbmd0aCgp
LCB1cmwpOworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSh1cmwuZGF0YSgpLCB1cmwuc2l6
ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2hhcmVkU3RyaW5nSGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMDMzYzNmYjdlMDA2NmE1MzNlOGE1
ZDBkNDI0Y2YxN2E4ZDRlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRTdHJpbmdIYXNoLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBVUkw7CisKK3R5cGVkZWYgdWludDY0X3QgU2hhcmVk
U3RyaW5nSGFzaDsKKworLy8gVXNlIHRoZSBsb3cgMzItYml0cyBvZiB0aGUgNjQtYml0IFNoYXJl
ZFN0cmluZ0hhc2ggYXMgdGhlIGtleSBmb3IgSGFzaFNldHMuCitzdHJ1Y3QgU2hhcmVkU3RyaW5n
SGFzaEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFNoYXJlZFN0cmluZ0hhc2gga2V5
KSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKFNoYXJlZFN0cmluZ0hhc2ggYSwgU2hhcmVkU3RyaW5nSGFzaCBiKSB7IHJldHVybiBh
ID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IHRydWU7CisKKyAgICAvLyBTZWUgQWxyZWFkeUhhc2hlZDo6YXZvaWREZWxldGVkVmFs
dWUuCisgICAgc3RhdGljIHVuc2lnbmVkIGF2b2lkRGVsZXRlZFZhbHVlKFNoYXJlZFN0cmluZ0hh
c2ggaGFzaDY0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc2g2NCk7CisgICAgICAgIHVuc2ln
bmVkIGhhc2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGFzaDY0KTsKKyAgICAgICAgdW5zaWdu
ZWQgbmV3SGFzaCA9IGhhc2ggfCAoIShoYXNoICsgMSkgPDwgMzEpOworICAgICAgICBBU1NFUlQo
bmV3SGFzaCk7CisgICAgICAgIEFTU0VSVChuZXdIYXNoICE9IDB4RkZGRkZGRkYpOworICAgICAg
ICByZXR1cm4gbmV3SGFzaDsKKyAgICB9Cit9OworCisvLyBSZXR1cm5zIHRoZSBoYXNoIG9mIHRo
ZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQgbGluayBjb2xvcmluZy4KK1dF
QkNPUkVfRVhQT1JUIFNoYXJlZFN0cmluZ0hhc2ggY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2goY29u
c3QgU3RyaW5nJiB1cmwpOworV0VCQ09SRV9FWFBPUlQgU2hhcmVkU3RyaW5nSGFzaCBjb21wdXRl
U2hhcmVkU3RyaW5nSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpOworCisv
LyBSZXNvbHZlcyB0aGUgcG90ZW50aWFsbHkgcmVsYXRpdmUgVVJMICJhdHRyaWJ1dGVVUkwiIHJl
bGF0aXZlIHRvIHRoZSBnaXZlbgorLy8gYmFzZSBVUkwsIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9m
IHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQKKy8vIGxpbmsgY29sb3Jp
bmcuIEl0IHdpbGwgcmV0dXJuIHRoZSBzcGVjaWFsIHZhbHVlIG9mIDAgaWYgYXR0cmlidXRlVVJM
IGRvZXMgbm90CisvLyBsb29rIGxpa2UgYSByZWxhdGl2ZSBVUkwuCitTaGFyZWRTdHJpbmdIYXNo
IGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoKGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVVUkwpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3Rz
LnR4dAppbmRleCAwZTM2YjEzYzZhNTA1OWMwY2FjOTQ4ZDc4ZDE3MzZiMjg3Yzk3NzY3Li42YzEw
YmVlZDUwMjRmNGNkYzNhMDJiZDg3MWVjYWUwNjVkNjc0N2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQK
QEAgLTE3MSw2ICsxNzEsNyBAQCBzZXQoV2ViS2l0X1NPVVJDRVMKICAgICBTaGFyZWQvRm9udElu
Zm8uY3BwCiAgICAgU2hhcmVkL0ZyYW1lSW5mb0RhdGEuY3BwCiAgICAgU2hhcmVkL0xheWVyVHJl
ZUNvbnRleHQuY3BwCisgICAgU2hhcmVkL0xpbmtIYXNoVGFibGUuY3BwCiAgICAgU2hhcmVkL0xv
YWRQYXJhbWV0ZXJzLmNwcAogICAgIFNoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAKICAg
ICBTaGFyZWQvUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmNwcApAQCAtMTc5LDEwICsxODAsMTAgQEAg
c2V0KFdlYktpdF9TT1VSQ0VTCiAgICAgU2hhcmVkL1Nlc3Npb25UcmFja2VyLmNwcAogICAgIFNo
YXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCiAgICAgU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNw
cAorICAgIFNoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwCiAgICAgU2hhcmVkL1N0YXRp
c3RpY3NEYXRhLmNwcAogICAgIFNoYXJlZC9VcGRhdGVJbmZvLmNwcAogICAgIFNoYXJlZC9Vc2Vy
RGF0YS5jcHAKLSAgICBTaGFyZWQvVmlzaXRlZExpbmtUYWJsZS5jcHAKICAgICBTaGFyZWQvV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKICAgICBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVs
ZUxpc3QuY3BwCiAgICAgU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjA1OTIwMzAzOTFhM2E3M2MyMjFjOTAyNGUxYTM0NDMzN2I2NGI5OTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3Bw
CkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY29uc3QgdW5zaWduZWQgc2hhcmVkU3Ry
aW5nSGFzaFRhYmxlTWF4TG9hZCA9IDI7CisKK3N0YXRpYyB1bnNpZ25lZCBuZXh0UG93ZXJPZjIo
dW5zaWduZWQgdikKK3sKKyAgICAvLyBUYWtlbiBmcm9tIGh0dHA6Ly93d3cuY3MudXRrLmVkdS9+
dm9zZS9jLXN0dWZmL2JpdGhhY2tzLmh0bWwKKyAgICAvLyBEZXZpc2VkIGJ5IFNlYW4gQW5kZXJz
b24sIFNlcGVtYmVyIDE0LCAyMDAxCisKKyAgICB2LS07CisgICAgdiB8PSB2ID4+IDE7CisgICAg
diB8PSB2ID4+IDI7CisgICAgdiB8PSB2ID4+IDQ7CisgICAgdiB8PSB2ID4+IDg7CisgICAgdiB8
PSB2ID4+IDE2OworICAgIHYrKzsKKworICAgIHJldHVybiB2OworfQorCitzdGF0aWMgdW5zaWdu
ZWQgdGFibGVTaXplRm9yS2V5Q291bnQodW5zaWduZWQga2V5Q291bnQpCit7CisgICAgLy8gV2Ug
d2FudCB0aGUgdGFibGUgdG8gYmUgYXQgbGVhc3QgaGFsZiBlbXB0eS4KKyAgICB1bnNpZ25lZCB0
YWJsZVNpemUgPSBuZXh0UG93ZXJPZjIoa2V5Q291bnQgKiBzaGFyZWRTdHJpbmdIYXNoVGFibGVN
YXhMb2FkKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHRoZSB0YWJsZSBzaXplIGlzIGF0IGxlYXN0
IHRoZSBzaXplIG9mIGEgcGFnZS4KKyAgICBzaXplX3QgbWluaW11bVRhYmxlU2l6ZSA9IFNoYXJl
ZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUoKSAvIHNpemVvZihTaGFyZWRTdHJpbmdIYXNoKTsKKyAg
ICBpZiAodGFibGVTaXplIDwgbWluaW11bVRhYmxlU2l6ZSkKKyAgICAgICAgcmV0dXJuIG1pbmlt
dW1UYWJsZVNpemU7CisKKyAgICByZXR1cm4gdGFibGVTaXplOworfQorCitTaGFyZWRTdHJpbmdI
YXNoU3RvcmU6OlNoYXJlZFN0cmluZ0hhc2hTdG9yZShDbGllbnQmIGNsaWVudCkKKyAgICA6IG1f
Y2xpZW50KGNsaWVudCkKKyAgICAsIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVyKFJ1
bkxvb3A6Om1haW4oKSwgdGhpcywgJlNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6cGVuZGluZ1NoYXJl
ZFN0cmluZ0hhc2hlc1RpbWVyRmlyZWQpCit7Cit9CisKK2Jvb2wgU2hhcmVkU3RyaW5nSGFzaFN0
b3JlOjpjcmVhdGVTaGFyZWRNZW1vcnlIYW5kbGUoU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhhbmRs
ZSkKK3sKKyAgICByZXR1cm4gbV90YWJsZS5zaGFyZWRNZW1vcnkoKS0+Y3JlYXRlSGFuZGxlKGhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Cit9CisKK3ZvaWQgU2hh
cmVkU3RyaW5nSGFzaFN0b3JlOjphZGQoU2hhcmVkU3RyaW5nSGFzaCBzaGFyZWRTdHJpbmdIYXNo
KQoreworICAgIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlcy5hZGQoc2hhcmVkU3RyaW5nSGFz
aCk7CisKKyAgICBpZiAoIW1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVyLnN0YXJ0T25lU2hv
dCgwX3MpOworfQorCit2b2lkIFNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6Y2xlYXIoKQoreworICAg
IG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVyLnN0b3AoKTsKKyAgICBtX3BlbmRpbmdT
aGFyZWRTdHJpbmdIYXNoZXMuY2xlYXIoKTsKKyAgICBtX2tleUNvdW50ID0gMDsKKyAgICBtX3Rh
YmxlU2l6ZSA9IDA7CisgICAgbV90YWJsZS5jbGVhcigpOworfQorCit2b2lkIFNoYXJlZFN0cmlu
Z0hhc2hTdG9yZTo6cmVzaXplVGFibGUodW5zaWduZWQgbmV3VGFibGVTaXplKQoreworICAgIGF1
dG8gbmV3VGFibGVNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKG5ld1RhYmxlU2l6ZSAq
IHNpemVvZihTaGFyZWRTdHJpbmdIYXNoKSk7CisgICAgaWYgKCFuZXdUYWJsZU1lbW9yeSkgewor
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IGZvciBT
aGFyZWRTdHJpbmdIYXNoIHRhYmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
ZW1zZXQobmV3VGFibGVNZW1vcnktPmRhdGEoKSwgMCwgbmV3VGFibGVNZW1vcnktPnNpemUoKSk7
CisKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBjdXJyZW50VGFibGVNZW1vcnkgPSBtX3RhYmxl
LnNoYXJlZE1lbW9yeSgpOworICAgIHVuc2lnbmVkIGN1cnJlbnRUYWJsZVNpemUgPSBtX3RhYmxl
U2l6ZTsKKworICAgIG1fdGFibGUuc2V0U2hhcmVkTWVtb3J5KG5ld1RhYmxlTWVtb3J5LnJlbGVh
c2VOb25OdWxsKCkpOworICAgIG1fdGFibGVTaXplID0gbmV3VGFibGVTaXplOworCisgICAgaWYg
KGN1cnJlbnRUYWJsZU1lbW9yeSkgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRUYWJs
ZVNpemUsIGN1cnJlbnRUYWJsZU1lbW9yeS0+c2l6ZSgpID09IGN1cnJlbnRUYWJsZVNpemUgKiBz
aXplb2YoU2hhcmVkU3RyaW5nSGFzaCkpOworCisgICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGN1
cnJlbnQgaGFzaCB0YWJsZSBhbmQgcmUtYWRkIGFsbCBlbnRyaWVzIHRvIHRoZSBuZXcgaGFzaCB0
YWJsZS4KKyAgICAgICAgY29uc3QgU2hhcmVkU3RyaW5nSGFzaCogY3VycmVudFNoYXJlZFN0cmlu
Z0hhc2hlcyA9IHN0YXRpY19jYXN0PGNvbnN0IFNoYXJlZFN0cmluZ0hhc2gqPihjdXJyZW50VGFi
bGVNZW1vcnktPmRhdGEoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjdXJy
ZW50VGFibGVTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gc2hhcmVkU3RyaW5nSGFzaCA9
IGN1cnJlbnRTaGFyZWRTdHJpbmdIYXNoZXNbaV07CisgICAgICAgICAgICBpZiAoIXNoYXJlZFN0
cmluZ0hhc2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGJvb2wg
ZGlkQWRkU2hhcmVkU3RyaW5nSGFzaCA9IG1fdGFibGUuYWRkKHNoYXJlZFN0cmluZ0hhc2gpOwor
CisgICAgICAgICAgICAvLyBJdCBzaG91bGQgYWx3YXlzIGJlIHBvc3NpYmxlIHRvIGFkZCB0aGUg
U2hhcmVkU3RyaW5nSGFzaCB0byBhIG5ldyB0YWJsZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQoZGlkQWRkU2hhcmVkU3RyaW5nSGFzaCwgZGlkQWRkU2hhcmVkU3RyaW5nSGFzaCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHNoYXJlZFN0cmluZ0hhc2ggOiBtX3BlbmRp
bmdTaGFyZWRTdHJpbmdIYXNoZXMpIHsKKyAgICAgICAgaWYgKG1fdGFibGUuYWRkKHNoYXJlZFN0
cmluZ0hhc2gpKQorICAgICAgICAgICAgKyttX2tleUNvdW50OworICAgIH0KKyAgICBtX3BlbmRp
bmdTaGFyZWRTdHJpbmdIYXNoZXMuY2xlYXIoKTsKKworICAgIG1fY2xpZW50LmRpZEludmFsaWRh
dGVTaGFyZWRNZW1vcnkoKTsKK30KKwordm9pZCBTaGFyZWRTdHJpbmdIYXNoU3RvcmU6OnBlbmRp
bmdTaGFyZWRTdHJpbmdIYXNoZXNUaW1lckZpcmVkKCkKK3sKKyAgICB1bnNpZ25lZCBjdXJyZW50
VGFibGVTaXplID0gbV90YWJsZVNpemU7CisgICAgdW5zaWduZWQgbmV3VGFibGVTaXplID0gdGFi
bGVTaXplRm9yS2V5Q291bnQobV9rZXlDb3VudCArIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hl
cy5zaXplKCkpOworCisgICAgbmV3VGFibGVTaXplID0gc3RkOjptYXgoY3VycmVudFRhYmxlU2l6
ZSwgbmV3VGFibGVTaXplKTsKKworICAgIGlmIChjdXJyZW50VGFibGVTaXplICE9IG5ld1RhYmxl
U2l6ZSkgeworICAgICAgICByZXNpemVUYWJsZShuZXdUYWJsZVNpemUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgVmVjdG9yPFNoYXJlZFN0cmluZ0hhc2g+IGFkZGVkU2hhcmVkU3Ry
aW5nSGFzaGVzOworICAgIGFkZGVkU2hhcmVkU3RyaW5nSGFzaGVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRv
JiBzaGFyZWRTdHJpbmdIYXNoIDogbV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzKSB7CisgICAg
ICAgIGlmIChtX3RhYmxlLmFkZChzaGFyZWRTdHJpbmdIYXNoKSkgeworICAgICAgICAgICAgYWRk
ZWRTaGFyZWRTdHJpbmdIYXNoZXMudW5jaGVja2VkQXBwZW5kKHNoYXJlZFN0cmluZ0hhc2gpOwor
ICAgICAgICAgICAgKyttX2tleUNvdW50OworICAgICAgICB9CisgICAgfQorCisgICAgbV9wZW5k
aW5nU2hhcmVkU3RyaW5nSGFzaGVzLmNsZWFyKCk7CisKKyAgICBpZiAoIWFkZGVkU2hhcmVkU3Ry
aW5nSGFzaGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jbGllbnQuZGlkQWRkU2hhcmVkU3RyaW5n
SGFzaGVzKGFkZGVkU2hhcmVkU3RyaW5nSGFzaGVzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hTdG9yZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmI1NDgzOTM0YmMxNjkzZDE5ZTc5NWQ1OTBjNjU0YTA4YmQ0Y2U4YzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3RvcmUuaApA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFNoYXJlZFN0cmluZ0hhc2hTdG9yZSB7CitwdWJsaWM6CisgICAgY2xhc3MgQ2xpZW50
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQorCisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRJbnZhbGlkYXRlU2hhcmVkTWVtb3J5KCkgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkQWRkU2hhcmVkU3RyaW5nSGFzaGVzKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpTaGFyZWRTdHJpbmdIYXNoPiYpID0gMDsKKyAgICB9OworCisgICAgU2hhcmVkU3RyaW5nSGFz
aFN0b3JlKENsaWVudCYpOworCisgICAgYm9vbCBjcmVhdGVTaGFyZWRNZW1vcnlIYW5kbGUoU2hh
cmVkTWVtb3J5OjpIYW5kbGUmKTsKKyAgICB2b2lkIGFkZChXZWJDb3JlOjpTaGFyZWRTdHJpbmdI
YXNoKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiAhbV9rZXlDb3VudDsgfQorCitwcml2YXRlOgorICAgIHZvaWQgcmVzaXplVGFibGUodW5z
aWduZWQgbmV3VGFibGVTaXplKTsKKyAgICB2b2lkIHBlbmRpbmdTaGFyZWRTdHJpbmdIYXNoZXNU
aW1lckZpcmVkKCk7CisKKyAgICBDbGllbnQmIG1fY2xpZW50OworICAgIHVuc2lnbmVkIG1fa2V5
Q291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV90YWJsZVNpemUgeyAwIH07CisgICAgU2hhcmVk
U3RyaW5nSGFzaFRhYmxlIG1fdGFibGU7CisgICAgSGFzaFNldDxXZWJDb3JlOjpTaGFyZWRTdHJp
bmdIYXNoLCBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoSGFzaD4gbV9wZW5kaW5nU2hhcmVkU3Ry
aW5nSGFzaGVzOworICAgIFJ1bkxvb3A6OlRpbWVyPFNoYXJlZFN0cmluZ0hhc2hTdG9yZT4gbV9w
ZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzVGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJs
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFibGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY2YmVmOTQ3NzIyMzQ1OGJiZWY1YzFiYmU5MjdkZDNkYTJiNDY4YjYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFibGUu
Y3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmgiCisKKyNpbmNsdWRlICJTaGFy
ZWRNZW1vcnkuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitTaGFyZWRTdHJpbmdIYXNoVGFibGU6OlNoYXJlZFN0cmluZ0hhc2hUYWJsZSgpCit7
Cit9CisKK1NoYXJlZFN0cmluZ0hhc2hUYWJsZTo6flNoYXJlZFN0cmluZ0hhc2hUYWJsZSgpCit7
Cit9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgaW5saW5lIGJvb2wgaXNQb3dlck9m
Mih1bnNpZ25lZCB2KQoreworICAgIC8vIFRha2VuIGZyb20gaHR0cDovL3d3dy5jcy51dGsuZWR1
L352b3NlL2Mtc3R1ZmYvYml0aGFja3MuaHRtbAorICAgIAorICAgIHJldHVybiAhKHYgJiAodiAt
IDEpKSAmJiB2OworfQorI2VuZGlmCisKK3ZvaWQgU2hhcmVkU3RyaW5nSGFzaFRhYmxlOjpzZXRT
aGFyZWRNZW1vcnkoUmVmPFNoYXJlZE1lbW9yeT4mJiBzaGFyZWRNZW1vcnkpCit7CisgICAgbV9z
aGFyZWRNZW1vcnkgPSBXVEZNb3ZlKHNoYXJlZE1lbW9yeSk7CisgICAgCisgICAgQVNTRVJUKG1f
c2hhcmVkTWVtb3J5KTsKKyAgICBBU1NFUlQoIShtX3NoYXJlZE1lbW9yeS0+c2l6ZSgpICUgc2l6
ZW9mKFNoYXJlZFN0cmluZ0hhc2gpKSk7CisKKyAgICBtX3RhYmxlID0gc3RhdGljX2Nhc3Q8U2hh
cmVkU3RyaW5nSGFzaCo+KG1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpOworICAgIG1fdGFibGVTaXpl
ID0gbV9zaGFyZWRNZW1vcnktPnNpemUoKSAvIHNpemVvZihTaGFyZWRTdHJpbmdIYXNoKTsKKyAg
ICBBU1NFUlQoaXNQb3dlck9mMihtX3RhYmxlU2l6ZSkpOworICAgIAorICAgIG1fdGFibGVTaXpl
TWFzayA9IG1fdGFibGVTaXplIC0gMTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBkb3Vi
bGVIYXNoKHVuc2lnbmVkIGtleSkKK3sKKyAgICBrZXkgPSB+a2V5ICsgKGtleSA+PiAyMyk7Cisg
ICAga2V5IF49IChrZXkgPDwgMTIpOworICAgIGtleSBePSAoa2V5ID4+IDcpOworICAgIGtleSBe
PSAoa2V5IDw8IDIpOworICAgIGtleSBePSAoa2V5ID4+IDIwKTsKKyAgICByZXR1cm4ga2V5Owor
fQorICAgIAorYm9vbCBTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmFkZChTaGFyZWRTdHJpbmdIYXNo
IHNoYXJlZFN0cmluZ0hhc2gpCit7CisgICAgQVNTRVJUKG1fc2hhcmVkTWVtb3J5KTsKKworICAg
IGludCBrID0gMDsKKyAgICBTaGFyZWRTdHJpbmdIYXNoKiB0YWJsZSA9IG1fdGFibGU7CisgICAg
aW50IHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNrOworICAgIHVuc2lnbmVkIGggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc2hhcmVkU3RyaW5nSGFzaCk7CisgICAgaW50IGkgPSBoICYgc2l6ZU1h
c2s7CisKKyAgICBTaGFyZWRTdHJpbmdIYXNoKiBlbnRyeTsKKyAgICB3aGlsZSAoMSkgeworICAg
ICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKworICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGJ1Y2tl
dCBpcyBlbXB0eS4KKyAgICAgICAgaWYgKCEqZW50cnkpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2FtZSBsaW5rIGhhc2ggaXMgaW4gdGhlIHRhYmxlIGFs
cmVhZHkuCisgICAgICAgIGlmICgqZW50cnkgPT0gc2hhcmVkU3RyaW5nSGFzaCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIWspCisgICAgICAgICAgICBrID0gMSB8
IGRvdWJsZUhhc2goaCk7CisgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgfQor
CisgICAgKmVudHJ5ID0gc2hhcmVkU3RyaW5nSGFzaDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmNvbnRhaW5zKFNoYXJlZFN0cmluZ0hhc2ggc2hh
cmVkU3RyaW5nSGFzaCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2hhcmVkTWVtb3J5KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgayA9IDA7CisgICAgU2hhcmVkU3RyaW5nSGFzaCog
dGFibGUgPSBtX3RhYmxlOworICAgIGludCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKKyAg
ICB1bnNpZ25lZCBoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNoYXJlZFN0cmluZ0hhc2gpOwor
ICAgIGludCBpID0gaCAmIHNpemVNYXNrOworICAgIAorICAgIFNoYXJlZFN0cmluZ0hhc2gqIGVu
dHJ5OworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOworCisgICAg
ICAgIC8vIENoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgdGFibGUuCisgICAg
ICAgIGlmICghKmVudHJ5KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBp
ZiAoKmVudHJ5ID09IHNoYXJlZFN0cmluZ0hhc2gpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgCisgICAgICAgIGlmICghaykKKyAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFz
aChoKTsKKyAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2hhcmVkU3RyaW5nSGFzaFRhYmxlOjpjbGVhcigpCit7Cisg
ICAgbV90YWJsZVNpemUgPSAwOworICAgIG1fdGFibGVTaXplTWFzayA9IDA7CisgICAgbV9zaGFy
ZWRNZW1vcnkgPSBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZS5oIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWNkMmQz
ZTgzYWY1OWNjZWZiMDQyYmYxOTYxOGQ5NWMyOTI0ZjMyOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZS5oCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9T
aGFyZWRTdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgU2hhcmVkTWVtb3J5OworCitjbGFzcyBTaGFyZWRTdHJpbmdIYXNo
VGFibGUgeworcHVibGljOgorICAgIFNoYXJlZFN0cmluZ0hhc2hUYWJsZSgpOworICAgIH5TaGFy
ZWRTdHJpbmdIYXNoVGFibGUoKTsKKworICAgIHZvaWQgc2V0U2hhcmVkTWVtb3J5KFJlZjxTaGFy
ZWRNZW1vcnk+JiYpOworCisgICAgLy8gQ2FuIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSB1bmRlcmx5
aW5nIHNoYXJlZCBtZW1vcnkgaXMgaW4gcmVhZCAvIHdyaXRlIG1vZGUuCisgICAgYm9vbCBhZGQo
V2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCk7CisKKyAgICBib29sIGNvbnRhaW5zKFdlYkNvcmU6
OlNoYXJlZFN0cmluZ0hhc2gpIGNvbnN0OworCisgICAgU2hhcmVkTWVtb3J5KiBzaGFyZWRNZW1v
cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZE1lbW9yeS5nZXQoKTsgfQorICAgIHZvaWQgY2xl
YXIoKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9y
eTsKKworICAgIHVuc2lnbmVkIG1fdGFibGVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fdGFi
bGVTaXplTWFzayB7IDAgfTsKKyAgICBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoKiBtX3RhYmxl
IHsgbnVsbHB0ciB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
VmlzaXRlZExpbmtUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9WaXNpdGVkTGlua1Rh
YmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJiMTFiNzNjZjJkNzdhYjgw
ZjUzMzI2OTFmYjg3ZWQyYmIyZjA5Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKLQotI2luY2x1ZGUgIlNoYXJl
ZE1lbW9yeS5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLVZpc2l0ZWRMaW5rVGFibGU6OlZpc2l0ZWRMaW5rVGFibGUoKQotICAgIDogbV90YWJs
ZVNpemUoMCkKLSAgICAsIG1fdGFibGVTaXplTWFzaygwKQotICAgICwgbV90YWJsZShudWxscHRy
KQotewotfQotCi1WaXNpdGVkTGlua1RhYmxlOjp+VmlzaXRlZExpbmtUYWJsZSgpCi17Ci19Ci0K
LSNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQb3dlck9mMih1bnNp
Z25lZCB2KQotewotICAgIC8vIFRha2VuIGZyb20gaHR0cDovL3d3dy5jcy51dGsuZWR1L352b3Nl
L2Mtc3R1ZmYvYml0aGFja3MuaHRtbAotICAgIAotICAgIHJldHVybiAhKHYgJiAodiAtIDEpKSAm
JiB2OwotfQotI2VuZGlmCi0KLXZvaWQgVmlzaXRlZExpbmtUYWJsZTo6c2V0U2hhcmVkTWVtb3J5
KFJlZjxTaGFyZWRNZW1vcnk+JiYgc2hhcmVkTWVtb3J5KQotewotICAgIG1fc2hhcmVkTWVtb3J5
ID0gV1RGTW92ZShzaGFyZWRNZW1vcnkpOwotICAgIAotICAgIEFTU0VSVChtX3NoYXJlZE1lbW9y
eSk7Ci0gICAgQVNTRVJUKCEobV9zaGFyZWRNZW1vcnktPnNpemUoKSAlIHNpemVvZihMaW5rSGFz
aCkpKTsKLQotICAgIG1fdGFibGUgPSBzdGF0aWNfY2FzdDxMaW5rSGFzaCo+KG1fc2hhcmVkTWVt
b3J5LT5kYXRhKCkpOwotICAgIG1fdGFibGVTaXplID0gbV9zaGFyZWRNZW1vcnktPnNpemUoKSAv
IHNpemVvZihMaW5rSGFzaCk7Ci0gICAgQVNTRVJUKGlzUG93ZXJPZjIobV90YWJsZVNpemUpKTsK
LSAgICAKLSAgICBtX3RhYmxlU2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZSAtIDE7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgdW5zaWduZWQgZG91YmxlSGFzaCh1bnNpZ25lZCBrZXkpCi17Ci0gICAga2V5ID0g
fmtleSArIChrZXkgPj4gMjMpOwotICAgIGtleSBePSAoa2V5IDw8IDEyKTsKLSAgICBrZXkgXj0g
KGtleSA+PiA3KTsKLSAgICBrZXkgXj0gKGtleSA8PCAyKTsKLSAgICBrZXkgXj0gKGtleSA+PiAy
MCk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLSAgICAKLWJvb2wgVmlzaXRlZExpbmtUYWJsZTo6YWRk
TGlua0hhc2goTGlua0hhc2ggbGlua0hhc2gpCi17Ci0gICAgQVNTRVJUKG1fc2hhcmVkTWVtb3J5
KTsKLQotICAgIGludCBrID0gMDsKLSAgICBMaW5rSGFzaCogdGFibGUgPSBtX3RhYmxlOwotICAg
IGludCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKLSAgICB1bnNpZ25lZCBoID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGxpbmtIYXNoKTsKLSAgICBpbnQgaSA9IGggJiBzaXplTWFzazsKLSAg
Ci0gICAgTGlua0hhc2gqIGVudHJ5OwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGVudHJ5ID0g
dGFibGUgKyBpOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgYnVja2V0IGlzIGVtcHR5Lgot
ICAgICAgICBpZiAoISplbnRyeSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIENo
ZWNrIGlmIHRoZSBzYW1lIGxpbmsgaGFzaCBpcyBpbiB0aGUgdGFibGUgYWxyZWFkeS4KLSAgICAg
ICAgaWYgKCplbnRyeSA9PSBsaW5rSGFzaCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBpZiAoIWspCi0gICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAg
ICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7Ci0gICAgfQotCi0gICAgKmVudHJ5ID0gbGlua0hh
c2g7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmlzaXRlZExpbmtUYWJsZTo6aXNMaW5r
VmlzaXRlZChMaW5rSGFzaCBsaW5rSGFzaCkgY29uc3QKLXsKLSAgICBpZiAoIW1fc2hhcmVkTWVt
b3J5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgayA9IDA7Ci0gICAgTGlua0hh
c2gqIHRhYmxlID0gbV90YWJsZTsKLSAgICBpbnQgc2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7
Ci0gICAgdW5zaWduZWQgaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsaW5rSGFzaCk7Ci0gICAg
aW50IGkgPSBoICYgc2l6ZU1hc2s7Ci0gICAgCi0gICAgTGlua0hhc2gqIGVudHJ5OwotICAgIHdo
aWxlICgxKSB7Ci0gICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOwotCi0gICAgICAgIC8vIENoZWNr
IGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgdGFibGUuCi0gICAgICAgIGlmICghKmVu
dHJ5KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBpZiAoKmVudHJ5ID09
IGxpbmtIYXNoKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoIWspCi0gICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgIGkgPSAo
aSArIGspICYgc2l6ZU1hc2s7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IFZpc2l0ZWRMaW5rVGFibGU6OmNsZWFyKCkKLXsKLSAgICBtX3RhYmxlU2l6ZSA9IDA7Ci0gICAg
bV90YWJsZVNpemVNYXNrID0gMDsKLSAgICBtX3NoYXJlZE1lbW9yeSA9IG51bGxwdHI7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
VmlzaXRlZExpbmtUYWJsZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvVmlzaXRlZExpbmtUYWJs
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDkxMjY3NTgxNTRjMTg5NDlkNDVk
Mjg1MGEzMWIxY2ZlOTRlYzJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Zpc2l0ZWRMaW5rVGFibGUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFZpc2l0ZWRMaW5r
VGFibGVfaAotI2RlZmluZSBWaXNpdGVkTGlua1RhYmxlX2gKLQotI2luY2x1ZGUgPFdlYkNvcmUv
TGlua0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBTaGFyZWRNZW1vcnk7Ci0KLWNsYXNzIFZpc2l0ZWRMaW5rVGFibGUgewotcHVi
bGljOgotICAgIFZpc2l0ZWRMaW5rVGFibGUoKTsKLSAgICB+VmlzaXRlZExpbmtUYWJsZSgpOwot
Ci0gICAgdm9pZCBzZXRTaGFyZWRNZW1vcnkoUmVmPFNoYXJlZE1lbW9yeT4mJik7Ci0KLSAgICAv
LyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBVSSBwcm9jZXNzLgotICAgIGJv
b2wgYWRkTGlua0hhc2goV2ViQ29yZTo6TGlua0hhc2gpOwotCi0gICAgYm9vbCBpc0xpbmtWaXNp
dGVkKFdlYkNvcmU6OkxpbmtIYXNoKSBjb25zdDsKLQotICAgIFNoYXJlZE1lbW9yeSogc2hhcmVk
TWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRNZW1vcnkuZ2V0KCk7IH0KLSAgICB2b2lk
IGNsZWFyKCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9zaGFyZWRN
ZW1vcnk7Ci0KLSAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZTsKLSAgICB1bnNpZ25lZCBtX3RhYmxl
U2l6ZU1hc2s7Ci0gICAgV2ViQ29yZTo6TGlua0hhc2gqIG1fdGFibGU7Ci19OwotCi19Ci0KLSNl
bmRpZiAvLyBWaXNpdGVkTGlua1RhYmxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwCmluZGV4IDcwNDhiYmUwYzBkNzA3MmRhMjRiYTFkMTRiYjkyOGQ5Zjll
YWM5ZDguLmE2YzQxZTg3ZWQ2MWNjMzRhOTYwZTc3MzI4ZGZiYjljMGIwMWNjOGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApAQCAtMzE1LDcgKzMxNSw3
IEBAIHZvaWQgV0tDb250ZXh0QWRkVmlzaXRlZExpbmsoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLU3RyaW5nUmVmIHZpc2l0ZWRVUkwpCiAgICAgaWYgKHZpc2l0ZWRVUkxTdHJpbmcuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPnZpc2l0ZWRM
aW5rU3RvcmUoKS5hZGRWaXNpdGVkTGlua0hhc2godmlzaXRlZExpbmtIYXNoKHZpc2l0ZWRVUkxT
dHJpbmcpKTsKKyAgICB0b0ltcGwoY29udGV4dFJlZiktPnZpc2l0ZWRMaW5rU3RvcmUoKS5hZGRW
aXNpdGVkTGlua0hhc2goY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2godmlzaXRlZFVSTFN0cmluZykp
OwogfQogCiB2b2lkIFdLQ29udGV4dENsZWFyVmlzaXRlZExpbmtzKFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Zpc2l0ZWRMaW5rU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVmlzaXRlZExpbmtTdG9yZS5tbQppbmRleCBjNTZmMDJjMGU4NmJlMTgwOGIxYWIwM2UxZmVk
Nzk0NTdiODRlZDAxLi5mYWRmODA4MGQwMDY2YWRjYWVmOWRmMGZjYWI1OTM0MGZiYTcxZGM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVmlzaXRlZExp
bmtTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVmlz
aXRlZExpbmtTdG9yZS5tbQpAQCAtMjksNyArMjksNyBAQAogI2lmIFdLX0FQSV9FTkFCTEVECiAK
ICNpbXBvcnQgIlZpc2l0ZWRMaW5rU3RvcmUuaCIKLSNpbXBvcnQgPFdlYkNvcmUvTGlua0hhc2gu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkU3RyaW5nSGFzaC5oPgogCiBAaW1wbGVtZW50YXRp
b24gX1dLVmlzaXRlZExpbmtTdG9yZQogCkBAIC01Miw3ICs1Miw3IEBAIC0gKHZvaWQpZGVhbGxv
YwogCiAtICh2b2lkKWFkZFZpc2l0ZWRMaW5rV2l0aFVSTDooTlNVUkwgKilVUkwKIHsKLSAgICBh
dXRvIGxpbmtIYXNoID0gV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoKFVSTC5hYnNvbHV0ZVN0cmlu
Zyk7CisgICAgYXV0byBsaW5rSGFzaCA9IFdlYkNvcmU6OmNvbXB1dGVTaGFyZWRTdHJpbmdIYXNo
KFVSTC5hYnNvbHV0ZVN0cmluZyk7CiAKICAgICBfdmlzaXRlZExpbmtTdG9yZS0+YWRkVmlzaXRl
ZExpbmtIYXNoKGxpbmtIYXNoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRl
ZExpbmtTdG9yZS5jcHAKaW5kZXggYmQwMDJjMDZmNjQxMTJkYmQ1OTA2Y2E3MDRjYzZlYjMxNzk5
MjczNi4uMWZkZDFiNTA2YTM3YTllOWE2Y2MwODIzYjIzZWUyMmI2OTg3MDVjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOSArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmUuaCIKIAotI2lu
Y2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmVNZXNzYWdl
cy5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKICNpbmNsdWRlICJWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKQEAgLTM4LDggKzM2LDYgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgY29uc3Qg
aW50IHZpc2l0ZWRMaW5rVGFibGVNYXhMb2FkID0gMjsKLQogUmVmPFZpc2l0ZWRMaW5rU3RvcmU+
IFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
VmlzaXRlZExpbmtTdG9yZSk7CkBAIC01NCw5ICs1MCw3IEBAIFZpc2l0ZWRMaW5rU3RvcmU6On5W
aXNpdGVkTGlua1N0b3JlKCkKIH0KIAogVmlzaXRlZExpbmtTdG9yZTo6VmlzaXRlZExpbmtTdG9y
ZSgpCi0gICAgOiBtX2tleUNvdW50KDApCi0gICAgLCBtX3RhYmxlU2l6ZSgwKQotICAgICwgbV9w
ZW5kaW5nVmlzaXRlZExpbmtzVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVmlzaXRlZExp
bmtTdG9yZTo6cGVuZGluZ1Zpc2l0ZWRMaW5rc1RpbWVyRmlyZWQpCisgICAgOiBtX2xpbmtIYXNo
U3RvcmUoKnRoaXMpCiB7CiB9CiAKQEAgLTY5LDEyICs2MywxMCBAQCB2b2lkIFZpc2l0ZWRMaW5r
U3RvcmU6OmFkZFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogCiAgICAgcHJvY2Vz
cy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rU3RvcmU6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgaWRlbnRpZmllcigpLCAqdGhpcyk7CiAKLSAgICBpZiAoIW1fa2V5Q291
bnQpCisgICAgaWYgKG1fbGlua0hhc2hTdG9yZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEFTU0VSVChtX3RhYmxlLnNoYXJlZE1lbW9yeSgpKTsKLQotICAgIHNlbmRUYWJsZShw
cm9jZXNzKTsKKyAgICBzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MocHJvY2Vzcyk7CiB9CiAKIHZv
aWQgVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nl
c3MpCkBAIC04NSwyMSArNzcsMTQgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpyZW1vdmVQcm9j
ZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBwcm9jZXNzLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6VmlzaXRlZExpbmtTdG9yZTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBpZGVudGlmaWVyKCkpOwogfQogCi12b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRM
aW5rSGFzaChMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQgVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlz
aXRlZExpbmtIYXNoKFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCiB7Ci0gICAgbV9wZW5kaW5n
VmlzaXRlZExpbmtzLmFkZChsaW5rSGFzaCk7Ci0KLSAgICBpZiAoIW1fcGVuZGluZ1Zpc2l0ZWRM
aW5rc1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fcGVuZGluZ1Zpc2l0ZWRMaW5rc1RpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOworICAgIG1fbGlua0hhc2hTdG9yZS5hZGQobGlua0hhc2gpOwog
fQogCiB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZUFsbCgpCiB7Ci0gICAgbV9wZW5kaW5n
VmlzaXRlZExpbmtzVGltZXIuc3RvcCgpOwotICAgIG1fcGVuZGluZ1Zpc2l0ZWRMaW5rcy5jbGVh
cigpOwotICAgIG1fa2V5Q291bnQgPSAwOwotICAgIG1fdGFibGVTaXplID0gMDsKLSAgICBtX3Rh
YmxlLmNsZWFyKCk7CisgICAgbV9saW5rSGFzaFN0b3JlLmNsZWFyKCk7CiAKICAgICBmb3IgKFdl
YlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7CiAgICAgICAgIEFTU0VSVChw
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsKQEAg
LTExNyw5ICsxMDIsOSBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OndlYlByb2Nlc3NEaWRDbG9z
ZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgSVBDOjpDb25uZQogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCiB9CiAKLXZvaWQgVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNo
RnJvbVBhZ2UodWludDY0X3QgcGFnZUlELCBMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQgVmlzaXRl
ZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2UodWludDY0X3QgcGFnZUlELCBT
aGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQogewotICAgIGlmIChXZWJQYWdlUHJveHkqIHdlYlBh
Z2VQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShwYWdlSUQpKSB7CisgICAgaWYgKGF1
dG8qIHdlYlBhZ2VQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShwYWdlSUQpKSB7CiAg
ICAgICAgIGlmICghd2ViUGFnZVByb3h5LT5hZGRzVmlzaXRlZExpbmtzKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTI3LDEyNSArMTEyLDM1IEBAIHZvaWQgVmlzaXRlZExpbmtT
dG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2UodWludDY0X3QgcGFnZUlELCBMaW5rSGFz
aCBsaW5rCiAgICAgYWRkVmlzaXRlZExpbmtIYXNoKGxpbmtIYXNoKTsKIH0KIAotc3RhdGljIHVu
c2lnbmVkIG5leHRQb3dlck9mMih1bnNpZ25lZCB2KQordm9pZCBWaXNpdGVkTGlua1N0b3JlOjpz
ZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAg
IC8vIFRha2VuIGZyb20gaHR0cDovL3d3dy5jcy51dGsuZWR1L352b3NlL2Mtc3R1ZmYvYml0aGFj
a3MuaHRtbAotICAgIC8vIERldmlzZWQgYnkgU2VhbiBBbmRlcnNvbiwgU2VwZW1iZXIgMTQsIDIw
MDEKLSAgICAKLSAgICB2LS07Ci0gICAgdiB8PSB2ID4+IDE7Ci0gICAgdiB8PSB2ID4+IDI7Ci0g
ICAgdiB8PSB2ID4+IDQ7Ci0gICAgdiB8PSB2ID4+IDg7Ci0gICAgdiB8PSB2ID4+IDE2OwotICAg
IHYrKzsKLSAgICAKLSAgICByZXR1cm4gdjsKKyAgICBBU1NFUlQocHJvY2Vzcy5wcm9jZXNzUG9v
bCgpLnByb2Nlc3NlcygpLmNvbnRhaW5zKCZwcm9jZXNzKSk7CisKKyAgICBTaGFyZWRNZW1vcnk6
OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFtX2xpbmtIYXNoU3RvcmUuY3JlYXRlU2hhcmVkTWVt
b3J5SGFuZGxlKGhhbmRsZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHByb2Nlc3Muc2VuZChN
ZXNzYWdlczo6VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OlNldFZpc2l0ZWRMaW5rVGFibGUo
aGFuZGxlKSwgaWRlbnRpZmllcigpKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHRhYmxlU2l6ZUZv
cktleUNvdW50KHVuc2lnbmVkIGtleUNvdW50KQordm9pZCBWaXNpdGVkTGlua1N0b3JlOjpkaWRJ
bnZhbGlkYXRlU2hhcmVkTWVtb3J5KCkKIHsKLSAgICAvLyBXZSB3YW50IHRoZSB0YWJsZSB0byBi
ZSBhdCBsZWFzdCBoYWxmIGVtcHR5LgotICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSA9IG5leHRQb3dl
ck9mMihrZXlDb3VudCAqIHZpc2l0ZWRMaW5rVGFibGVNYXhMb2FkKTsKLQotICAgIC8vIEVuc3Vy
ZSB0aGF0IHRoZSB0YWJsZSBzaXplIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIGEgcGFnZS4KLSAg
ICBzaXplX3QgbWluaW11bVRhYmxlU2l6ZSA9IFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUo
KSAvIHNpemVvZihMaW5rSGFzaCk7Ci0gICAgaWYgKHRhYmxlU2l6ZSA8IG1pbmltdW1UYWJsZVNp
emUpCi0gICAgICAgIHJldHVybiBtaW5pbXVtVGFibGVTaXplOwotICAgIAotICAgIHJldHVybiB0
YWJsZVNpemU7CisgICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3Nl
cykKKyAgICAgICAgc2VuZFN0b3JlSGFuZGxlVG9Qcm9jZXNzKCpwcm9jZXNzKTsKIH0KIAotdm9p
ZCBWaXNpdGVkTGlua1N0b3JlOjpwZW5kaW5nVmlzaXRlZExpbmtzVGltZXJGaXJlZCgpCit2b2lk
IFZpc2l0ZWRMaW5rU3RvcmU6OmRpZEFkZFNoYXJlZFN0cmluZ0hhc2hlcyhjb25zdCBWZWN0b3I8
V2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaD4mIGxpbmtIYXNoZXMpCiB7Ci0gICAgdW5zaWduZWQg
Y3VycmVudFRhYmxlU2l6ZSA9IG1fdGFibGVTaXplOwotICAgIHVuc2lnbmVkIG5ld1RhYmxlU2l6
ZSA9IHRhYmxlU2l6ZUZvcktleUNvdW50KG1fa2V5Q291bnQgKyBtX3BlbmRpbmdWaXNpdGVkTGlu
a3Muc2l6ZSgpKTsKLQotICAgIG5ld1RhYmxlU2l6ZSA9IHN0ZDo6bWF4KGN1cnJlbnRUYWJsZVNp
emUsIG5ld1RhYmxlU2l6ZSk7Ci0KLSAgICBpZiAoY3VycmVudFRhYmxlU2l6ZSAhPSBuZXdUYWJs
ZVNpemUpIHsKLSAgICAgICAgcmVzaXplVGFibGUobmV3VGFibGVTaXplKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxXZWJDb3JlOjpMaW5rSGFzaD4gYWRkZWRWaXNpdGVk
TGlua3M7Ci0KLSAgICBmb3IgKGF1dG8mIGxpbmtIYXNoIDogbV9wZW5kaW5nVmlzaXRlZExpbmtz
KSB7Ci0gICAgICAgIGlmIChtX3RhYmxlLmFkZExpbmtIYXNoKGxpbmtIYXNoKSkgewotICAgICAg
ICAgICAgYWRkZWRWaXNpdGVkTGlua3MuYXBwZW5kKGxpbmtIYXNoKTsKLSAgICAgICAgICAgICsr
bV9rZXlDb3VudDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fcGVuZGluZ1Zpc2l0ZWRMaW5r
cy5jbGVhcigpOwotCi0gICAgaWYgKGFkZGVkVmlzaXRlZExpbmtzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVCghbGlua0hhc2hlcy5pc0VtcHR5KCkpOwogCiAgICAgZm9y
IChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewogICAgICAgICBBU1NF
UlQocHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5wcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7
CiAKLSAgICAgICAgaWYgKGFkZGVkVmlzaXRlZExpbmtzLnNpemUoKSA+IDIwKQorICAgICAgICBp
ZiAobGlua0hhc2hlcy5zaXplKCkgPiAyMCkKICAgICAgICAgICAgIHByb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpBbGxWaXNpdGVkTGlua1N0YXRlQ2hh
bmdlZCgpLCBpZGVudGlmaWVyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6VmlzaXRlZExpbmtT
dGF0ZUNoYW5nZWQoYWRkZWRWaXNpdGVkTGlua3MpLCBpZGVudGlmaWVyKCkpOwotICAgIH0KLX0K
LQotdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpyZXNpemVUYWJsZSh1bnNpZ25lZCBuZXdUYWJsZVNp
emUpCi17Ci0gICAgYXV0byBuZXdUYWJsZU1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUo
bmV3VGFibGVTaXplICogc2l6ZW9mKExpbmtIYXNoKSk7Ci0KLSAgICBpZiAoIW5ld1RhYmxlTWVt
b3J5KSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIHNoYXJlZCBtZW1v
cnkgZm9yIHZpc2l0ZWQgbGluayB0YWJsZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbWVtc2V0KG5ld1RhYmxlTWVtb3J5LT5kYXRhKCksIDAsIG5ld1RhYmxlTWVtb3J5LT5zaXpl
KCkpOwotCi0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gY3VycmVudFRhYmxlTWVtb3J5ID0gbV90
YWJsZS5zaGFyZWRNZW1vcnkoKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50VGFibGVTaXplID0gbV90
YWJsZVNpemU7Ci0KLSAgICBtX3RhYmxlLnNldFNoYXJlZE1lbW9yeShuZXdUYWJsZU1lbW9yeS5y
ZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBtX3RhYmxlU2l6ZSA9IG5ld1RhYmxlU2l6ZTsKLQotICAg
IGlmIChjdXJyZW50VGFibGVNZW1vcnkpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJyZW50
VGFibGVTaXplLCBjdXJyZW50VGFibGVNZW1vcnktPnNpemUoKSA9PSBjdXJyZW50VGFibGVTaXpl
ICogc2l6ZW9mKExpbmtIYXNoKSk7Ci0KLSAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUgY3VycmVu
dCBoYXNoIHRhYmxlIGFuZCByZS1hZGQgYWxsIGVudHJpZXMgdG8gdGhlIG5ldyBoYXNoIHRhYmxl
LgotICAgICAgICBjb25zdCBMaW5rSGFzaCogY3VycmVudExpbmtIYXNoZXMgPSBzdGF0aWNfY2Fz
dDxjb25zdCBMaW5rSGFzaCo+KGN1cnJlbnRUYWJsZU1lbW9yeS0+ZGF0YSgpKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGN1cnJlbnRUYWJsZVNpemU7ICsraSkgewotICAgICAg
ICAgICAgTGlua0hhc2ggbGlua0hhc2ggPSBjdXJyZW50TGlua0hhc2hlc1tpXTsKLQotICAgICAg
ICAgICAgaWYgKCFsaW5rSGFzaCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgYm9vbCBkaWRBZGRMaW5rSGFzaCA9IG1fdGFibGUuYWRkTGlua0hhc2gobGlua0hhc2gp
OwotCi0gICAgICAgICAgICAvLyBJdCBzaG91bGQgYWx3YXlzIGJlIHBvc3NpYmxlIHRvIGFkZCB0
aGUgbGluayBoYXNoIHRvIGEgbmV3IHRhYmxlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChk
aWRBZGRMaW5rSGFzaCwgZGlkQWRkTGlua0hhc2gpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Zm9yIChhdXRvJiBsaW5rSGFzaCA6IG1fcGVuZGluZ1Zpc2l0ZWRMaW5rcykgewotICAgICAgICBp
ZiAobV90YWJsZS5hZGRMaW5rSGFzaChsaW5rSGFzaCkpCi0gICAgICAgICAgICBtX2tleUNvdW50
Kys7CisgICAgICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1RhYmxl
Q29udHJvbGxlcjo6VmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQobGlua0hhc2hlcyksIGlkZW50aWZp
ZXIoKSk7CiAgICAgfQotICAgIG1fcGVuZGluZ1Zpc2l0ZWRMaW5rcy5jbGVhcigpOwotCi0gICAg
Zm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAgc2Vu
ZFRhYmxlKCpwcm9jZXNzKTsKLX0KLQotdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpzZW5kVGFibGUo
V2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQotewotICAgIEFTU0VSVChwcm9jZXNzLnByb2Nlc3NQ
b29sKCkucHJvY2Vzc2VzKCkuY29udGFpbnMoJnByb2Nlc3MpKTsKLQotICAgIFNoYXJlZE1lbW9y
eTo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIW1fdGFibGUuc2hhcmVkTWVtb3J5KCktPmNyZWF0
ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNzLnNlbmQoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rVGFi
bGVDb250cm9sbGVyOjpTZXRWaXNpdGVkTGlua1RhYmxlKGhhbmRsZSksIGlkZW50aWZpZXIoKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlz
aXRlZExpbmtTdG9yZS5oCmluZGV4IDVjNmFkOGRkMmY2ZWQxZmFlMzU4NmExZTFjZDBlNDMyNzJm
NWVkYmUuLjcyOGNkYzk5MGIxOTEyZGJlYzA5MWY5ZjhiNTQwMjBjNjcwMjAyZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMjcgKzIzLDI0IEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBWaXNpdGVk
TGlua1N0b3JlX2gKLSNkZWZpbmUgVmlzaXRlZExpbmtTdG9yZV9oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2lu
Y2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKKyNpbmNsdWRlICJTaGFyZWRTdHJpbmdIYXNoU3Rv
cmUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTGlm
ZXRpbWVPYnNlcnZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTGlua0hhc2guaD4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0lkZW50aWZpZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlUHJveHk7
CiBjbGFzcyBXZWJQcm9jZXNzUHJveHk7CiAgICAgCi1jbGFzcyBWaXNpdGVkTGlua1N0b3JlIGZp
bmFsIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6VmlzaXRlZExp
bmtTdG9yZT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBXZWJQcm9jZXNz
TGlmZXRpbWVPYnNlcnZlciwgcHVibGljIElkZW50aWZpZWQ8VmlzaXRlZExpbmtTdG9yZT4gIHsK
K2NsYXNzIFZpc2l0ZWRMaW5rU3RvcmUgZmluYWwgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQ
STo6T2JqZWN0OjpUeXBlOjpWaXNpdGVkTGlua1N0b3JlPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciwgcHVibGljIFdlYlByb2Nlc3NMaWZldGltZU9ic2VydmVyLCBwdWJsaWMgSWRlbnRp
ZmllZDxWaXNpdGVkTGlua1N0b3JlPiwgcHJpdmF0ZSBTaGFyZWRTdHJpbmdIYXNoU3RvcmU6OkNs
aWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxWaXNpdGVkTGlua1N0b3JlPiBjcmVhdGUo
KTsKIApAQCAtNTMsMzQgKzUwLDI3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFByb2Nlc3MoV2Vi
UHJvY2Vzc1Byb3h5Jik7CiAgICAgdm9pZCByZW1vdmVQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYp
OwogCi0gICAgdm9pZCBhZGRWaXNpdGVkTGlua0hhc2goV2ViQ29yZTo6TGlua0hhc2gpOworICAg
IHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2gpOwogICAg
IHZvaWQgcmVtb3ZlQWxsKCk7CiAKIHByaXZhdGU6CiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2
ZXIKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAKICAgICAvLyBXZWJQcm9jZXNzTGlmZXRpbWVP
YnNlcnZlcgotICAgIHZvaWQgd2ViUHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihXZWJQcm9jZXNz
UHJveHkmLCBJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2b2lkIHdlYlByb2Nlc3NE
aWRDbG9zZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgSVBDOjpDb25uZWN0aW9uJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB3ZWJQcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKFdlYlByb2Nlc3NQ
cm94eSYsIElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOworICAgIHZvaWQgd2ViUHJvY2Vzc0RpZENs
b3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBJUEM6OkNvbm5lY3Rpb24mKSBmaW5hbDsK
IAotICAgIHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2UodWludDY0X3QgcGFnZUlELCBX
ZWJDb3JlOjpMaW5rSGFzaCk7CisgICAgLy8gU2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpDbGllbnQK
KyAgICB2b2lkIGRpZEludmFsaWRhdGVTaGFyZWRNZW1vcnkoKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZEFkZFNoYXJlZFN0cmluZ0hhc2hlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2hhcmVkU3RyaW5n
SGFzaD4mKSBmaW5hbDsKIAotICAgIHZvaWQgcGVuZGluZ1Zpc2l0ZWRMaW5rc1RpbWVyRmlyZWQo
KTsKKyAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rSGFzaEZyb21QYWdlKHVpbnQ2NF90IHBhZ2VJRCwg
V2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCk7CiAKLSAgICB2b2lkIHJlc2l6ZVRhYmxlKHVuc2ln
bmVkIG5ld1RhYmxlU2l6ZSk7Ci0gICAgdm9pZCBzZW5kVGFibGUoV2ViUHJvY2Vzc1Byb3h5Jik7
CisgICAgdm9pZCBzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Jik7CiAK
ICAgICBIYXNoU2V0PFdlYlByb2Nlc3NQcm94eSo+IG1fcHJvY2Vzc2VzOwotCi0gICAgdW5zaWdu
ZWQgbV9rZXlDb3VudDsKLSAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZTsKLSAgICBWaXNpdGVkTGlu
a1RhYmxlIG1fdGFibGU7Ci0KLSAgICBIYXNoU2V0PFdlYkNvcmU6OkxpbmtIYXNoLCBXZWJDb3Jl
OjpMaW5rSGFzaEhhc2g+IG1fcGVuZGluZ1Zpc2l0ZWRMaW5rczsKLSAgICBSdW5Mb29wOjpUaW1l
cjxWaXNpdGVkTGlua1N0b3JlPiBtX3BlbmRpbmdWaXNpdGVkTGlua3NUaW1lcjsKKyAgICBTaGFy
ZWRTdHJpbmdIYXNoU3RvcmUgbV9saW5rSGFzaFN0b3JlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBWaXNpdGVkTGlua1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCAyNjIwODYzOWZmNGU3ZDY3YTU2NGQ4MjUy
Njk5YTI2ODg3NGVhZTE2Li5lMzEwNjUxY2VjZWQ5MDZjZmVjYWRiYzdjNGY3NTEzYzFhYzE2ZWNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC03Miw3
ICs3Miw2IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTGlua0hhc2guaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0xvZ0luaXRpYWxpemF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJl
cXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VSTFBhcnNlci5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggYWQ1YjBjNjdhOTUwMGQ4YmE4YWQ2NGUzZDhm
YWQ4OTA0MzU3OTdjNS4uN2M3YThlYzkxZWY3OWJhYmMwZTgxNmNjZWYwYTRmMmJmZTk1MGY2NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC00NCw3ICs0NCw3
IEBACiAjaW5jbHVkZSAiV2ViQ29udGV4dENsaWVudC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRD
b25uZWN0aW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkU3RyaW5nSGFz
aC5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5oCmluZGV4IGZhNWY3ZTUwMmZjZGI5NmIyOTcyMDEyYzcwYmQxNzgzYTZmNjdl
NmIuLmQ1MWYwYzIyZDg0MDBjNjEwYjdkNDBhZDVjYzNlOGVjODg0ZDdkZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCkBAIC0zOCw3ICszOCw3IEBACiAjaW5j
bHVkZSAiVmlzaWJsZVdlYlBhZ2VDb3VudGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMyOGNjMTFjNWVlYWM0NmY4YzczNTVkMWZmMmYzYzIw
OGI4YzViYzMuLjYzOGQ2NzA0ODI2NTEwNmJmOWY3ZWQ4YjRiNWU1ZDZmMTlhZDc1NjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTUz
LDggKzE1Myw2IEBACiAJCTFBMEVDOTA3MTI0QzBBQjgwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTBFQzkwNTEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24u
Y3BwICovOyB9OwogCQkxQTBFQzkwRjEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTBFQzkwRDEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b25NYW5hZ2VyLmggKi87IH07CiAJCTFBMEVDOTEwMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUEwRUM5MEUxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdpblByb2Nl
c3NDb25uZWN0aW9uTWFuYWdlci5jcHAgKi87IH07Ci0JCTFBMEYyOUNCMTIwQjM3MTYwMDUzRDFC
OSAvKiBWaXNpdGVkTGlua1RhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMEYyOUM5MTIwQjM3MTYwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1Rh
YmxlLmNwcCAqLzsgfTsKLQkJMUEwRjI5Q0MxMjBCMzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5r
VGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
MEYyOUNBMTIwQjM3MTYwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1RhYmxlLmggKi87IH07CiAJCTFB
MEYyOUUzMTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEYyOUUxMTIwQjQ0NDIwMDUz
RDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmNwcCAqLzsgfTsKIAkJMUEwRjI5RTQxMjBCNDQ0MjAw
NTNEMUI5IC8qIFZpc2l0ZWRMaW5rU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEYyOUUyMTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlu
a1N0b3JlLmggKi87IH07CiAJCTFBMTRGOEUxMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9E
YXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
MTRGOERGMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9EYXRhLmNwcCAqLzsgfTsKQEAgLTEz
NTYsNiArMTM1NCwxMCBAQAogCQk4MzA0OEFFNjFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vzc1Ro
cm90dGxlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODMwNDhBRTUxQUNBNDVEQzAwODJDODMyIC8qIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQu
aCAqLzsgfTsKIAkJODMxMDQyOEIxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJl
c291cmNlc0VudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4MzEwNDI4OTFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2Vz
RW50cnkuaCAqLzsgfTsKIAkJODMxMDQyOEMxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNo
ZVN1YnJlc291cmNlc0VudHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDgzMTA0MjhBMUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJy
ZXNvdXJjZXNFbnRyeS5jcHAgKi87IH07CisJCTgzMTNGN0VCMUY3REFFMDgwMEI5NDRFQiAvKiBT
aGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODMxM0Y3RUExRjdEQUUwNDAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hh
c2hTdG9yZS5jcHAgKi87IH07CisJCTgzMTNGN0VDMUY3REFFMDgwMEI5NDRFQiAvKiBTaGFyZWRT
dHJpbmdIYXNoU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDgzMTNGN0U5MUY3REFFMDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUu
aCAqLzsgfTsKKwkJODMxM0Y3RUQxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hU
YWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
MzEzRjdFODFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmNwcCAqLzsg
fTsKKwkJODMxM0Y3RUUxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMxM0Y3RTcx
RjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oICovOyB9OwogCQk4MzFF
RUJCRDFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzFFRUJCQjFCRDg1
QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmggKi87IH07CiAJCTgz
MUVFQkJFMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMxRUVCQkMx
QkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgKi87IH07
CiAJCTgzMkFFMjUyMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxv
YWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4MzJBRTI1MDFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2Fk
TWFuYWdlci5oICovOyB9OwpAQCAtMjM2OSw4ICsyMzcxLDYgQEAKIAkJMUEwRUM5MDUxMjRDMEFC
ODAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRUM5MEQxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUEwRUM5MEUxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkxQTBGMjlDOTEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRlZExpbmtUYWJsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdGVkTGlua1RhYmxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwRjI5Q0ExMjBCMzcxNjAwNTNEMUI5
IC8qIFZpc2l0ZWRMaW5rVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlzaXRlZExpbmtUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBGMjlF
MTEyMEI0NDQyMDA1M0QxQjkgLyogVmlzaXRlZExpbmtTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdGVkTGlua1N0b3JlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRjI5RTIxMjBCNDQ0MjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5r
U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRlZExpbmtTdG9y
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTE0RjhERjFENzRDODM0MDA2Q0JF
QzYgLyogRnJhbWVJbmZvRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGcmFtZUluZm9EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3
MTEsNiArMzcxMSwxMCBAQAogCQk4MzA0OEFFNTFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vzc1Ro
cm90dGxlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNz
VGhyb3R0bGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzMTA0Mjg5
MUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRy
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzEwNDI4QTFCRDZCNjZGMDBBNzE1
RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzEzRjdFNzFGN0RBRTAzMDBCOTQ0RUIgLyog
U2hhcmVkU3RyaW5nSGFzaFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
MzEzRjdFODFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzMTNGN0U5MUY3REFFMDMwMEI5NDRF
QiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTgzMTNGN0VBMUY3REFFMDQwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVkU3RyaW5nSGFzaFN0
b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMxRUVCQkIxQkQ4NUM0MzAw
QkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMxRUVCQkMxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtD
YWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4MzJBRTI1MDFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3Vs
YXRpdmVMb2FkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3
b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01MDMwLDYgKzUwMzQsMTAgQEAKIAkJCQkxQTY0MjBFMzEyRENFMkZGMDBDQUFFMkMg
LyogU2hhcmVhYmxlQml0bWFwLmggKi8sCiAJCQkJNTEyMTc0NUUxNjRDMjBFMzAwMzdBNUMxIC8q
IFNoYXJlYWJsZVJlc291cmNlLmNwcCAqLywKIAkJCQk1MTIxNzQ1RjE2NEMyMEUzMDAzN0E1QzEg
LyogU2hhcmVhYmxlUmVzb3VyY2UuaCAqLywKKwkJCQk4MzEzRjdFQTFGN0RBRTA0MDBCOTQ0RUIg
LyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcCAqLywKKwkJCQk4MzEzRjdFOTFGN0RBRTAzMDBC
OTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggKi8sCisJCQkJODMxM0Y3RTgxRjdEQUUw
MzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5jcHAgKi8sCisJCQkJODMxM0Y3RTcx
RjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oICovLAogCQkJCTUyNzJC
Mjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgKi8sCiAJCQkJNTI3MkIy
ODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggKi8sCiAJCQkJMUE1RTREQTMx
MkQzQkQzRDAwOTlBMkJCIC8qIFRleHRDaGVja2VyU3RhdGUuaCAqLywKQEAgLTUwMzksOCArNTA0
Nyw2IEBACiAJCQkJMUFDMTMzNjYxODU2NUI1NzAwRjNFQzA1IC8qIFVzZXJEYXRhLmggKi8sCiAJ
CQkJMjY4NDA1NEExOEI4NjZGRjAwMjJDMzhCIC8qIFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUlu
Zm8uY3BwICovLAogCQkJCTI2ODQwNTQyMThCODVBNjMwMDIyQzM4QiAvKiBWaXNpYmxlQ29udGVu
dFJlY3RVcGRhdGVJbmZvLmggKi8sCi0JCQkJMUEwRjI5QzkxMjBCMzcxNjAwNTNEMUI5IC8qIFZp
c2l0ZWRMaW5rVGFibGUuY3BwICovLAotCQkJCTFBMEYyOUNBMTIwQjM3MTYwMDUzRDFCOSAvKiBW
aXNpdGVkTGlua1RhYmxlLmggKi8sCiAJCQkJNTE4RDJDQUIxMkQ1MTUzQjAwM0JCOTNCIC8qIFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwICovLAogCQkJCTUxOEQyQ0FDMTJENTE1M0IwMDNCQjkz
QiAvKiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtLmggKi8sCiAJCQkJQkNGNTA3MjYxMjQzMjlBQTAw
NTk1NUFFIC8qIFdlYkNlcnRpZmljYXRlSW5mby5oICovLApAQCAtODc3MSw2ICs4Nzc3LDggQEAK
IAkJCQk1MTIxNzQ2MTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBMjRCRUQ1MTIwODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnku
aCBpbiBIZWFkZXJzICovLAogCQkJCUNENEI0RDlEMUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFyZWRS
aW5nQnVmZmVyU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODMxM0Y3RUMxRjdEQUUwODAw
Qjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODMx
M0Y3RUUxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMkRBRjA2RDYxOEJEMUE0NzAwODFDRUIxIC8qIFNtYXJ0TWFnbmlmaWNhdGlv
bkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERTY5NDNFMThCRDJBNjgwMDVDMTVF
NSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUyNzJCMjhCMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oIGluIEhl
YWRlcnMgKi8sCkBAIC04ODE5LDcgKzg4MjcsNiBAQAogCQkJCTJERDVBNzI5MUVCRjA4RDUwMDlC
QTU5NyAvKiBWaXNpYmxlV2ViUGFnZUNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMEYy
OUU0MTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTYwMjI0RDE4QzE2QjlGMDBDM0U4QzkgLyogVmlzaXRlZExpbmtTdG9yZU1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTBGMjlDQzEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRl
ZExpbmtUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGNENFRjAxOEJDNDgxODAwQkMyRDM0
IC8qIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThF
N0QzRDE4QzE1MTQ5MDA1QTcwMkEgLyogVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJNZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBOUJBRTExODRGRkFDNzAwM0I2QkM2IC8qIFdlYWtP
YmpDUHRyLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzU5LDYgKzEwMzY2LDggQEAKIAkJCQk1MTIx
NzQ2MDE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDQ1MEFFQzAxREMzRkFFNTAwOTk0M0YyIC8qIFNoYXJlZE1lbW9yeUNvY29hLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUNENEI0RDlDMUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFyZWRS
aW5nQnVmZmVyU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4MzEzRjdFQjFGN0RBRTA4
MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTgzMTNGN0VEMUY3REFFMDgwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoVGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkRBRjA2RDcxOEJEMUE0NzAwODFDRUIxIC8qIFNtYXJ0TWFnbmlm
aWNhdGlvbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkyREU2OTQzRDE4QkQyQTY4
MDA1QzE1RTUgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MjcyQjI4QTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlz
dGljc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDQyMCw3ICsxMDQyOSw2IEBACiAJCQkJ
MjY4NDA1NEMxOEI4NkMzNTAwMjJDMzhCIC8qIFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwRjI5RTMxMjBCNDQ0MjAwNTNEMUI5IC8qIFZpc2l0
ZWRMaW5rU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2MDIyNEMxOEMxNkI5RjAwQzNF
OEM5IC8qIFZpc2l0ZWRMaW5rU3RvcmVNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMUEwRjI5Q0IxMjBCMzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rVGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFGNENFRUYxOEJDNDgxODAwQkMyRDM0IC8qIFZpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEU3RDNDMThDMTUxNDkw
MDVBNzAyQSAvKiBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDRURBMTJFMjE1MkNEMUFFMDBEOUUwOEQgLyogV2ViQWx0ZXJu
YXRpdmVUZXh0Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xs
ZXIuY3BwCmluZGV4IDZlOGIwNmRmYjhkM2Q1ZjBiY2Q1M2Q1MDg4MTk1ODRjOGYzNzExMTUuLmVm
NzEyODAyZjFiYWQzYTA1MGMwZWIyOTE2YjAwZmQwOGU1M2MxYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxl
Q29udHJvbGxlci5jcHAKQEAgLTcxLDE0ICs3MSwxNCBAQCBWaXNpdGVkTGlua1RhYmxlQ29udHJv
bGxlcjo6flZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKCkKICAgICB2aXNpdGVkTGlua1RhYmxl
Q29udHJvbGxlcnMoKS5yZW1vdmUobV9pZGVudGlmaWVyKTsKIH0KIAotYm9vbCBWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlcjo6aXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hhc2ggbGlua0hhc2gs
IGNvbnN0IFVSTCYsIGNvbnN0IEF0b21pY1N0cmluZyYpCitib29sIFZpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyOjppc0xpbmtWaXNpdGVkKFBhZ2UmLCBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNo
LCBjb25zdCBVUkwmLCBjb25zdCBBdG9taWNTdHJpbmcmKQogewotICAgIHJldHVybiBtX3Zpc2l0
ZWRMaW5rVGFibGUuaXNMaW5rVmlzaXRlZChsaW5rSGFzaCk7CisgICAgcmV0dXJuIG1fdmlzaXRl
ZExpbmtUYWJsZS5jb250YWlucyhsaW5rSGFzaCk7CiB9CiAKLXZvaWQgVmlzaXRlZExpbmtUYWJs
ZUNvbnRyb2xsZXI6OmFkZFZpc2l0ZWRMaW5rKFBhZ2UmIHBhZ2UsIExpbmtIYXNoIGxpbmtIYXNo
KQordm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6YWRkVmlzaXRlZExpbmsoUGFnZSYg
cGFnZSwgU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKLSAgICBpZiAobV92aXNpdGVkTGlu
a1RhYmxlLmlzTGlua1Zpc2l0ZWQobGlua0hhc2gpKQorICAgIGlmIChtX3Zpc2l0ZWRMaW5rVGFi
bGUuY29udGFpbnMobGlua0hhc2gpKQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJQYWdlKiB3
ZWJQYWdlID0gV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKCZwYWdlKTsKQEAgLTk5LDcgKzk5LDcgQEAg
dm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6c2V0VmlzaXRlZExpbmtUYWJsZShjb25z
dCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYKICAgICBpbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlua3Mo
KTsKIH0KIAotdm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6dmlzaXRlZExpbmtTdGF0
ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYgbGlua0hhc2hlcykKK3Zv
aWQgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoPiYgbGlua0hhc2hlcykKIHsKICAg
ICBmb3IgKGF1dG8gbGlua0hhc2ggOiBsaW5rSGFzaGVzKQogICAgICAgICBpbnZhbGlkYXRlU3R5
bGVzRm9yTGluayhsaW5rSGFzaCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAppbmRleCBkNmU4
MmJmN2RlNTM0MGRhYmU1MThkODNhZTIxZmZlMzY4YTkxYWViLi43NDdlM2Q4YmE3MzVlYmMwMmZh
N2E1ZWExZjM1Yzg1NzRkYTBiNGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmgKQEAgLTI3
LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIlNo
YXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKKyNpbmNsdWRlICJT
aGFyZWRTdHJpbmdIYXNoVGFibGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Zpc2l0ZWRMaW5rU3Rv
cmUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00MSwxOSArNDEsMTkgQEAgcHJpdmF0ZToK
ICAgICBleHBsaWNpdCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcih1aW50NjRfdCBpZGVudGlm
aWVyKTsKIAogICAgIC8vIFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RvcmUuCi0gICAgYm9vbCBpc0xp
bmtWaXNpdGVkKFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpMaW5rSGFzaCwgY29uc3QgV2ViQ29y
ZTo6VVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6TGlu
a0hhc2gpIG92ZXJyaWRlOworICAgIGJvb2wgaXNMaW5rVmlzaXRlZChXZWJDb3JlOjpQYWdlJiwg
V2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiBiYXNlVVJMLCBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRW
aXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCkgb3Zl
cnJpZGU7CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlci4KICAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCiAg
ICAgdm9pZCBzZXRWaXNpdGVkTGlua1RhYmxlKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJik7
Ci0gICAgdm9pZCB2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
TGlua0hhc2g+Jik7CisgICAgdm9pZCB2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaD4mKTsKICAgICB2b2lkIGFsbFZpc2l0ZWRMaW5r
U3RhdGVDaGFuZ2VkKCk7CiAgICAgdm9pZCByZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKIAogICAg
IHVpbnQ2NF90IG1faWRlbnRpZmllcjsKLSAgICBWaXNpdGVkTGlua1RhYmxlIG1fdmlzaXRlZExp
bmtUYWJsZTsKKyAgICBTaGFyZWRTdHJpbmdIYXNoVGFibGUgbV92aXNpdGVkTGlua1RhYmxlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9s
bGVyLm1lc3NhZ2VzLmluCmluZGV4IDAzOWRkMzAyMjljMTAyZDdjNjhkZjZmMDk4Nzk1ZDE0ZGFi
NWFjOWUuLmY5MTY0NTNlNDBlNWQwNThkNTljYzU5Y2FjNTNlYzQxMDM4M2IzOWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250
cm9sbGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw3IEBA
CiAKIG1lc3NhZ2VzIC0+IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyIHsKICAgICBTZXRWaXNp
dGVkTGlua1RhYmxlKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlKQotICAgIFZp
c2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKFZlY3RvcjxXZWJDb3JlOjpMaW5rSGFzaD4gbGlua0hhc2hl
cykKKyAgICBWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZChWZWN0b3I8V2ViQ29yZTo6U2hhcmVkU3Ry
aW5nSGFzaD4gbGlua0hhc2hlcykKICAgICBBbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgpCiAg
ICAgUmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaCBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaAppbmRl
eCAxNjRmZWQxZjAwYTYxODlhNDc3NTE5ZWU5M2RkY2FiNTY4M2UxZmI1Li5hZWY0ZmM1MmFhZTQx
MmYzZTZjNGVjZjQwMzk1YjQzZTg3Y2M5NDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oCkBA
IC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYlZpc2l0ZWRMaW5rU3RvcmVfaAogI2RlZmluZSBX
ZWJWaXNpdGVkTGlua1N0b3JlX2gKIAotI2ltcG9ydCA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9TaGFyZWRTdHJpbmdIYXNoLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Zpc2l0
ZWRMaW5rU3RvcmUuaD4KICNpbXBvcnQgPHd0Zi9SZWYuaD4KIApAQCAtNDQsMTQgKzQ0LDE0IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViVmlzaXRlZExpbmtTdG9yZSgpOwogCi0gICAgYm9v
bCBpc0xpbmtWaXNpdGVkKFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpMaW5rSGFzaCwgY29uc3Qg
V2ViQ29yZTo6VVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29y
ZTo6TGlua0hhc2gpIG92ZXJyaWRlOworICAgIGJvb2wgaXNMaW5rVmlzaXRlZChXZWJDb3JlOjpQ
YWdlJiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiBiYXNl
VVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFz
aCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzSWZOZWVkZWQoV2Vi
Q29yZTo6UGFnZSYpOwotICAgIHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoKFdlYkNvcmU6OkxpbmtI
YXNoKTsKKyAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rSGFzaChXZWJDb3JlOjpTaGFyZWRTdHJpbmdI
YXNoKTsKICAgICB2b2lkIHJlbW92ZVZpc2l0ZWRMaW5rSGFzaGVzKCk7CiAKLSAgICBIYXNoU2V0
PFdlYkNvcmU6OkxpbmtIYXNoLCBXZWJDb3JlOjpMaW5rSGFzaEhhc2g+IG1fdmlzaXRlZExpbmtI
YXNoZXM7CisgICAgSGFzaFNldDxXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoLCBXZWJDb3JlOjpT
aGFyZWRTdHJpbmdIYXNoSGFzaD4gbV92aXNpdGVkTGlua0hhc2hlczsKICAgICBib29sIG1fdmlz
aXRlZExpbmtzUG9wdWxhdGVkOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUubW0KaW5kZXgg
YTE1MjkzMzRiMzg2MGY2YjFlNzFkNDA5YTJmMzIwNjhmMmRjN2RmNC4uYjIyMWQ5MzU1YjAzYWRh
OGI2ZWM2NTE4ZjI5Y2ZmY2M4Y2M1ZTQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLm1tCkBA
IC04NCwxOSArODQsMTkgQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGlu
ayhOU1N0cmluZyAqdXJsU3RyaW5nKQogICAgIHNpemVfdCBsZW5ndGggPSB1cmxTdHJpbmcubGVu
Z3RoOwogCiAgICAgaWYgKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gQ0ZTdHJpbmdHZXRDaGFy
YWN0ZXJzUHRyKChfX2JyaWRnZSBDRlN0cmluZ1JlZil1cmxTdHJpbmcpKSB7Ci0gICAgICAgIGFk
ZFZpc2l0ZWRMaW5rSGFzaCh2aXNpdGVkTGlua0hhc2goY2hhcmFjdGVycywgbGVuZ3RoKSk7Cisg
ICAgICAgIGFkZFZpc2l0ZWRMaW5rSGFzaChjb21wdXRlU2hhcmVkU3RyaW5nSGFzaChjaGFyYWN0
ZXJzLCBsZW5ndGgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFZlY3RvcjxVQ2hh
ciwgNTEyPiBidWZmZXIobGVuZ3RoKTsKICAgICBbdXJsU3RyaW5nIGdldENoYXJhY3RlcnM6YnVm
ZmVyLmRhdGEoKV07CiAKLSAgICBhZGRWaXNpdGVkTGlua0hhc2godmlzaXRlZExpbmtIYXNoKGJ1
ZmZlci5kYXRhKCksIGxlbmd0aCkpOworICAgIGFkZFZpc2l0ZWRMaW5rSGFzaChjb21wdXRlU2hh
cmVkU3RyaW5nSGFzaChidWZmZXIuZGF0YSgpLCBsZW5ndGgpKTsKIH0KIAogdm9pZCBXZWJWaXNp
dGVkTGlua1N0b3JlOjpyZW1vdmVWaXNpdGVkTGluayhOU1N0cmluZyAqdXJsU3RyaW5nKQogewot
ICAgIExpbmtIYXNoIGxpbmtIYXNoID0gdmlzaXRlZExpbmtIYXNoKHVybFN0cmluZyk7CisgICAg
YXV0byBsaW5rSGFzaCA9IGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoKHVybFN0cmluZyk7CiAKICAg
ICBBU1NFUlQobV92aXNpdGVkTGlua0hhc2hlcy5jb250YWlucyhsaW5rSGFzaCkpOwogICAgIG1f
dmlzaXRlZExpbmtIYXNoZXMucmVtb3ZlKGxpbmtIYXNoKTsKQEAgLTEwNCwxNCArMTA0LDE0IEBA
IHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlVmlzaXRlZExpbmsoTlNTdHJpbmcgKnVy
bFN0cmluZykKICAgICBpbnZhbGlkYXRlU3R5bGVzRm9yTGluayhsaW5rSGFzaCk7CiB9CiAKLWJv
b2wgV2ViVmlzaXRlZExpbmtTdG9yZTo6aXNMaW5rVmlzaXRlZChQYWdlJiBwYWdlLCBMaW5rSGFz
aCBsaW5rSGFzaCwgY29uc3QgVVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJp
YnV0ZVVSTCkKK2Jvb2wgV2ViVmlzaXRlZExpbmtTdG9yZTo6aXNMaW5rVmlzaXRlZChQYWdlJiBw
YWdlLCBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoLCBjb25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0
IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQogewogICAgIHBvcHVsYXRlVmlzaXRlZExpbmtz
SWZOZWVkZWQocGFnZSk7CiAKICAgICByZXR1cm4gbV92aXNpdGVkTGlua0hhc2hlcy5jb250YWlu
cyhsaW5rSGFzaCk7CiB9CiAKLXZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExp
bmsoUGFnZSYgc291cmNlUGFnZSwgTGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFdlYlZpc2l0ZWRM
aW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rKFBhZ2UmIHNvdXJjZVBhZ2UsIFNoYXJlZFN0cmluZ0hh
c2ggbGlua0hhc2gpCiB7CiAgICAgaWYgKCFzX3Nob3VsZFRyYWNrVmlzaXRlZExpbmtzKQogICAg
ICAgICByZXR1cm47CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0b3Jl
Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rc0lmTmVlZGVkKFBhZ2UmIHBhZ2UpCiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNp
dGVkTGlua0hhc2goTGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6
OmFkZFZpc2l0ZWRMaW5rSGFzaChTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQogewogICAgIEFT
U0VSVChzX3Nob3VsZFRyYWNrVmlzaXRlZExpbmtzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3Jl
LmNwcAppbmRleCA2YjQzYzExMjFhYTU5ZjM3Yzk5Zjk2NzFmMmU3NTdmOTYzM2M2NThiLi4yYTdh
N2Q3ZTU3OGQ0NWNiNzNhNjM4YjI5OGRlZGE4NDZjNzkwNzM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlu
a1N0b3JlLmNwcApAQCAtNzUsMTcgKzc1LDE3IEBAIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6
cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIAogdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjphZGRW
aXNpdGVkTGluayhjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICBhZGRWaXNpdGVkTGlu
a0hhc2godmlzaXRlZExpbmtIYXNoKHVybFN0cmluZykpOworICAgIGFkZFZpc2l0ZWRMaW5rSGFz
aChjb21wdXRlU2hhcmVkU3RyaW5nSGFzaCh1cmxTdHJpbmcpKTsKIH0KIAotYm9vbCBXZWJWaXNp
dGVkTGlua1N0b3JlOjppc0xpbmtWaXNpdGVkKFBhZ2UmIHBhZ2UsIExpbmtIYXNoIGxpbmtIYXNo
LCBjb25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQor
Ym9vbCBXZWJWaXNpdGVkTGlua1N0b3JlOjppc0xpbmtWaXNpdGVkKFBhZ2UmIHBhZ2UsIFNoYXJl
ZFN0cmluZ0hhc2ggbGlua0hhc2gsIGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVVUkwpCiB7CiAgICAgcG9wdWxhdGVWaXNpdGVkTGlua3NJZk5lZWRlZChw
YWdlKTsKIAogICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNvbnRhaW5zKGxpbmtIYXNo
KTsKIH0KIAotdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGluayhQYWdlJiwg
TGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRM
aW5rKFBhZ2UmLCBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQogewogICAgIGlmICghc19zaG91
bGRUcmFja1Zpc2l0ZWRMaW5rcykKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3LDcgKzExNyw3IEBA
IHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6cG9wdWxhdGVWaXNpdGVkTGlua3NJZk5lZWRlZChQ
YWdlJiBzb3VyY2VQYWdlKQogICAgIGhpc3RvcnktPmFkZFZpc2l0ZWRMaW5rc1RvVmlzaXRlZExp
bmtTdG9yZSgqdGhpcyk7CiB9CiAKLXZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRl
ZExpbmtIYXNoKExpbmtIYXNoIGxpbmtIYXNoKQordm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjph
ZGRWaXNpdGVkTGlua0hhc2goU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKICAgICBBU1NF
UlQoc19zaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyk7CiAgICAgbV92aXNpdGVkTGlua0hhc2hlcy5h
ZGQobGlua0hhc2gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oCmluZGV4IGU5ZTEyNDQ0NGY0NDcw
OTRiYTk0NmNkN2I3Njc4ZjA5NWNmNGU0NDkuLjZhN2I5OTIyYzNhMzkxNTIyYzNkYTA0N2U0YTA2
OTczYjQwNGQxMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmgKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpZm5kZWYgV2ViVmlzaXRlZExpbmtTdG9yZV9oCiAjZGVmaW5lIFdlYlZpc2l0ZWRMaW5rU3Rv
cmVfaAogCi0jaW5jbHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U2hhcmVkU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVmlzaXRlZExpbmtTdG9yZS5o
PgogCiBjbGFzcyBXZWJWaXNpdGVkTGlua1N0b3JlIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlZp
c2l0ZWRMaW5rU3RvcmUgewpAQCAtNDIsMTQgKzQyLDE0IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgV2ViVmlzaXRlZExpbmtTdG9yZSgpOwogCi0gICAgYm9vbCBpc0xpbmtWaXNpdGVkKFdlYkNv
cmU6OlBhZ2UmLCBXZWJDb3JlOjpMaW5rSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiBiYXNlVVJM
LCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBh
ZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6TGlua0hhc2gpIG92ZXJyaWRl
OworICAgIGJvb2wgaXNMaW5rVmlzaXRlZChXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVk
U3RyaW5nSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRWaXNpdGVkTGluayhXZWJD
b3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCkgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzSWZOZWVkZWQoV2ViQ29yZTo6UGFnZSYpOwotICAgIHZv
aWQgYWRkVmlzaXRlZExpbmtIYXNoKFdlYkNvcmU6OkxpbmtIYXNoKTsKKyAgICB2b2lkIGFkZFZp
c2l0ZWRMaW5rSGFzaChXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoKTsKICAgICB2b2lkIHJlbW92
ZVZpc2l0ZWRMaW5rSGFzaGVzKCk7CiAKLSAgICBIYXNoU2V0PFdlYkNvcmU6OkxpbmtIYXNoLCBX
ZWJDb3JlOjpMaW5rSGFzaEhhc2g+IG1fdmlzaXRlZExpbmtIYXNoZXM7CisgICAgSGFzaFNldDxX
ZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoLCBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoSGFzaD4g
bV92aXNpdGVkTGlua0hhc2hlczsKICAgICBib29sIG1fdmlzaXRlZExpbmtzUG9wdWxhdGVkOwog
fTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322145</attachid>
            <date>2017-09-28 16:45:33 -0700</date>
            <delta_ts>2017-09-29 14:14:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177575-20170928164532.patch</filename>
            <type>text/plain</type>
            <size>114065</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDE1YjFkZDc1NjUwNTFi
OWQwYjdkM2JhYTBiODkxMGMyZWUxNjk1My4uNzk0ZDdmZmYxY2U1NjZhNzQwNjM4ODhiN2M1MDFh
NmFhZmVlY2NjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE3LTA5LTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgc29tZSBsb2dpYyBv
dXQgb2YgVmlzaXRlZExpbmtTdG9yZSBhbmQgbWFrZSBpdCByZXVzYWJsZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTc1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIExpbmtIYXNoIHRvIFNo
YXJlZFN0cmluZ0hhc2ggdG8gbWFrZSBpdCBtb3JlIHJldXNhYmxlLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKiBkb20vVmlzaXRl
ZExpbmtTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsaW5rSGFzaEZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yTGlu
ayk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3Rh
dGVTbG93Q2FzZSk6CisgICAgICAgICogZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9y
RWxlbWVudDo6dmlzaXRlZExpbmtIYXNoIGNvbnN0KToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlD
bGllbnRzLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkVmlzaXRlZExpbmspOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayk6CisgICAg
ICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RvcmU6OmludmFsaWRhdGVTdHlsZXNGb3JM
aW5rKToKKyAgICAgICAgKiBwYWdlL1Zpc2l0ZWRMaW5rU3RvcmUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9TaGFyZWRTdHJpbmdIYXNoLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xpbmtIYXNoLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Om5lZWRzVHJhaWxpbmdTbGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2hhcmVkU3RyaW5nSGFzaCk6CisgICAgICAgICogcGxh
dGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTGlua0hhc2guaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2hIYXNo
OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2hIYXNoOjplcXVhbCk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoSGFzaDo6YXZvaWREZWxldGVkVmFs
dWUpOgorCiAyMDE3LTA5LTI4ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgVGV4dFJ1bjo6c2V0Q2hhcmFjdGVyc0xlbmd0aCgpIGFuZCBUZXh0UnVu
OjpjaGFyYWN0ZXJzTGVuZ3RoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNTVlM2VmN2Y2YzY1MmQ2OTFiY2Q5YWIx
ZjgzOTVjMGMxZTFiYjYyYS4uMDhmYTAyZmIzY2IwZGUxNDdmOTZlMjJiODBmNDgxNjFhZGRmNTEy
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxNy0wOS0yOCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IHNvbWUgbG9naWMgb3V0IG9mIFZpc2l0
ZWRMaW5rU3RvcmUgYW5kIG1ha2UgaXQgcmV1c2FibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzU3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IHNvbWUgbG9naWMgb3V0IG9mIFZpc2l0ZWRM
aW5rU3RvcmUgYW5kIG1ha2UgaXQgcmV1c2FibGUgZm9yIG90aGVyIHB1cnBvc2VzIHRoYW4KKyAg
ICAgICAgdmlzaXRlZCBsaW5rcyBhbmQgZnJvbSBvdGhlciBwcm9jZXNzZXMgdGhhbiB0aGUgVUlQ
cm9jZXNzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIHJldXNlIHRoZSBuZXcgU2hhcmVkU3Ry
aW5nSGFzaFN0b3JlIGZvciBTZXJ2aWNlIFdvcmtlciByZWdpc3RyYXRpb24KKyAgICAgICAgb24g
U3RvcmFnZVByb2Nlc3Mgc2lkZSBhbmQgcXVlcnlpbmcgb24gV2ViQ29udGVudCBwcm9jZXNzIHNp
ZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVk
U3RyaW5nSGFzaFN0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Om5leHRQb3dlck9m
Mik6CisgICAgICAgIChXZWJLaXQ6OnRhYmxlU2l6ZUZvcktleUNvdW50KToKKyAgICAgICAgKFdl
YktpdDo6U2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpTaGFyZWRTdHJpbmdIYXNoU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpTaGFyZWRTdHJpbmdIYXNoU3RvcmU6OmNyZWF0ZVNoYXJlZE1lbW9yeUhh
bmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6YWRkKToKKyAg
ICAgICAgKFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpjbGVhcik6CisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6cmVzaXplVGFibGUpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWRTdHJpbmdIYXNoU3RvcmU6OnBlbmRpbmdTaGFyZWRTdHJpbmdIYXNoZXNUaW1l
ckZpcmVkKToKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyLmguCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6Q2xp
ZW50Ojp+Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpp
c0VtcHR5IGNvbnN0KToKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1Zpc2l0ZWRMaW5rVGFibGUuY3Bw
LgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRTdHJpbmdIYXNoVGFibGU6OlNoYXJlZFN0cmluZ0hh
c2hUYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hUYWJsZTo6flNoYXJl
ZFN0cmluZ0hhc2hUYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZFN0cmluZ0hhc2hUYWJs
ZTo6c2V0U2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFRh
YmxlOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmNvbnRh
aW5zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkU3RyaW5nSGFzaFRhYmxlOjpjbGVh
cik6CisgICAgICAgICogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZS5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9TaGFyZWQvVmlzaXRlZExpbmtUYWJsZS5oLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0QWRkVmlzaXRl
ZExpbmspOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVmlzaXRlZExpbmtTdG9y
ZS5tbToKKyAgICAgICAgKC1bX1dLVmlzaXRlZExpbmtTdG9yZSBhZGRWaXNpdGVkTGlua1dpdGhV
Ukw6XSk6CisgICAgICAgICogVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpWaXNpdGVkTGlua1N0b3JlOjpWaXNpdGVkTGlua1N0b3JlKToKKyAgICAgICAg
KFdlYktpdDo6VmlzaXRlZExpbmtTdG9yZTo6YWRkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgIChXZWJLaXQ6
OlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZUFsbCk6CisgICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRM
aW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rSGFzaEZyb21QYWdlKToKKyAgICAgICAgKFdlYktpdDo6
VmlzaXRlZExpbmtTdG9yZTo6c2VuZFN0b3JlSGFuZGxlVG9Qcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6VmlzaXRlZExpbmtTdG9yZTo6ZGlkSW52YWxpZGF0ZVNoYXJlZE1lbW9yeSk6CisgICAg
ICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OmRpZEFkZFNoYXJlZFN0cmluZ0hhc2hlcyk6
CisgICAgICAgICogVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAg
KiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6aXNMaW5rVmlzaXRlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjphZGRWaXNpdGVkTGluayk6CisgICAg
ICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjp2aXNpdGVkTGlua1N0YXRl
Q2hhbmdlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFi
bGVDb250cm9sbGVyLm1lc3NhZ2VzLmluOgorCiAyMDE3LTA5LTI4ICBUaW1vdGh5IEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpc2UgZGVwbG95bWVudCB0
YXJnZXQgbWFjcm9zIGZyb20gcjIyMjYyMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4
IDdjMGNmZTZmMzEzNTA3ZWM1Yjg4ZDE4ZGU4ZmEzNjNmZmFmN2Q1ZWMuLjAzODM5YThlYWY4MTBi
YjRlY2YyZWI5Yjk5MWNjMjZlNGVjMjZjYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxNy0wOS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCisgICAgICAgIFNwbGl0IHNvbWUgbG9naWMgb3V0IG9mIFZpc2l0ZWRMaW5rU3RvcmUg
YW5kIG1ha2UgaXQgcmV1c2FibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NzU3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUubW06CisgICAgICAgIChX
ZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGluayk6CisgICAgICAgIChXZWJWaXNpdGVk
TGlua1N0b3JlOjpyZW1vdmVWaXNpdGVkTGluayk6CisgICAgICAgIChXZWJWaXNpdGVkTGlua1N0
b3JlOjppc0xpbmtWaXNpdGVkKToKKyAgICAgICAgKFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZp
c2l0ZWRMaW5rSGFzaCk6CisKIDIwMTctMDktMjggIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRA
YXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgSGlnaCBTaWVycmEgMzIgYml0IE1h
YwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IDhkZjVkOGM1MWVlYmI0Njc3NGExN2M1
NzVlMjg3YTZlNjg0ZGJkYWYuLjc2NzU5ODQzOGI4MGRkZDY4OGNhOTIwOGMxY2Y4ZjExOWViN2I4
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0w
OS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IHNv
bWUgbG9naWMgb3V0IG9mIFZpc2l0ZWRMaW5rU3RvcmUgYW5kIG1ha2UgaXQgcmV1c2FibGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzU3NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5jcHA6CisgICAgICAgIChXZWJWaXNpdGVkTGlua1N0
b3JlOjphZGRWaXNpdGVkTGluayk6CisgICAgICAgIChXZWJWaXNpdGVkTGlua1N0b3JlOjppc0xp
bmtWaXNpdGVkKToKKyAgICAgICAgKFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5r
SGFzaCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oOgor
CiAyMDE3LTA5LTI1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgTWFrZSBQb2xpY3lBY3Rpb24gYW4gZW5jb2RhYmxlIGVudW0gY2xhc3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggMWUzOWQyOWE3ODhhYTkyYWZlZDIwYmE1MzA1YjI2OTY2NDQ2
ZDQ4Ni4uNGViN2M2NTEyZTgwMWVjZDI4ZDk0MDFhMmMwOTJmOWQzMzM4ODc0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTIzMjMsNyArMjMyMyw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9MZW5ndGhCb3guY3BwCiAgICAgcGxhdGZvcm0vTGVuZ3RoUG9pbnQuY3BwCiAg
ICAgcGxhdGZvcm0vTGVuZ3RoU2l6ZS5jcHAKLSAgICBwbGF0Zm9ybS9MaW5rSGFzaC5jcHAKICAg
ICBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmNwcAogICAgIHBsYXRmb3JtL0xvZ2dpbmcuY3Bw
CiAgICAgcGxhdGZvcm0vTG93UG93ZXJNb2RlTm90aWZpZXIuY3BwCkBAIC0yMzQ3LDYgKzIzNDYs
NyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUuY3BwCiAgICAgcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAogICAgIHBsYXRmb3JtL1No
YXJlZEJ1ZmZlckNodW5rUmVhZGVyLmNwcAorICAgIHBsYXRmb3JtL1NoYXJlZFN0cmluZ0hhc2gu
Y3BwCiAgICAgcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKICAgICBwbGF0Zm9ybS9UaGVt
ZS5jcHAKICAgICBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI1MTQxY2JhY2U4
MDI0OTJlMzg1ZGJiOWQyNWU5NTFkMjg1NGMxYzEuLjlmODc5OTc3MWM1Njk3NjVjOWEyN2EzZWIw
NDIxMTRmODU3Mzk4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTM0OTgsNiArMzQ5OCw4IEBACiAJCTgzNDhCRkFCMUI4NTcy
OTgwMDkxMkYzNiAvKiBDbGFzc0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0OEJGQTkxQjg1NzI5NTAwOTEyRjM2IC8qIENsYXNz
Q29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTgzNDhCRkFDMUI4NTcyOTgwMDkxMkYzNiAvKiBDbGFz
c0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDgzNDhCRkFBMUI4NTcyOTUwMDkxMkYzNiAvKiBDbGFzc0NvbGxlY3Rpb24uaCAqLzsgfTsK
IAkJODM0REQ0RjQxQkUwODk4OTAwMkM5QzNFIC8qIFBhZ2VNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRERDRGMzFCRTA4OTg5MDAyQzlDM0Ug
LyogUGFnZU1hYy5tbSAqLzsgfTsKKwkJODM0REZBQ0YxRjdEQUU1RDAwQzI3MjVCIC8qIFNoYXJl
ZFN0cmluZ0hhc2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODM0REZBQ0UxRjdEQUU1NzAwQzI3MjVCIC8qIFNoYXJlZFN0cmluZ0hhc2guY3BwICov
OyB9OworCQk4MzRERkFEMDFGN0RBRTVEMDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0REZBQ0MxRjdE
QUU1NjAwQzI3MjVCIC8qIFNoYXJlZFN0cmluZ0hhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4MzUyMEM3RTFBNzFCRkNDMDA2QkQyQUEgLyog
Q1NTRm9udEZhbWlseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODM1MjBDN0QxQTcxQkZDQzAwNkJEMkFBIC8qIENTU0ZvbnRGYW1pbHkuaCAqLzsgfTsK
IAkJODM1NjU3QzcxRUNBQjEwNzAwQ0RFNzJEIC8qIEpTRE9NTWF0cml4SW5pdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzU2NTdDNjFFQ0FCMEU4
MDBDREU3MkQgLyogSlNET01NYXRyaXhJbml0LmNwcCAqLzsgfTsKIAkJODM1OENCNkYxQzUzMjc3
MjAwRTBDMkQ4IC8qIEpTWE1MRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODNGNTcwQUUxQzUzMjY4RTAwN0ZENkNCIC8qIEpTWE1MRG9j
dW1lbnQuY3BwICovOyB9OwpAQCAtNDY3MCw4ICs0NjcyLDYgQEAKIAkJQTc5QkFEQTMxNjFFN0Yz
RjAwQzJFNjUyIC8qIFJ1bGVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc5QkFEOUYxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuY3BwICov
OyB9OwogCQlBNzlCQURBNDE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc5QkFEQTAxNjFFN0YzRjAwQzJF
NjUyIC8qIFJ1bGVTZXQuaCAqLzsgfTsKIAkJQTdBNzhDRDUxNTMyQkE2MjAwNkMyMUU0IC8qIENv
bnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QTc4Q0Q0MTUzMkJBNjIwMDZDMjFFNCAvKiBDb250YWluZXJOb2Rl
QWxnb3JpdGhtcy5jcHAgKi87IH07Ci0JCUE3QUQyRjg3MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5r
SGFzaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0FEMkY4NTBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guY3BwICovOyB9OwotCQlBN0FEMkY4
ODBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QUQyRjg2MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFz
aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
QjZFNjlGMEIyOTFBOTYwMEQwNTI5RiAvKiBEcmFnRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNkU2OUQwQjI5MUE5NjAwRDA1MjlGIC8qIERy
YWdEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTdCQkUyNjYxMUFGQjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1ldGVyRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JCRTI2NDExQUZC
M0YyMDAwNUVBMDMgLyogSlNIVE1MTWV0ZXJFbGVtZW50LmNwcCAqLzsgfTsKIAkJQTdCQkUyNjcx
MUFGQjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1ldGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCQkUyNjUxMUFGQjNGMjAwMDVFQTAzIC8q
IEpTSFRNTE1ldGVyRWxlbWVudC5oICovOyB9OwpAQCAtMTE3NzMsNiArMTE3NzMsOCBAQAogCQk4
MzRCODZBODFDNTZFOTNFMDBGM0YwRTMgLyogSlNIVE1MRGF0YUVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MRGF0YUVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODM0Qjg2QTkxQzU2RTkzRTAwRjNGMEUzIC8qIEpTSFRNTERhdGFF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTERh
dGFFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM0REQ0RjMxQkUw
ODk4OTAwMkM5QzNFIC8qIFBhZ2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBQYWdlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzRE
RkFDQzFGN0RBRTU2MDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRTdHJpbmdIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTgzNERGQUNFMUY3REFFNTcwMEMyNzI1QiAvKiBTaGFyZWRTdHJpbmdIYXNo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZFN0cmluZ0hh
c2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzUwQzNFNzFEQTU5QjYyMDAz
NTY0NDYgLyogU2Nyb2xsVG9PcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcm9sbFRvT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzUw
QzNFODFEQTU5QjYyMDAzNTY0NDYgLyogU2Nyb2xsVG9PcHRpb25zLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBTY3JvbGxUb09wdGlvbnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4MzUyMEM3RDFBNzFCRkNDMDA2QkQyQUEgLyogQ1NTRm9udEZhbWlseS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250RmFtaWx5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzE0Nyw4ICsxMzE0OSw2IEBACiAJCUE3OUJBRDlGMTYxRTdGM0Yw
MEMyRTY1MiAvKiBSdWxlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJ1bGVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzlCQURBMDE2
MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSdWxlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTc4Q0Q0MTUz
MkJBNjIwMDZDMjFFNCAvKiBDb250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3QUQyRjg1MEVDODlEMDcwMDhBQjAwMiAvKiBM
aW5rSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5rSGFz
aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3QUQyRjg2MEVDODlEMDcwMDhB
QjAwMiAvKiBMaW5rSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5r
SGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0RUE2ODE0QzkzNDg0MDBD
OEY1QkYgLyogSlNNYWxsb2NTdGF0aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTTWFsbG9jU3RhdGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3QjRFQTY5MTRDOTM0ODQwMEM4RjVCRiAvKiBKU01hbGxvY1N0YXRpc3RpY3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNYWxsb2NTdGF0aXN0aWNzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QjRFQTc4MTRDOTM0ODQwMEM4RjVCRiAv
KiBKU0ludGVybmFsU2V0dGluZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNJbnRlcm5hbFNldHRpbmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI0NjIwLDggKzI0NjIwLDYgQEAKIAkJCQkwRjg3MTY2RTFDODY5RDgzMDA0RkYwREUgLyog
TGVuZ3RoUG9pbnQuaCAqLywKIAkJCQkwRkVGMjBDRDFCRDRBMjQxMDAxMjhFNUQgLyogTGVuZ3Ro
U2l6ZS5jcHAgKi8sCiAJCQkJQkNGRjY0OTAwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aFNpemUu
aCAqLywKLQkJCQlBN0FEMkY4NTBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guY3BwICovLAot
CQkJCUE3QUQyRjg2MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5oICovLAogCQkJCTUxNDNC
MjYyMURERDE0OTAwMDE0RkFDNiAvKiBMaW5rSWNvbi5oICovLAogCQkJCUMwNDZFMUFCMTIwOEE5
RkUwMEJBMkNGNyAvKiBMb2NhbGl6ZWRTdHJpbmdzLmNwcCAqLywKIAkJCQk5MzUyMDdCRDA5QkQ0
MTBBMDBGMjAzOEQgLyogTG9jYWxpemVkU3RyaW5ncy5oICovLApAQCAtMjQ2OTUsNiArMjQ2OTMs
OCBAQAogCQkJCTA3N0FGMTNFMThGNEFFNDAwMDAxRUQ2MSAvKiBTZXJpYWxpemVkUGxhdGZvcm1S
ZXByZXNlbnRhdGlvbi5oICovLAogCQkJCTFBNEE5NTRCMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFy
ZWRCdWZmZXIuY3BwICovLAogCQkJCTFBNEE5NTRDMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRC
dWZmZXIuaCAqLywKKwkJCQk4MzRERkFDRTFGN0RBRTU3MDBDMjcyNUIgLyogU2hhcmVkU3RyaW5n
SGFzaC5jcHAgKi8sCisJCQkJODM0REZBQ0MxRjdEQUU1NjAwQzI3MjVCIC8qIFNoYXJlZFN0cmlu
Z0hhc2guaCAqLywKIAkJCQk5MzMwOUVBMDA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXIu
aCAqLywKIAkJCQlGNTg3ODY2MjAyREUzQjExMDFFQTQxMjIgLyogU1NMS2V5R2VuZXJhdG9yLmgg
Ki8sCiAJCQkJRjQzM0U5MDQxREJCREJDMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQuY3Bw
ICovLApAQCAtMjkxNTEsNyArMjkxNTEsNiBAQAogCQkJCTg5QjVFQUEyMTFFODAwM0QwMEYyMzY3
RSAvKiBMaW5lRW5kaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRkVGQUIyQTE4MzgwREEwMDA1
MTQ1MzQgLyogTGluZUxheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRkRCQzA0NzE4
M0QyN0I3MDA0MDcxMDkgLyogTGluZVdpZHRoLmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0FEMkY4
ODBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUNCQTlE
QzBCMURGNDRERjQwMDA1Njc1QyAvKiBMaW5rSGVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTQzQjI2MzFEREQxNTIwMDAxNEZBQzYgLyogTGlua0ljb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBNERBNDIyMUNERDNBODMwMEY0NDczQyAvKiBMaW5rSWNvbkNvbGxlY3Rvci5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMDAwNyw2ICszMDAwNiw3IEBACiAJCQkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIx
RUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMUFGMTUwMTY1
NkYxNTEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBOTU0
RTBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk4
MzRERkFEMDFGN0RBRTVEMDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDg5NDRBMzE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTFFMDY3RUUxRTYyNDZFNTAwMTYyRDE2IC8qIFNpbXBs
ZUxpbmVMYXlvdXRDb3ZlcmFnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzIyNiw3ICszMzIyNiw2
IEBACiAJCQkJODlCNUVBQTExMUU4MDAzRDAwRjIzNjdFIC8qIExpbmVFbmRpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkZCNjk4Q0YxODM0MDJCQjAwMTU4QTMxIC8qIExpbmVJbmZvLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZGREJDMDQ4MTgzRDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lkdGgu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTdBRDJGODcwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtI
YXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNCQTlEQzBBMURGNDRERjEwMDA1Njc1QyAvKiBM
aW5rSGVhZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNERBNDIxMUNERDNBODMwMEY0NDcz
QyAvKiBMaW5rSWNvbkNvbGxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OENFNDMyNjEy
OUUwMEJEMDA1ODIxREMgLyogTGlua0xvYWRlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzOTE2
LDYgKzMzOTE1LDcgQEAKIAkJCQkxQTRBOTU0RDBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVm
ZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkREOEUzMEQ5MUUyQjQwMDBGODlFRSAvKiBT
aGFyZWRCdWZmZXJDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAy
RDhDM0MgLyogU2hhcmVkQnVmZmVyQ29jb2EubW0gaW4gU291cmNlcyAqLywKKwkJCQk4MzRERkFD
RjFGN0RBRTVEMDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNjNFODhGNzExOEEzOUQyMDBFRDkyMzEgLyogU2ltcGxlRm9udERhdGFDb3JlVGV4dC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDg5NDRBMjE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxl
TGluZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxMUUwNjdFQzFFNjI0NjEzMDAxNjJE
MTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDM1MDBhMDE4MTk5NTJhNGNhNjAwODI2MTY1
OWE2YWU5Njg4MjhhZjYuLjE5NjM2MjIzMjdjNDc1ZDNjMDRjODY2MDNiNjc1YTUwZDVhOWJjNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTY2LDcgKzY2LDYgQEAKICNp
bmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCi0jaW5jbHVkZSAiTGlua0hh
c2guaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5oIgog
I2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCkBAIC04OSw2ICs4OCw3IEBACiAjaW5jbHVkZSAiU1ZH
VVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dS
b290LmgiCisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlN0eWxlQnVp
bGRlci5oIgogI2luY2x1ZGUgIlN0eWxlQ29sb3IuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZElt
YWdlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKaW5kZXggNTkyMGJk
YWRjZGNlMGE0YmQ0M2IxNTQ4NzM4NmJkMzU0NDM0MTA2Ni4uYzM5OTNkNjUzNWRhNWYzOTZkMmFi
M2ZhZWVkNzhjY2EwYTJkM2FlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0
ZWRMaW5rU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRl
LmNwcApAQCAtNjYsMTYgKzY2LDE2IEBAIHZvaWQgVmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0
ZVN0eWxlRm9yQWxsTGlua3MoKQogICAgIH0KIH0KIAotaW5saW5lIHN0YXRpYyBMaW5rSGFzaCBs
aW5rSGFzaEZvckVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQoraW5saW5lIHN0YXRpYyBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoRm9yRWxlbWVudChE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKGlz
PEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxBbmNob3JFbGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsKICAgICBpZiAoY29u
c3QgQXRvbWljU3RyaW5nKiBhdHRyaWJ1dGUgPSBsaW5rQXR0cmlidXRlKGVsZW1lbnQpKQotICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoKGRvY3VtZW50LmJhc2VVUkwoKSwg
KmF0dHJpYnV0ZSk7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpjb21wdXRlU2hhcmVkU3RyaW5n
SGFzaChkb2N1bWVudC5iYXNlVVJMKCksICphdHRyaWJ1dGUpOwogICAgIHJldHVybiAwOwogfQog
Ci12b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckxpbmsoTGlua0hhc2gg
bGlua0hhc2gpCit2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckxpbmso
U2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKICAgICBpZiAoIW1fbGlua3NDaGVja2VkRm9y
VmlzaXRlZFN0YXRlLmNvbnRhaW5zKGxpbmtIYXNoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTgs
MTEgKzk4LDExIEBAIEVJbnNpZGVMaW5rIFZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtT
dGF0ZVNsb3dDYXNlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgaWYgKGF0dHJpYnV0ZS0+
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gSW5zaWRlVmlzaXRlZExpbms7CiAKLSAgICBMaW5r
SGFzaCBoYXNoOworICAgIFNoYXJlZFN0cmluZ0hhc2ggaGFzaDsKICAgICBpZiAoaXM8SFRNTEFu
Y2hvckVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICBoYXNoID0gZG93bmNhc3Q8SFRNTEFuY2hv
ckVsZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5rSGFzaCgpOwogICAgIGVsc2UKLSAgICAgICAg
aGFzaCA9IFdlYkNvcmU6OnZpc2l0ZWRMaW5rSGFzaChlbGVtZW50LmRvY3VtZW50KCkuYmFzZVVS
TCgpLCAqYXR0cmlidXRlKTsKKyAgICAgICAgaGFzaCA9IFdlYkNvcmU6OmNvbXB1dGVTaGFyZWRT
dHJpbmdIYXNoKGVsZW1lbnQuZG9jdW1lbnQoKS5iYXNlVVJMKCksICphdHRyaWJ1dGUpOwogCiAg
ICAgaWYgKCFoYXNoKQogICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5oCmluZGV4IDJhMTQyYWQ4NjZhNDVkOTYxOTczMzFj
MDVjMjkyYTYwYTgzOWNjZjguLmNjOWU1ZWM0N2E2NjZlNTgxM2JiNWYwYmY3M2ZmZjcyOGM3YWZk
OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaApAQCAtMjksOCArMjksOCBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiTGlua0hh
c2guaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgorI2luY2x1ZGUgIlNoYXJl
ZFN0cmluZ0hhc2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00MywxNCArNDMsMTQgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFZpc2l0ZWRM
aW5rU3RhdGUoRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlu
a3MoKTsKLSAgICB2b2lkIGludmFsaWRhdGVTdHlsZUZvckxpbmsoTGlua0hhc2gpOworICAgIHZv
aWQgaW52YWxpZGF0ZVN0eWxlRm9yTGluayhTaGFyZWRTdHJpbmdIYXNoKTsKICAgICBFSW5zaWRl
TGluayBkZXRlcm1pbmVMaW5rU3RhdGUoY29uc3QgRWxlbWVudCYpOwogCiBwcml2YXRlOgogICAg
IEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKGNvbnN0IEVsZW1lbnQmKTsK
IAogICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwotICAgIEhhc2hTZXQ8TGlua0hhc2gsIExpbmtI
YXNoSGFzaD4gbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGU7CisgICAgSGFzaFNldDxTaGFy
ZWRTdHJpbmdIYXNoLCBTaGFyZWRTdHJpbmdIYXNoSGFzaD4gbV9saW5rc0NoZWNrZWRGb3JWaXNp
dGVkU3RhdGU7CiB9OwogCiBpbmxpbmUgRUluc2lkZUxpbmsgVmlzaXRlZExpbmtTdGF0ZTo6ZGV0
ZXJtaW5lTGlua1N0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmgKaW5kZXggYTdiYzYwOTllMTI1OTFlNTJhNzBjMWI1Y2NjZGIz
YmQ3MDA4NTRmNS4uZTRlNGEzZGNkYzVhNmE5MWY4NWY0OTU3MjZjZGZhNTE3NDg3Mzg0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaApAQCAtMjUsNyArMjUsNyBAQAog
CiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNs
dWRlICJMaW5rSGFzaC5oIgorI2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2guaCIKICNpbmNsdWRl
ICJVUkxVdGlscy5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtNjIsNyArNjIs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1JlbChSZWxhdGlvbikgY29uc3Q7CiAgICAgCi0g
ICAgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKCkgY29uc3Q7CisgICAgU2hhcmVkU3RyaW5nSGFz
aCB2aXNpdGVkTGlua0hhc2goKSBjb25zdDsKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZWRWaXNp
dGVkTGlua0hhc2goKSB7IG1fY2FjaGVkVmlzaXRlZExpbmtIYXNoID0gMDsgfQogCiAgICAgV0VC
Q09SRV9FWFBPUlQgRE9NVG9rZW5MaXN0JiByZWxMaXN0KCk7CkBAIC0xMDQsMTUgKzEwNCwxNSBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNSb290RWRpdGFibGVFbGVtZW50Rm9yU2VsZWN0aW9u
T25Nb3VzZURvd247CiAgICAgYm9vbCBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duOwogICAg
IE9wdGlvblNldDxSZWxhdGlvbj4gbV9saW5rUmVsYXRpb25zOwotICAgIG11dGFibGUgTGlua0hh
c2ggbV9jYWNoZWRWaXNpdGVkTGlua0hhc2g7CisgICAgbXV0YWJsZSBTaGFyZWRTdHJpbmdIYXNo
IG1fY2FjaGVkVmlzaXRlZExpbmtIYXNoOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERPTVRva2Vu
TGlzdD4gbV9yZWxMaXN0OwogfTsKIAotaW5saW5lIExpbmtIYXNoIEhUTUxBbmNob3JFbGVtZW50
Ojp2aXNpdGVkTGlua0hhc2goKSBjb25zdAoraW5saW5lIFNoYXJlZFN0cmluZ0hhc2ggSFRNTEFu
Y2hvckVsZW1lbnQ6OnZpc2l0ZWRMaW5rSGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NhY2hl
ZFZpc2l0ZWRMaW5rSGFzaCkKLSAgICAgICAgbV9jYWNoZWRWaXNpdGVkTGlua0hhc2ggPSBXZWJD
b3JlOjp2aXNpdGVkTGlua0hhc2goZG9jdW1lbnQoKS5iYXNlVVJMKCksIGF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpocmVmQXR0cikpOworICAgICAgICBtX2NhY2hl
ZFZpc2l0ZWRMaW5rSGFzaCA9IFdlYkNvcmU6OmNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoKGRvY3Vt
ZW50KCkuYmFzZVVSTCgpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1l
czo6aHJlZkF0dHIpKTsKICAgICByZXR1cm4gbV9jYWNoZWRWaXNpdGVkTGlua0hhc2g7IAogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCmluZGV4IDFiOTk4OWM0NjA2NTY2
OGExMWRjNzZlYzQxMWQ4ZmZhNTc5NWVjMTIuLjEzMTgzMzBkMjVkNGQ2NzMwZGFjMDQ1OGZlNDEy
YWQ1NWE4ZWYwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVu
dHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCkBAIC01
NjcsOCArNTY3LDggQEAgY2xhc3MgRW1wdHlVc2VyQ29udGVudFByb3ZpZGVyIGZpbmFsIDogcHVi
bGljIFVzZXJDb250ZW50UHJvdmlkZXIgewogfTsKIAogY2xhc3MgRW1wdHlWaXNpdGVkTGlua1N0
b3JlIGZpbmFsIDogcHVibGljIFZpc2l0ZWRMaW5rU3RvcmUgewotICAgIGJvb2wgaXNMaW5rVmlz
aXRlZChQYWdlJiwgTGlua0hhc2gsIGNvbnN0IFVSTCYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGluayhQYWdlJiwgTGlu
a0hhc2gpIGZpbmFsIHsgfQorICAgIGJvb2wgaXNMaW5rVmlzaXRlZChQYWdlJiwgU2hhcmVkU3Ry
aW5nSGFzaCwgY29uc3QgVVJMJiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWwgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rKFBhZ2UmLCBTaGFyZWRTdHJpbmdIYXNo
KSBmaW5hbCB7IH0KIH07CiAKIFJlZlB0cjxQb3B1cE1lbnU+IEVtcHR5Q2hyb21lQ2xpZW50Ojpj
cmVhdGVQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50JikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCmluZGV4IDAzYzY1M2I0ZDY2ZjA4MTA5YjcxZWMz
ZmViZTNhMTViY2Q1MmQ2YjIuLjJiYWM4YTgyOGQwYzMzZGNkZDQ0ZTBjMWJjMmRmYTQyOTFiODZi
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcApAQCAt
NDEsMTMgKzQxLDEzIEBACiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKLSNpbmNsdWRlICJMaW5rSGFzaC5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJT
aGFyZWRTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdG9yZS5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRWaXNpdGVkTGluayhQYWdlJiBwYWdlLCBj
b25zdCBVUkwmIHVybCkKIHsKLSAgICBwYWdlLnZpc2l0ZWRMaW5rU3RvcmUoKS5hZGRWaXNpdGVk
TGluayhwYWdlLCB2aXNpdGVkTGlua0hhc2godXJsLnN0cmluZygpKSk7CisgICAgcGFnZS52aXNp
dGVkTGlua1N0b3JlKCkuYWRkVmlzaXRlZExpbmsocGFnZSwgY29tcHV0ZVNoYXJlZFN0cmluZ0hh
c2godXJsLnN0cmluZygpKSk7CiB9CiAKIEhpc3RvcnlDb250cm9sbGVyOjpIaXN0b3J5Q29udHJv
bGxlcihGcmFtZSYgZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA5MTgyYmM5YTQ5OGFmZmI4
N2QyOTA3MmJjYWI1ZmQ4YTM3NGRkMzVkLi5kYmUyODUxY2M2NjE5ODA0Mjk0YjNkN2RlNWM2ZDgw
NGI2ZDcyZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEyMDEsNyArMTIwMSw3IEBAIHZvaWQg
UGFnZTo6aW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKCkKICAgICB9CiB9CiAKLXZvaWQgUGFn
ZTo6aW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsoTGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFBhZ2U6
OmludmFsaWRhdGVTdHlsZXNGb3JMaW5rKFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCiB7CiAg
ICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgaWYgKCFmcmFtZS0+ZG9j
dW1lbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggMjRmNTBkYmE3NGJmNTRiYWU4ZGM1ODhlYjM5ZmEw
OWZlYzNlNTA2ZC4uMDIzYTJiMGJmNzk5YWU0NDQyMTlhZjIyMTZjNjA3OGE4NmQ2ZmUxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgKQEAgLTEzMSw3ICsxMzEsNyBAQCBjbGFzcyBBY3Rpdml0eVN0YXRlQ2hhbmdl
T2JzZXJ2ZXI7CiBjbGFzcyBWaXNpdGVkTGlua1N0b3JlOwogY2xhc3MgV2ViR0xTdGF0ZVRyYWNr
ZXI7CiAKLXR5cGVkZWYgdWludDY0X3QgTGlua0hhc2g7Cit0eXBlZGVmIHVpbnQ2NF90IFNoYXJl
ZFN0cmluZ0hhc2g7CiAKIGVudW0gRmluZERpcmVjdGlvbiB7CiAgICAgRmluZERpcmVjdGlvbkZv
cndhcmQsCkBAIC0zOTgsNyArMzk4LDcgQEAgcHVibGljOgogICAgIEpTQzo6RGVidWdnZXIqIGRl
YnVnZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlcjsgfQogCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlua3MoKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGludmFsaWRhdGVTdHlsZXNGb3JMaW5rKExpbmtIYXNoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGludmFsaWRhdGVTdHlsZXNGb3JMaW5rKFNoYXJlZFN0cmluZ0hhc2gpOwogCiAg
ICAgdm9pZCBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lcygpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcAppbmRleCA5NzNiNzhlZTYz
OGY3M2JhMTI1NDQzZTAwNTBhOWEwNTllYjc3ODljLi5kN2E1OGI1ZWYyYzZlZWI1ZDdkOGE4MjNk
NTBiZjk4OTQ5ZmE0NTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Zpc2l0ZWRM
aW5rU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzaXRlZExpbmtTdG9yZS5j
cHAKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3JlOjppbnZhbGlkYXRlU3R5
bGVzRm9yQWxsTGlua3MoKQogICAgICAgICBwYWdlLT5pbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlu
a3MoKTsKIH0KIAotdm9pZCBWaXNpdGVkTGlua1N0b3JlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGlu
ayhMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQgVmlzaXRlZExpbmtTdG9yZTo6aW52YWxpZGF0ZVN0
eWxlc0ZvckxpbmsoU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKICAgICBmb3IgKGF1dG8m
IHBhZ2UgOiBtX3BhZ2VzKQogICAgICAgICBwYWdlLT5pbnZhbGlkYXRlU3R5bGVzRm9yTGluayhs
aW5rSGFzaCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Zpc2l0ZWRMaW5rU3Rv
cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzaXRlZExpbmtTdG9yZS5oCmluZGV4IDQ0MTMw
NmE0NzRiZGMwYTNiZGUwNGU3Y2ZjZGY0NGM0NWE3OGY2MjkuLjQzYzM1MTM3MmQ2MThiNjgxMDli
MGZiOGNjZDY5ZmM4NWY4YmRkNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlz
aXRlZExpbmtTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzaXRlZExpbmtTdG9y
ZS5oCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiB1
aW50NjRfdCBMaW5rSGFzaDsKK3R5cGVkZWYgdWludDY0X3QgU2hhcmVkU3RyaW5nSGFzaDsKIGNs
YXNzIFBhZ2U7CiBjbGFzcyBVUkw7CiAKQEAgLTQxLDE0ICs0MSwxNCBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+VmlzaXRlZExpbmtTdG9yZSgpOwogCiAgICAgLy8gRklY
TUU6IFRoZXNlIHR3byBtZW1iZXJzIHNob3VsZCBvbmx5IHRha2UgdGhlIGxpbmsgaGFzaC4KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hhc2gsIGNvbnN0IFVSTCYg
YmFzZVVSTCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRkVmlzaXRlZExpbmsoUGFnZSYsIExpbmtIYXNoKSA9IDA7CisgICAgdmlydHVh
bCBib29sIGlzTGlua1Zpc2l0ZWQoUGFnZSYsIFNoYXJlZFN0cmluZ0hhc2gsIGNvbnN0IFVSTCYg
YmFzZVVSTCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkVmlzaXRlZExpbmsoUGFnZSYsIFNoYXJlZFN0cmluZ0hhc2gpID0gMDsKIAog
ICAgIHZvaWQgYWRkUGFnZShQYWdlJik7CiAgICAgdm9pZCByZW1vdmVQYWdlKFBhZ2UmKTsKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVzRm9yTGluayhMaW5rSGFzaCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVzRm9yTGluayhTaGFyZWRT
dHJpbmdIYXNoKTsKIAogcHJpdmF0ZToKICAgICBIYXNoU2V0PFBhZ2UqPiBtX3BhZ2VzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjODMzZTRiODkxZjNhNzVhNzNlOWI0YzAwMmVlMmQ3NWZjMDRkOWQxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xpbmtIYXNoLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJM
aW5rSGFzaC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci1zdGF0aWMgaW5saW5lIHNpemVfdCBmaW5kU2xhc2hEb3REb3RTbGFzaChjb25zdCBDaGFy
YWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgcG9zaXRpb24pCi17
Ci0gICAgaWYgKGxlbmd0aCA8IDQpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICBzaXpl
X3QgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMzsKLSAgICBmb3IgKHNpemVfdCBpID0gcG9zaXRpb247
IGkgPCBsb29wTGltaXQ7ICsraSkgewotICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycg
JiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcuJyAm
JiBjaGFyYWN0ZXJzW2kgKyAzXSA9PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9
Ci0gICAgcmV0dXJuIG5vdEZvdW5kOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpbmRTbGFzaFNsYXNoKGNvbnN0IENoYXJhY3Rl
clR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBwb3NpdGlvbikKLXsKLSAg
ICBpZiAobGVuZ3RoIDwgMikKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHNpemVfdCBs
b29wTGltaXQgPSBsZW5ndGggLSAxOwotICAgIGZvciAoc2l6ZV90IGkgPSBwb3NpdGlvbjsgaSA8
IGxvb3BMaW1pdDsgKytpKSB7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBj
aGFyYWN0ZXJzW2kgKyAxXSA9PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0g
ICAgcmV0dXJuIG5vdEZvdW5kOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpbmRTbGFzaERvdFNsYXNoKGNvbnN0IENoYXJhY3Rl
clR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBwb3NpdGlvbikKLXsKLSAg
ICBpZiAobGVuZ3RoIDwgMykKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHNpemVfdCBs
b29wTGltaXQgPSBsZW5ndGggLSAyOwotICAgIGZvciAoc2l6ZV90IGkgPSBwb3NpdGlvbjsgaSA8
IGxvb3BMaW1pdDsgKytpKSB7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBj
aGFyYWN0ZXJzW2kgKyAxXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy8nKQotICAg
ICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiBub3RGb3VuZDsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgY29udGFp
bnNDb2xvblNsYXNoU2xhc2goY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIGlmIChsZW5ndGggPCAzKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgdW5zaWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMjsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKLSAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0g
PT0gJzonICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9
PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUg
dm9pZCBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4m
IHN0cmluZykKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0cmluZy5zaXplKCk7Ci0gICAgc2l6ZV90
IGkgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFz
dHJpbmdbaV0pCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGkgPT0gc2l6ZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHNpemVfdCBqID0gaTsKLSAgICBmb3IgKCsraTsgaSA8IHNp
emU7ICsraSkgewotICAgICAgICBpZiAoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIgPSBzdHJpbmdb
aV0pCi0gICAgICAgICAgICBzdHJpbmdbaisrXSA9IGNoYXJhY3RlcjsKLSAgICB9Ci0gICAgQVNT
RVJUKGogPCBzaXplKTsKLSAgICBzdHJpbmcuc2hyaW5rKGopOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyB2b2lkIGNsZWFuU2xhc2hEb3REb3RTbGFzaGVz
KFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCA1MTI+JiBwYXRoLCBzaXplX3QgZmlyc3RTbGFzaCkKLXsK
LSAgICBzaXplX3Qgc2xhc2ggPSBmaXJzdFNsYXNoOwotICAgIGRvIHsKLSAgICAgICAgc2l6ZV90
IHByZXZpb3VzU2xhc2ggPSBzbGFzaCA/IHJldmVyc2VGaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNp
emUoKSwgJy8nLCBzbGFzaCAtIDEpIDogbm90Rm91bmQ7Ci0gICAgICAgIC8vIERvbid0IHJlbW92
ZSB0aGUgaG9zdCwgaS5lLiBodHRwOi8vZm9vLm9yZy8uLi9mb28uaHRtbAotICAgICAgICBpZiAo
cHJldmlvdXNTbGFzaCA9PSBub3RGb3VuZCB8fCAocHJldmlvdXNTbGFzaCA+IDMgJiYgcGF0aFtw
cmV2aW91c1NsYXNoIC0gMl0gPT0gJzonICYmIHBhdGhbcHJldmlvdXNTbGFzaCAtIDFdID09ICcv
JykpIHsKLSAgICAgICAgICAgIHBhdGhbc2xhc2hdID0gMDsKLSAgICAgICAgICAgIHBhdGhbc2xh
c2ggKyAxXSA9IDA7Ci0gICAgICAgICAgICBwYXRoW3NsYXNoICsgMl0gPSAwOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHByZXZpb3VzU2xhc2g7IGkgPCBz
bGFzaCArIDM7ICsraSkKLSAgICAgICAgICAgICAgICBwYXRoW2ldID0gMDsKLSAgICAgICAgfQot
ICAgICAgICBzbGFzaCArPSAzOwotICAgIH0gd2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdERv
dFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgc2xhc2gpKSAhPSBub3RGb3VuZCk7Ci0g
ICAgc3F1ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKHBhdGgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyB2b2lkIG1lcmdlRG91YmxlU2xhc2hlcyhWZWN0b3I8
Q2hhcmFjdGVyVHlwZSwgNTEyPiYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gpCi17Ci0gICAgc2l6
ZV90IHJlZlBvcyA9IGZpbmQocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAnIycpOwotICAgIGlm
ICghcmVmUG9zIHx8IHJlZlBvcyA9PSBub3RGb3VuZCkKLSAgICAgICAgcmVmUG9zID0gcGF0aC5z
aXplKCk7Ci0KLSAgICBzaXplX3Qgc2xhc2ggPSBmaXJzdFNsYXNoOwotICAgIHdoaWxlIChzbGFz
aCA8IHJlZlBvcykgewotICAgICAgICBpZiAoIXNsYXNoIHx8IHBhdGhbc2xhc2ggLSAxXSAhPSAn
OicpCi0gICAgICAgICAgICBwYXRoW3NsYXNoKytdID0gMDsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc2xhc2ggKz0gMjsKLSAgICAgICAgaWYgKChzbGFzaCA9IGZpbmRTbGFzaFNsYXNoKHBh
dGguZGF0YSgpLCBwYXRoLnNpemUoKSwgc2xhc2gpKSA9PSBub3RGb3VuZCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIHZvaWQgY2xlYW5TbGFz
aERvdFNsYXNoZXMoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJz
dFNsYXNoKQotewotICAgIHNpemVfdCBzbGFzaCA9IGZpcnN0U2xhc2g7Ci0gICAgZG8gewotICAg
ICAgICBwYXRoW3NsYXNoXSA9IDA7Ci0gICAgICAgIHBhdGhbc2xhc2ggKyAxXSA9IDA7Ci0gICAg
ICAgIHNsYXNoICs9IDI7Ci0gICAgfSB3aGlsZSAoKHNsYXNoID0gZmluZFNsYXNoRG90U2xhc2go
cGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCBzbGFzaCkpICE9IG5vdEZvdW5kKTsKLSAgICBzcXVl
ZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSB2b2lkIGNsZWFuUGF0aChWZWN0b3I8Q2hhcmFjdGVy
VHlwZSwgNTEyPiYgcGF0aCkKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBkbyB0aGlzIGlu
IHRoZSBxdWVyeSBvciBhbmNob3IgcGFydCBvZiB0aGUgVVJMLgotICAgIHNpemVfdCBmaXJzdFNs
YXNoID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAwKTsK
LSAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKLSAgICAgICAgY2xlYW5TbGFzaERvdERv
dFNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBk
byB0aGlzIGluIHRoZSBxdWVyeSBwYXJ0LgotICAgIGZpcnN0U2xhc2ggPSBmaW5kU2xhc2hTbGFz
aChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIDApOwotICAgIGlmIChmaXJzdFNsYXNoICE9IG5v
dEZvdW5kKQotICAgICAgICBtZXJnZURvdWJsZVNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7Ci0K
LSAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVyeSBvciBhbmNob3Ig
cGFydC4KLSAgICBmaXJzdFNsYXNoID0gZmluZFNsYXNoRG90U2xhc2gocGF0aC5kYXRhKCksIHBh
dGguc2l6ZSgpLCAwKTsKLSAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKLSAgICAgICAg
Y2xlYW5TbGFzaERvdFNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIG1hdGNoTGV0dGVyKENo
YXJhY3RlclR5cGUgYywgY2hhciBsb3dlcmNhc2VMZXR0ZXIpCi17Ci0gICAgcmV0dXJuIChjIHwg
MHgyMCkgPT0gbG93ZXJjYXNlTGV0dGVyOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkc1RyYWlsaW5nU2xhc2goY29uc3QgQ2hh
cmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGlmIChsZW5n
dGggPCA2KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtYXRjaExldHRlcihjaGFy
YWN0ZXJzWzBdLCAnaCcpCi0gICAgICAgICAgICB8fCAhbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1sx
XSwgJ3QnKQotICAgICAgICAgICAgfHwgIW1hdGNoTGV0dGVyKGNoYXJhY3RlcnNbMl0sICd0JykK
LSAgICAgICAgICAgIHx8ICFtYXRjaExldHRlcihjaGFyYWN0ZXJzWzNdLCAncCcpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCEoY2hhcmFjdGVyc1s0XSA9PSAnOicKLSAgICAgICAg
ICAgIHx8IChtYXRjaExldHRlcihjaGFyYWN0ZXJzWzRdLCAncycpICYmIGNoYXJhY3RlcnNbNV0g
PT0gJzonKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIHBvcyA9IGNo
YXJhY3RlcnNbNF0gPT0gJzonID8gNSA6IDY7Ci0KLSAgICAvLyBTa2lwIGluaXRpYWwgdHdvIHNs
YXNoZXMgaWYgcHJlc2VudC4KLSAgICBpZiAocG9zICsgMSA8IGxlbmd0aCAmJiBjaGFyYWN0ZXJz
W3Bvc10gPT0gJy8nICYmIGNoYXJhY3RlcnNbcG9zICsgMV0gPT0gJy8nKQotICAgICAgICBwb3Mg
Kz0gMjsKLQotICAgIC8vIEZpbmQgbmV4dCBzbGFzaC4KLSAgICB3aGlsZSAocG9zIDwgbGVuZ3Ro
ICYmIGNoYXJhY3RlcnNbcG9zXSAhPSAnLycpCi0gICAgICAgICsrcG9zOwotCi0gICAgcmV0dXJu
IHBvcyA9PSBsZW5ndGg7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
c3RhdGljIEFMV0FZU19JTkxJTkUgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoSW5saW5lKGNvbnN0
IENoYXJhY3RlclR5cGUqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBBbHJl
YWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZShTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKHVy
bCwgbGVuZ3RoKSk7Ci19Ci0KLUxpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBTdHJpbmcm
IHVybCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB1cmwubGVuZ3RoKCk7Ci0gICAgaWYgKCFs
ZW5ndGggfHwgdXJsLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gdmlzaXRlZExpbmtIYXNoSW5s
aW5lKHVybC5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOwotICAgIHJldHVybiB2aXNpdGVkTGlua0hh
c2hJbmxpbmUodXJsLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwotfQotCi1MaW5rSGFzaCB2aXNp
dGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiB2aXNpdGVkTGlua0hhc2hJbmxpbmUodXJsLCBsZW5ndGgpOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRl
ZFVSTElubGluZShjb25zdCBVUkwmIGJhc2UsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIGJ1ZmZlcikK
LXsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhpcyBpcyBh
IHBvb3IgbWFuJ3MgY29tcGxldGVVUkwuIEZhc3RlciB3aXRoIGxlc3MgbWVtb3J5IGFsbG9jYXRp
b24uCi0gICAgLy8gRklYTUU6IEl0J3MgbWlzc2luZyBhIGxvdCBvZiB3aGF0IGNvbXBsZXRlVVJM
IGRvZXMgYW5kIGEgbG90IG9mIHdoYXQgVVJMIGRvZXMuCi0gICAgLy8gRm9yIGV4YW1wbGUsIGl0
IGRvZXMgbm90IGhhbmRsZSBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcyBwcm9wZXJseS4KLQot
ICAgIC8vIEZJWE1FOiBJdCBpcyB3cm9uZyB0aGF0IHdlIGRvIG5vdCBkbyBmdXJ0aGVyIHByb2Nl
c3Npbmcgb24gc3RyaW5ncyB0aGF0IGhhdmUgIjovLyIgaW4gdGhlbToKLSAgICAvLyAgICAxKSBU
aGUgIjovLyIgY291bGQgYmUgaW4gdGhlIHF1ZXJ5IG9yIGFuY2hvci4KLSAgICAvLyAgICAyKSBU
aGUgVVJMJ3MgcGF0aCBjb3VsZCBoYXZlIGEgIi8uLyIgb3IgYSAiLy4uLyIgb3IgYSAiLy8iIHNl
cXVlbmNlIGluIGl0LgotCi0gICAgLy8gRklYTUU6IG5lZWRzVHJhaWxpbmdTbGFzaCBkb2VzIG5v
dCBwcm9wZXJseSByZXR1cm4gdHJ1ZSBmb3IgYSBVUkwgdGhhdCBoYXMgbm8gcGF0aCwgYnV0IGRv
ZXMKLSAgICAvLyBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yLgotCi0gICAgYm9vbCBoYXNDb2xvblNs
YXNoU2xhc2ggPSBjb250YWluc0NvbG9uU2xhc2hTbGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpOwot
Ci0gICAgaWYgKGhhc0NvbG9uU2xhc2hTbGFzaCAmJiAhbmVlZHNUcmFpbGluZ1NsYXNoKGNoYXJh
Y3RlcnMsIGxlbmd0aCkpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5n
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0KLSAgICBpZiAoaGFzQ29sb25TbGFzaFNs
YXNoKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluY29ycmVjdCBmb3IgVVJMcyB0aGF0
IGhhdmUgYSBxdWVyeSBvciBhbmNob3I7IHRoZSAiLyIgbmVlZHMgdG8gZ28gYXQgdGhlCi0gICAg
ICAgIC8vIGVuZCBvZiB0aGUgcGF0aCwgKmJlZm9yZSogdGhlIHF1ZXJ5IG9yIGFuY2hvci4KLSAg
ICAgICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotICAgICAgICBidWZmZXIu
YXBwZW5kKCcvJyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgYXBwZW5kKGJ1ZmZlciwgYmFzZS5zdHJpbmcoKSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIHN3aXRjaCAoY2hhcmFjdGVyc1swXSkgewotICAgICAgICAgICAgY2FzZSAnLyc6Ci0gICAg
ICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgU3RyaW5nVmlldyhiYXNlLnN0cmluZygpKS5zdWJz
dHJpbmcoMCwgYmFzZS5wYXRoU3RhcnQoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSAnIyc6Ci0gICAgICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgU3RyaW5n
VmlldyhiYXNlLnN0cmluZygpKS5zdWJzdHJpbmcoMCwgYmFzZS5wYXRoRW5kKCkpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
YXBwZW5kKGJ1ZmZlciwgU3RyaW5nVmlldyhiYXNlLnN0cmluZygpKS5zdWJzdHJpbmcoMCwgYmFz
ZS5wYXRoQWZ0ZXJMYXN0U2xhc2goKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVycywgbGVuZ3RoKTsKLSAgICBj
bGVhblBhdGgoYnVmZmVyKTsKLSAgICBpZiAobmVlZHNUcmFpbGluZ1NsYXNoKGJ1ZmZlci5kYXRh
KCksIGJ1ZmZlci5zaXplKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluY29ycmVj
dCBmb3IgVVJMcyB0aGF0IGhhdmUgYSBxdWVyeSBvciBhbmNob3I7IHRoZSAiLyIgbmVlZHMgdG8g
Z28gYXQgdGhlCi0gICAgICAgIC8vIGVuZCBvZiB0aGUgcGF0aCwgKmJlZm9yZSogdGhlIHF1ZXJ5
IG9yIGFuY2hvci4KLSAgICAgICAgYnVmZmVyLmFwcGVuZCgnLycpOwotICAgIH0KLQotICAgIHJl
dHVybjsKLX0KLQotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVSTCYgYmFzZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCi17Ci0gICAgaWYgKGF0dHJpYnV0ZVVSTC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFiYXNlLnN0cmluZygpLmlz
RW1wdHkoKSAmJiBiYXNlLnN0cmluZygpLmlzOEJpdCgpICYmIGF0dHJpYnV0ZVVSTC5pczhCaXQo
KSkgewotICAgICAgICBWZWN0b3I8TENoYXIsIDUxMj4gdXJsOwotICAgICAgICB2aXNpdGVkVVJM
SW5saW5lKGJhc2UsIGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzOCgpLCBhdHRyaWJ1dGVVUkwubGVu
Z3RoKCksIHVybCk7Ci0gICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAgICAgcmV0dXJuIHZpc2l0ZWRMaW5rSGFzaElubGluZSh1cmwuZGF0YSgp
LCB1cmwuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gdXJsOwotICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhhdHRyaWJ1dGVVUkwuc3Ry
aW5nKCkpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIHZpc2l0ZWRVUkxJbmxpbmUoYmFzZSwg
Y2hhcmFjdGVycywgYXR0cmlidXRlVVJMLmxlbmd0aCgpLCB1cmwpOwotICAgIGlmICh1cmwuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiB2aXNpdGVkTGlua0hhc2hJ
bmxpbmUodXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTY1OTk1ZmUzZjE1YzFiMzBiNDNhYmE3ZWM5MGY1NWJjYzViOWE3Ni4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MaW5rSGFzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMaW5rSGFzaF9o
Ci0jZGVmaW5lIExpbmtIYXNoX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IFVSTDsKLQotdHlwZWRlZiB1aW50NjRfdCBMaW5rSGFzaDsKLQotLy8gVXNlIHRoZSBsb3cgMzIt
Yml0cyBvZiB0aGUgNjQtYml0IExpbmtIYXNoIGFzIHRoZSBrZXkgZm9yIEhhc2hTZXRzLgotc3Ry
dWN0IExpbmtIYXNoSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goTGlua0hhc2gga2V5
KSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KTsgfQotICAgIHN0YXRpYyBib29s
IGVxdWFsKExpbmtIYXNoIGEsIExpbmtIYXNoIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLQot
ICAgIC8vIFNlZSBBbHJlYWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZS4KLSAgICBzdGF0aWMg
dW5zaWduZWQgYXZvaWREZWxldGVkVmFsdWUoTGlua0hhc2ggaGFzaDY0KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGhhc2g2NCk7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaGFzaDY0KTsKLSAgICAgICAgdW5zaWduZWQgbmV3SGFzaCA9IGhhc2ggfCAoISho
YXNoICsgMSkgPDwgMzEpOwotICAgICAgICBBU1NFUlQobmV3SGFzaCk7Ci0gICAgICAgIEFTU0VS
VChuZXdIYXNoICE9IDB4RkZGRkZGRkYpOwotICAgICAgICByZXR1cm4gbmV3SGFzaDsKLSAgICB9
Ci19OwotCi0vLyBSZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVz
ZWQgZm9yIHZpc2l0ZWQgbGluayBjb2xvcmluZy4KLVdFQkNPUkVfRVhQT1JUIExpbmtIYXNoIHZp
c2l0ZWRMaW5rSGFzaChjb25zdCBTdHJpbmcmIHVybCk7Ci1XRUJDT1JFX0VYUE9SVCBMaW5rSGFz
aCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKTsKLQot
Ly8gUmVzb2x2ZXMgdGhlIHBvdGVudGlhbGx5IHJlbGF0aXZlIFVSTCAiYXR0cmlidXRlVVJMIiBy
ZWxhdGl2ZSB0byB0aGUgZ2l2ZW4KLS8vIGJhc2UgVVJMLCBhbmQgcmV0dXJucyB0aGUgaGFzaCBv
ZiB0aGUgc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB2aXNpdGVkCi0vLyBsaW5rIGNvbG9y
aW5nLiBJdCB3aWxsIHJldHVybiB0aGUgc3BlY2lhbCB2YWx1ZSBvZiAwIGlmIGF0dHJpYnV0ZVVS
TCBkb2VzIG5vdAotLy8gbG9vayBsaWtlIGEgcmVsYXRpdmUgVVJMLgotTGlua0hhc2ggdmlzaXRl
ZExpbmtIYXNoKGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVV
UkwpOwotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgIC8vIExpbmtIYXNoX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZFN0cmluZ0hhc2guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTE5MGMwZGY3ZTA4NjExM2ViNGIxZjMxODJkMWYwMDczODBlZGEyMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZFN0cmluZ0hhc2guY3BwCkBAIC0w
LDAgKzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Vi
a2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTaGFyZWRTdHJpbmdIYXNoLmgiCisKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBzaXpl
X3QgZmluZFNsYXNoRG90RG90U2xhc2goY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCwgc2l6ZV90IHBvc2l0aW9uKQoreworICAgIGlmIChsZW5ndGggPCA0KQor
ICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgc2l6ZV90IGxvb3BMaW1pdCA9IGxlbmd0aCAt
IDM7CisgICAgZm9yIChzaXplX3QgaSA9IHBvc2l0aW9uOyBpIDwgbG9vcExpbWl0OyArK2kpIHsK
KyAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09
ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgM10gPT0g
Jy8nKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiBub3RGb3VuZDsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIHNp
emVfdCBmaW5kU2xhc2hTbGFzaChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBzaXplX3QgcG9zaXRpb24pCit7CisgICAgaWYgKGxlbmd0aCA8IDIpCisgICAg
ICAgIHJldHVybiBub3RGb3VuZDsKKyAgICBzaXplX3QgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMTsK
KyAgICBmb3IgKHNpemVfdCBpID0gcG9zaXRpb247IGkgPCBsb29wTGltaXQ7ICsraSkgeworICAg
ICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy8n
KQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiBub3RGb3VuZDsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIHNpemVf
dCBmaW5kU2xhc2hEb3RTbGFzaChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBzaXplX3QgcG9zaXRpb24pCit7CisgICAgaWYgKGxlbmd0aCA8IDMpCisgICAg
ICAgIHJldHVybiBub3RGb3VuZDsKKyAgICBzaXplX3QgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMjsK
KyAgICBmb3IgKHNpemVfdCBpID0gcG9zaXRpb247IGkgPCBsb29wTGltaXQ7ICsraSkgeworICAg
ICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4n
ICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiBpOworICAg
IH0KKyAgICByZXR1cm4gbm90Rm91bmQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNvbnN0
IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAo
bGVuZ3RoIDwgMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIGxvb3BMaW1p
dCA9IGxlbmd0aCAtIDI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3BMaW1pdDsg
KytpKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICc6JyAmJiBjaGFyYWN0ZXJzW2kg
KyAxXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy8nKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIHZvaWQgc3F1ZWV6ZU91dE51bGxDaGFy
YWN0ZXJzKFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCA1MTI+JiBzdHJpbmcpCit7CisgICAgc2l6ZV90
IHNpemUgPSBzdHJpbmcuc2l6ZSgpOworICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmICghc3RyaW5nW2ldKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGlmIChpID09IHNpemUpCisgICAgICAgIHJldHVybjsKKyAgICBz
aXplX3QgaiA9IGk7CisgICAgZm9yICgrK2k7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYg
KENoYXJhY3RlclR5cGUgY2hhcmFjdGVyID0gc3RyaW5nW2ldKQorICAgICAgICAgICAgc3RyaW5n
W2orK10gPSBjaGFyYWN0ZXI7CisgICAgfQorICAgIEFTU0VSVChqIDwgc2l6ZSk7CisgICAgc3Ry
aW5nLnNocmluayhqKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citz
dGF0aWMgdm9pZCBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhWZWN0b3I8Q2hhcmFjdGVyVHlwZSwg
NTEyPiYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gpCit7CisgICAgc2l6ZV90IHNsYXNoID0gZmly
c3RTbGFzaDsKKyAgICBkbyB7CisgICAgICAgIHNpemVfdCBwcmV2aW91c1NsYXNoID0gc2xhc2gg
PyByZXZlcnNlRmluZChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksICcvJywgc2xhc2ggLSAxKSA6
IG5vdEZvdW5kOworICAgICAgICAvLyBEb24ndCByZW1vdmUgdGhlIGhvc3QsIGkuZS4gaHR0cDov
L2Zvby5vcmcvLi4vZm9vLmh0bWwKKyAgICAgICAgaWYgKHByZXZpb3VzU2xhc2ggPT0gbm90Rm91
bmQgfHwgKHByZXZpb3VzU2xhc2ggPiAzICYmIHBhdGhbcHJldmlvdXNTbGFzaCAtIDJdID09ICc6
JyAmJiBwYXRoW3ByZXZpb3VzU2xhc2ggLSAxXSA9PSAnLycpKSB7CisgICAgICAgICAgICBwYXRo
W3NsYXNoXSA9IDA7CisgICAgICAgICAgICBwYXRoW3NsYXNoICsgMV0gPSAwOworICAgICAgICAg
ICAgcGF0aFtzbGFzaCArIDJdID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBwcmV2aW91c1NsYXNoOyBpIDwgc2xhc2ggKyAzOyArK2kpCisgICAgICAg
ICAgICAgICAgcGF0aFtpXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgc2xhc2ggKz0gMzsKKyAg
ICB9IHdoaWxlICgoc2xhc2ggPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0
aC5zaXplKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOworICAgIHNxdWVlemVPdXROdWxsQ2hhcmFj
dGVycyhwYXRoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0
aWMgdm9pZCBtZXJnZURvdWJsZVNsYXNoZXMoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIHBh
dGgsIHNpemVfdCBmaXJzdFNsYXNoKQoreworICAgIHNpemVfdCByZWZQb3MgPSBmaW5kKHBhdGgu
ZGF0YSgpLCBwYXRoLnNpemUoKSwgJyMnKTsKKyAgICBpZiAoIXJlZlBvcyB8fCByZWZQb3MgPT0g
bm90Rm91bmQpCisgICAgICAgIHJlZlBvcyA9IHBhdGguc2l6ZSgpOworCisgICAgc2l6ZV90IHNs
YXNoID0gZmlyc3RTbGFzaDsKKyAgICB3aGlsZSAoc2xhc2ggPCByZWZQb3MpIHsKKyAgICAgICAg
aWYgKCFzbGFzaCB8fCBwYXRoW3NsYXNoIC0gMV0gIT0gJzonKQorICAgICAgICAgICAgcGF0aFtz
bGFzaCsrXSA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNsYXNoICs9IDI7CisgICAg
ICAgIGlmICgoc2xhc2ggPSBmaW5kU2xhc2hTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCks
IHNsYXNoKSkgPT0gbm90Rm91bmQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgc3F1
ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKHBhdGgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KK3N0YXRpYyB2b2lkIGNsZWFuU2xhc2hEb3RTbGFzaGVzKFZlY3RvcjxDaGFy
YWN0ZXJUeXBlLCA1MTI+JiBwYXRoLCBzaXplX3QgZmlyc3RTbGFzaCkKK3sKKyAgICBzaXplX3Qg
c2xhc2ggPSBmaXJzdFNsYXNoOworICAgIGRvIHsKKyAgICAgICAgcGF0aFtzbGFzaF0gPSAwOwor
ICAgICAgICBwYXRoW3NsYXNoICsgMV0gPSAwOworICAgICAgICBzbGFzaCArPSAyOworICAgIH0g
d2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUo
KSwgc2xhc2gpKSAhPSBub3RGb3VuZCk7CisgICAgc3F1ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKHBh
dGgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxp
bmUgdm9pZCBjbGVhblBhdGgoVmVjdG9yPENoYXJhY3RlclR5cGUsIDUxMj4mIHBhdGgpCit7Cisg
ICAgLy8gRklYTUU6IFNob3VsZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBh
cnQgb2YgdGhlIFVSTC4KKyAgICBzaXplX3QgZmlyc3RTbGFzaCA9IGZpbmRTbGFzaERvdERvdFNs
YXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7CisgICAgaWYgKGZpcnN0U2xhc2ggIT0g
bm90Rm91bmQpCisgICAgICAgIGNsZWFuU2xhc2hEb3REb3RTbGFzaGVzKHBhdGgsIGZpcnN0U2xh
c2gpOworCisgICAgLy8gRklYTUU6IFNob3VsZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgcGFy
dC4KKyAgICBmaXJzdFNsYXNoID0gZmluZFNsYXNoU2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6
ZSgpLCAwKTsKKyAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKKyAgICAgICAgbWVyZ2VE
b3VibGVTbGFzaGVzKHBhdGgsIGZpcnN0U2xhc2gpOworCisgICAgLy8gRklYTUU6IFNob3VsZCBu
b3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBhcnQuCisgICAgZmlyc3RTbGFzaCA9
IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7CisgICAgaWYg
KGZpcnN0U2xhc2ggIT0gbm90Rm91bmQpCisgICAgICAgIGNsZWFuU2xhc2hEb3RTbGFzaGVzKHBh
dGgsIGZpcnN0U2xhc2gpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
K3N0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaExldHRlcihDaGFyYWN0ZXJUeXBlIGMsIGNoYXIgbG93
ZXJjYXNlTGV0dGVyKQoreworICAgIHJldHVybiAoYyB8IDB4MjApID09IGxvd2VyY2FzZUxldHRl
cjsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5l
IGJvb2wgbmVlZHNUcmFpbGluZ1NsYXNoKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDwgNikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1swXSwgJ2gnKSB8fCAhbWF0
Y2hMZXR0ZXIoY2hhcmFjdGVyc1sxXSwgJ3QnKSB8fCAhbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1sy
XSwgJ3QnKSB8fCAhbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1szXSwgJ3AnKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghKGNoYXJhY3RlcnNbNF0gPT0gJzonIHx8IChtYXRjaExldHRl
cihjaGFyYWN0ZXJzWzRdLCAncycpICYmIGNoYXJhY3RlcnNbNV0gPT0gJzonKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHBvcyA9IGNoYXJhY3RlcnNbNF0gPT0gJzon
ID8gNSA6IDY7CisKKyAgICAvLyBTa2lwIGluaXRpYWwgdHdvIHNsYXNoZXMgaWYgcHJlc2VudC4K
KyAgICBpZiAocG9zICsgMSA8IGxlbmd0aCAmJiBjaGFyYWN0ZXJzW3Bvc10gPT0gJy8nICYmIGNo
YXJhY3RlcnNbcG9zICsgMV0gPT0gJy8nKQorICAgICAgICBwb3MgKz0gMjsKKworICAgIC8vIEZp
bmQgbmV4dCBzbGFzaC4KKyAgICB3aGlsZSAocG9zIDwgbGVuZ3RoICYmIGNoYXJhY3RlcnNbcG9z
XSAhPSAnLycpCisgICAgICAgICsrcG9zOworCisgICAgcmV0dXJuIHBvcyA9PSBsZW5ndGg7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIEFMV0FZU19JTkxJ
TkUgU2hhcmVkU3RyaW5nSGFzaCBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZShjb25zdCBD
aGFyYWN0ZXJUeXBlKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gQWxyZWFk
eUhhc2hlZDo6YXZvaWREZWxldGVkVmFsdWUoU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaCh1cmws
IGxlbmd0aCkpOworfQorCitTaGFyZWRTdHJpbmdIYXNoIGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNo
KGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHVybC5sZW5ndGgo
KTsKKyAgICBpZiAoIWxlbmd0aCB8fCB1cmwuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBjb21w
dXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSh1cmwuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKKyAg
ICByZXR1cm4gY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2hJbmxpbmUodXJsLmNoYXJhY3RlcnMxNigp
LCBsZW5ndGgpOworfQorCitTaGFyZWRTdHJpbmdIYXNoIGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNo
KGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gY29tcHV0
ZVNoYXJlZFN0cmluZ0hhc2hJbmxpbmUodXJsLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgY29tcHV0ZVNo
YXJlZFN0cmluZ0hhc2hJbmxpbmUoY29uc3QgVVJMJiBiYXNlLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCA1MTI+
JiBidWZmZXIpCit7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFRoaXMgaXMgYSBwb29yIG1hbidzIGNvbXBsZXRlVVJMLiBGYXN0ZXIgd2l0aCBsZXNzIG1lbW9y
eSBhbGxvY2F0aW9uLgorICAgIC8vIEZJWE1FOiBJdCdzIG1pc3NpbmcgYSBsb3Qgb2Ygd2hhdCBj
b21wbGV0ZVVSTCBkb2VzIGFuZCBhIGxvdCBvZiB3aGF0IFVSTCBkb2VzLgorICAgIC8vIEZvciBl
eGFtcGxlLCBpdCBkb2VzIG5vdCBoYW5kbGUgaW50ZXJuYXRpb25hbCBkb21haW4gbmFtZXMgcHJv
cGVybHkuCisKKyAgICAvLyBGSVhNRTogSXQgaXMgd3JvbmcgdGhhdCB3ZSBkbyBub3QgZG8gZnVy
dGhlciBwcm9jZXNzaW5nIG9uIHN0cmluZ3MgdGhhdCBoYXZlICI6Ly8iIGluIHRoZW06CisgICAg
Ly8gICAgMSkgVGhlICI6Ly8iIGNvdWxkIGJlIGluIHRoZSBxdWVyeSBvciBhbmNob3IuCisgICAg
Ly8gICAgMikgVGhlIFVSTCdzIHBhdGggY291bGQgaGF2ZSBhICIvLi8iIG9yIGEgIi8uLi8iIG9y
IGEgIi8vIiBzZXF1ZW5jZSBpbiBpdC4KKworICAgIC8vIEZJWE1FOiBuZWVkc1RyYWlsaW5nU2xh
c2ggZG9lcyBub3QgcHJvcGVybHkgcmV0dXJuIHRydWUgZm9yIGEgVVJMIHRoYXQgaGFzIG5vIHBh
dGgsIGJ1dCBkb2VzCisgICAgLy8gaGF2ZSBhIHF1ZXJ5IG9yIGFuY2hvci4KKworICAgIGJvb2wg
aGFzQ29sb25TbGFzaFNsYXNoID0gY29udGFpbnNDb2xvblNsYXNoU2xhc2goY2hhcmFjdGVycywg
bGVuZ3RoKTsKKworICAgIGlmIChoYXNDb2xvblNsYXNoU2xhc2ggJiYgIW5lZWRzVHJhaWxpbmdT
bGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoY2hhcmFj
dGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgaWYgKGhhc0Nv
bG9uU2xhc2hTbGFzaCkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3QgZm9y
IFVSTHMgdGhhdCBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yOyB0aGUgIi8iIG5lZWRzIHRvIGdvIGF0
IHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhlIHBhdGgsICpiZWZvcmUqIHRoZSBxdWVyeSBvciBh
bmNob3IuCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAg
ICAgYnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFsZW5ndGgpCisgICAgICAgIGFwcGVuZChidWZmZXIsIGJhc2Uuc3RyaW5nKCkpOworICAgIGVs
c2UgeworICAgICAgICBzd2l0Y2ggKGNoYXJhY3RlcnNbMF0pIHsKKyAgICAgICAgY2FzZSAnLyc6
CisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBTdHJpbmdWaWV3KGJhc2Uuc3RyaW5nKCkpLnN1
YnN0cmluZygwLCBiYXNlLnBhdGhTdGFydCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnIyc6CisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBTdHJpbmdWaWV3KGJhc2Uu
c3RyaW5nKCkpLnN1YnN0cmluZygwLCBiYXNlLnBhdGhFbmQoKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBTdHJpbmdW
aWV3KGJhc2Uuc3RyaW5nKCkpLnN1YnN0cmluZygwLCBiYXNlLnBhdGhBZnRlckxhc3RTbGFzaCgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBidWZmZXIuYXBw
ZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgY2xlYW5QYXRoKGJ1ZmZlcik7CisgICAgaWYg
KG5lZWRzVHJhaWxpbmdTbGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSkgeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3QgZm9yIFVSTHMgdGhhdCBoYXZlIGEgcXVl
cnkgb3IgYW5jaG9yOyB0aGUgIi8iIG5lZWRzIHRvIGdvIGF0IHRoZQorICAgICAgICAvLyBlbmQg
b2YgdGhlIHBhdGgsICpiZWZvcmUqIHRoZSBxdWVyeSBvciBhbmNob3IuCisgICAgICAgIGJ1ZmZl
ci5hcHBlbmQoJy8nKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKK1NoYXJlZFN0cmluZ0hh
c2ggY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2goY29uc3QgVVJMJiBiYXNlLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVVSTCkKK3sKKyAgICBpZiAoYXR0cmlidXRlVVJMLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWJhc2Uuc3RyaW5nKCkuaXNFbXB0eSgpICYm
IGJhc2Uuc3RyaW5nKCkuaXM4Qml0KCkgJiYgYXR0cmlidXRlVVJMLmlzOEJpdCgpKSB7CisgICAg
ICAgIFZlY3RvcjxMQ2hhciwgNTEyPiB1cmw7CisgICAgICAgIGNvbXB1dGVTaGFyZWRTdHJpbmdI
YXNoSW5saW5lKGJhc2UsIGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzOCgpLCBhdHRyaWJ1dGVVUkwu
bGVuZ3RoKCksIHVybCk7CisgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoSW5saW5l
KHVybC5kYXRhKCksIHVybC5zaXplKCkpOworICAgIH0KKworICAgIFZlY3RvcjxVQ2hhciwgNTEy
PiB1cmw7CisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGF0dHJp
YnV0ZVVSTC5zdHJpbmcoKSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CisgICAgY29tcHV0ZVNoYXJl
ZFN0cmluZ0hhc2hJbmxpbmUoYmFzZSwgY2hhcmFjdGVycywgYXR0cmlidXRlVVJMLmxlbmd0aCgp
LCB1cmwpOworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBjb21wdXRlU2hhcmVkU3RyaW5nSGFzaElubGluZSh1cmwuZGF0YSgpLCB1cmwuc2l6
ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2hhcmVkU3RyaW5nSGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMDMzYzNmYjdlMDA2NmE1MzNlOGE1
ZDBkNDI0Y2YxN2E4ZDRlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRTdHJpbmdIYXNoLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBVUkw7CisKK3R5cGVkZWYgdWludDY0X3QgU2hhcmVk
U3RyaW5nSGFzaDsKKworLy8gVXNlIHRoZSBsb3cgMzItYml0cyBvZiB0aGUgNjQtYml0IFNoYXJl
ZFN0cmluZ0hhc2ggYXMgdGhlIGtleSBmb3IgSGFzaFNldHMuCitzdHJ1Y3QgU2hhcmVkU3RyaW5n
SGFzaEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFNoYXJlZFN0cmluZ0hhc2gga2V5
KSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKFNoYXJlZFN0cmluZ0hhc2ggYSwgU2hhcmVkU3RyaW5nSGFzaCBiKSB7IHJldHVybiBh
ID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IHRydWU7CisKKyAgICAvLyBTZWUgQWxyZWFkeUhhc2hlZDo6YXZvaWREZWxldGVkVmFs
dWUuCisgICAgc3RhdGljIHVuc2lnbmVkIGF2b2lkRGVsZXRlZFZhbHVlKFNoYXJlZFN0cmluZ0hh
c2ggaGFzaDY0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc2g2NCk7CisgICAgICAgIHVuc2ln
bmVkIGhhc2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGFzaDY0KTsKKyAgICAgICAgdW5zaWdu
ZWQgbmV3SGFzaCA9IGhhc2ggfCAoIShoYXNoICsgMSkgPDwgMzEpOworICAgICAgICBBU1NFUlQo
bmV3SGFzaCk7CisgICAgICAgIEFTU0VSVChuZXdIYXNoICE9IDB4RkZGRkZGRkYpOworICAgICAg
ICByZXR1cm4gbmV3SGFzaDsKKyAgICB9Cit9OworCisvLyBSZXR1cm5zIHRoZSBoYXNoIG9mIHRo
ZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQgbGluayBjb2xvcmluZy4KK1dF
QkNPUkVfRVhQT1JUIFNoYXJlZFN0cmluZ0hhc2ggY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2goY29u
c3QgU3RyaW5nJiB1cmwpOworV0VCQ09SRV9FWFBPUlQgU2hhcmVkU3RyaW5nSGFzaCBjb21wdXRl
U2hhcmVkU3RyaW5nSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpOworCisv
LyBSZXNvbHZlcyB0aGUgcG90ZW50aWFsbHkgcmVsYXRpdmUgVVJMICJhdHRyaWJ1dGVVUkwiIHJl
bGF0aXZlIHRvIHRoZSBnaXZlbgorLy8gYmFzZSBVUkwsIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9m
IHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQKKy8vIGxpbmsgY29sb3Jp
bmcuIEl0IHdpbGwgcmV0dXJuIHRoZSBzcGVjaWFsIHZhbHVlIG9mIDAgaWYgYXR0cmlidXRlVVJM
IGRvZXMgbm90CisvLyBsb29rIGxpa2UgYSByZWxhdGl2ZSBVUkwuCitTaGFyZWRTdHJpbmdIYXNo
IGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoKGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVVUkwpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3Rz
LnR4dAppbmRleCAwZTM2YjEzYzZhNTA1OWMwY2FjOTQ4ZDc4ZDE3MzZiMjg3Yzk3NzY3Li4yY2Iw
YTJjOWU4MjJkZGNmZDYyODI4NTEyMjAxM2ZmMGRmZjhhOGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQK
QEAgLTE3OSwxMCArMTc5LDExIEBAIHNldChXZWJLaXRfU09VUkNFUwogICAgIFNoYXJlZC9TZXNz
aW9uVHJhY2tlci5jcHAKICAgICBTaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAogICAgIFNoYXJl
ZC9TaGFyZWFibGVSZXNvdXJjZS5jcHAKKyAgICBTaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFN0b3Jl
LmNwcAorICAgIFNoYXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFibGUuY3BwCiAgICAgU2hhcmVkL1N0
YXRpc3RpY3NEYXRhLmNwcAogICAgIFNoYXJlZC9VcGRhdGVJbmZvLmNwcAogICAgIFNoYXJlZC9V
c2VyRGF0YS5jcHAKLSAgICBTaGFyZWQvVmlzaXRlZExpbmtUYWJsZS5jcHAKICAgICBTaGFyZWQv
V2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKICAgICBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50
UnVsZUxpc3QuY3BwCiAgICAgU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA1OTIwMzAzOTFhM2E3M2MyMjFjOTAyNGUxYTM0NDMzN2I2NGI5OTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3RvcmUu
Y3BwCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY29uc3QgdW5zaWduZWQgc2hhcmVk
U3RyaW5nSGFzaFRhYmxlTWF4TG9hZCA9IDI7CisKK3N0YXRpYyB1bnNpZ25lZCBuZXh0UG93ZXJP
ZjIodW5zaWduZWQgdikKK3sKKyAgICAvLyBUYWtlbiBmcm9tIGh0dHA6Ly93d3cuY3MudXRrLmVk
dS9+dm9zZS9jLXN0dWZmL2JpdGhhY2tzLmh0bWwKKyAgICAvLyBEZXZpc2VkIGJ5IFNlYW4gQW5k
ZXJzb24sIFNlcGVtYmVyIDE0LCAyMDAxCisKKyAgICB2LS07CisgICAgdiB8PSB2ID4+IDE7Cisg
ICAgdiB8PSB2ID4+IDI7CisgICAgdiB8PSB2ID4+IDQ7CisgICAgdiB8PSB2ID4+IDg7CisgICAg
diB8PSB2ID4+IDE2OworICAgIHYrKzsKKworICAgIHJldHVybiB2OworfQorCitzdGF0aWMgdW5z
aWduZWQgdGFibGVTaXplRm9yS2V5Q291bnQodW5zaWduZWQga2V5Q291bnQpCit7CisgICAgLy8g
V2Ugd2FudCB0aGUgdGFibGUgdG8gYmUgYXQgbGVhc3QgaGFsZiBlbXB0eS4KKyAgICB1bnNpZ25l
ZCB0YWJsZVNpemUgPSBuZXh0UG93ZXJPZjIoa2V5Q291bnQgKiBzaGFyZWRTdHJpbmdIYXNoVGFi
bGVNYXhMb2FkKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHRoZSB0YWJsZSBzaXplIGlzIGF0IGxl
YXN0IHRoZSBzaXplIG9mIGEgcGFnZS4KKyAgICBzaXplX3QgbWluaW11bVRhYmxlU2l6ZSA9IFNo
YXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUoKSAvIHNpemVvZihTaGFyZWRTdHJpbmdIYXNoKTsK
KyAgICBpZiAodGFibGVTaXplIDwgbWluaW11bVRhYmxlU2l6ZSkKKyAgICAgICAgcmV0dXJuIG1p
bmltdW1UYWJsZVNpemU7CisKKyAgICByZXR1cm4gdGFibGVTaXplOworfQorCitTaGFyZWRTdHJp
bmdIYXNoU3RvcmU6OlNoYXJlZFN0cmluZ0hhc2hTdG9yZShDbGllbnQmIGNsaWVudCkKKyAgICA6
IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVy
KFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6cGVuZGluZ1No
YXJlZFN0cmluZ0hhc2hlc1RpbWVyRmlyZWQpCit7Cit9CisKK2Jvb2wgU2hhcmVkU3RyaW5nSGFz
aFN0b3JlOjpjcmVhdGVTaGFyZWRNZW1vcnlIYW5kbGUoU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhh
bmRsZSkKK3sKKyAgICByZXR1cm4gbV90YWJsZS5zaGFyZWRNZW1vcnkoKS0+Y3JlYXRlSGFuZGxl
KGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Cit9CisKK3ZvaWQg
U2hhcmVkU3RyaW5nSGFzaFN0b3JlOjphZGQoU2hhcmVkU3RyaW5nSGFzaCBzaGFyZWRTdHJpbmdI
YXNoKQoreworICAgIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlcy5hZGQoc2hhcmVkU3RyaW5n
SGFzaCk7CisKKyAgICBpZiAoIW1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVyLnN0YXJ0T25l
U2hvdCgwX3MpOworfQorCit2b2lkIFNoYXJlZFN0cmluZ0hhc2hTdG9yZTo6Y2xlYXIoKQorewor
ICAgIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hhc2hlc1RpbWVyLnN0b3AoKTsKKyAgICBtX3BlbmRp
bmdTaGFyZWRTdHJpbmdIYXNoZXMuY2xlYXIoKTsKKyAgICBtX2tleUNvdW50ID0gMDsKKyAgICBt
X3RhYmxlU2l6ZSA9IDA7CisgICAgbV90YWJsZS5jbGVhcigpOworfQorCit2b2lkIFNoYXJlZFN0
cmluZ0hhc2hTdG9yZTo6cmVzaXplVGFibGUodW5zaWduZWQgbmV3VGFibGVTaXplKQoreworICAg
IGF1dG8gbmV3VGFibGVNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKG5ld1RhYmxlU2l6
ZSAqIHNpemVvZihTaGFyZWRTdHJpbmdIYXNoKSk7CisgICAgaWYgKCFuZXdUYWJsZU1lbW9yeSkg
eworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IGZv
ciBTaGFyZWRTdHJpbmdIYXNoIHRhYmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtZW1zZXQobmV3VGFibGVNZW1vcnktPmRhdGEoKSwgMCwgbmV3VGFibGVNZW1vcnktPnNpemUo
KSk7CisKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBjdXJyZW50VGFibGVNZW1vcnkgPSBtX3Rh
YmxlLnNoYXJlZE1lbW9yeSgpOworICAgIHVuc2lnbmVkIGN1cnJlbnRUYWJsZVNpemUgPSBtX3Rh
YmxlU2l6ZTsKKworICAgIG1fdGFibGUuc2V0U2hhcmVkTWVtb3J5KG5ld1RhYmxlTWVtb3J5LnJl
bGVhc2VOb25OdWxsKCkpOworICAgIG1fdGFibGVTaXplID0gbmV3VGFibGVTaXplOworCisgICAg
aWYgKGN1cnJlbnRUYWJsZU1lbW9yeSkgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRU
YWJsZVNpemUsIGN1cnJlbnRUYWJsZU1lbW9yeS0+c2l6ZSgpID09IGN1cnJlbnRUYWJsZVNpemUg
KiBzaXplb2YoU2hhcmVkU3RyaW5nSGFzaCkpOworCisgICAgICAgIC8vIEdvIHRocm91Z2ggdGhl
IGN1cnJlbnQgaGFzaCB0YWJsZSBhbmQgcmUtYWRkIGFsbCBlbnRyaWVzIHRvIHRoZSBuZXcgaGFz
aCB0YWJsZS4KKyAgICAgICAgY29uc3QgU2hhcmVkU3RyaW5nSGFzaCogY3VycmVudFNoYXJlZFN0
cmluZ0hhc2hlcyA9IHN0YXRpY19jYXN0PGNvbnN0IFNoYXJlZFN0cmluZ0hhc2gqPihjdXJyZW50
VGFibGVNZW1vcnktPmRhdGEoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
dXJyZW50VGFibGVTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gc2hhcmVkU3RyaW5nSGFz
aCA9IGN1cnJlbnRTaGFyZWRTdHJpbmdIYXNoZXNbaV07CisgICAgICAgICAgICBpZiAoIXNoYXJl
ZFN0cmluZ0hhc2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGJv
b2wgZGlkQWRkU2hhcmVkU3RyaW5nSGFzaCA9IG1fdGFibGUuYWRkKHNoYXJlZFN0cmluZ0hhc2gp
OworCisgICAgICAgICAgICAvLyBJdCBzaG91bGQgYWx3YXlzIGJlIHBvc3NpYmxlIHRvIGFkZCB0
aGUgU2hhcmVkU3RyaW5nSGFzaCB0byBhIG5ldyB0YWJsZS4KKyAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoZGlkQWRkU2hhcmVkU3RyaW5nSGFzaCwgZGlkQWRkU2hhcmVkU3RyaW5nSGFzaCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHNoYXJlZFN0cmluZ0hhc2ggOiBtX3Bl
bmRpbmdTaGFyZWRTdHJpbmdIYXNoZXMpIHsKKyAgICAgICAgaWYgKG1fdGFibGUuYWRkKHNoYXJl
ZFN0cmluZ0hhc2gpKQorICAgICAgICAgICAgKyttX2tleUNvdW50OworICAgIH0KKyAgICBtX3Bl
bmRpbmdTaGFyZWRTdHJpbmdIYXNoZXMuY2xlYXIoKTsKKworICAgIG1fY2xpZW50LmRpZEludmFs
aWRhdGVTaGFyZWRNZW1vcnkoKTsKK30KKwordm9pZCBTaGFyZWRTdHJpbmdIYXNoU3RvcmU6OnBl
bmRpbmdTaGFyZWRTdHJpbmdIYXNoZXNUaW1lckZpcmVkKCkKK3sKKyAgICB1bnNpZ25lZCBjdXJy
ZW50VGFibGVTaXplID0gbV90YWJsZVNpemU7CisgICAgdW5zaWduZWQgbmV3VGFibGVTaXplID0g
dGFibGVTaXplRm9yS2V5Q291bnQobV9rZXlDb3VudCArIG1fcGVuZGluZ1NoYXJlZFN0cmluZ0hh
c2hlcy5zaXplKCkpOworCisgICAgbmV3VGFibGVTaXplID0gc3RkOjptYXgoY3VycmVudFRhYmxl
U2l6ZSwgbmV3VGFibGVTaXplKTsKKworICAgIGlmIChjdXJyZW50VGFibGVTaXplICE9IG5ld1Rh
YmxlU2l6ZSkgeworICAgICAgICByZXNpemVUYWJsZShuZXdUYWJsZVNpemUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFNoYXJlZFN0cmluZ0hhc2g+IGFkZGVkU2hhcmVk
U3RyaW5nSGFzaGVzOworICAgIGFkZGVkU2hhcmVkU3RyaW5nSGFzaGVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzLnNpemUoKSk7CisgICAgZm9yIChh
dXRvJiBzaGFyZWRTdHJpbmdIYXNoIDogbV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzKSB7Cisg
ICAgICAgIGlmIChtX3RhYmxlLmFkZChzaGFyZWRTdHJpbmdIYXNoKSkgeworICAgICAgICAgICAg
YWRkZWRTaGFyZWRTdHJpbmdIYXNoZXMudW5jaGVja2VkQXBwZW5kKHNoYXJlZFN0cmluZ0hhc2gp
OworICAgICAgICAgICAgKyttX2tleUNvdW50OworICAgICAgICB9CisgICAgfQorCisgICAgbV9w
ZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzLmNsZWFyKCk7CisKKyAgICBpZiAoIWFkZGVkU2hhcmVk
U3RyaW5nSGFzaGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jbGllbnQuZGlkQWRkU2hhcmVkU3Ry
aW5nSGFzaGVzKGFkZGVkU2hhcmVkU3RyaW5nSGFzaGVzKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNo
U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hTdG9yZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmI1NDgzOTM0YmMxNjkzZDE5ZTc5NWQ1OTBjNjU0YTA4YmQ0Y2U4YzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3RvcmUu
aApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2hUYWJsZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFNoYXJlZFN0cmluZ0hhc2hTdG9yZSB7CitwdWJsaWM6CisgICAgY2xhc3MgQ2xp
ZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQorCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRJbnZhbGlkYXRlU2hhcmVkTWVtb3J5KCkgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQWRkU2hhcmVkU3RyaW5nSGFzaGVzKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpTaGFyZWRTdHJpbmdIYXNoPiYpID0gMDsKKyAgICB9OworCisgICAgU2hhcmVkU3RyaW5n
SGFzaFN0b3JlKENsaWVudCYpOworCisgICAgYm9vbCBjcmVhdGVTaGFyZWRNZW1vcnlIYW5kbGUo
U2hhcmVkTWVtb3J5OjpIYW5kbGUmKTsKKyAgICB2b2lkIGFkZChXZWJDb3JlOjpTaGFyZWRTdHJp
bmdIYXNoKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiAhbV9rZXlDb3VudDsgfQorCitwcml2YXRlOgorICAgIHZvaWQgcmVzaXplVGFibGUo
dW5zaWduZWQgbmV3VGFibGVTaXplKTsKKyAgICB2b2lkIHBlbmRpbmdTaGFyZWRTdHJpbmdIYXNo
ZXNUaW1lckZpcmVkKCk7CisKKyAgICBDbGllbnQmIG1fY2xpZW50OworICAgIHVuc2lnbmVkIG1f
a2V5Q291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV90YWJsZVNpemUgeyAwIH07CisgICAgU2hh
cmVkU3RyaW5nSGFzaFRhYmxlIG1fdGFibGU7CisgICAgSGFzaFNldDxXZWJDb3JlOjpTaGFyZWRT
dHJpbmdIYXNoLCBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoSGFzaD4gbV9wZW5kaW5nU2hhcmVk
U3RyaW5nSGFzaGVzOworICAgIFJ1bkxvb3A6OlRpbWVyPFNoYXJlZFN0cmluZ0hhc2hTdG9yZT4g
bV9wZW5kaW5nU2hhcmVkU3RyaW5nSGFzaGVzVGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hU
YWJsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFibGUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY2YmVmOTQ3NzIyMzQ1OGJiZWY1YzFiYmU5MjdkZDNkYTJiNDY4YjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFi
bGUuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmgiCisKKyNpbmNsdWRlICJT
aGFyZWRNZW1vcnkuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitTaGFyZWRTdHJpbmdIYXNoVGFibGU6OlNoYXJlZFN0cmluZ0hhc2hUYWJsZSgp
Cit7Cit9CisKK1NoYXJlZFN0cmluZ0hhc2hUYWJsZTo6flNoYXJlZFN0cmluZ0hhc2hUYWJsZSgp
Cit7Cit9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgaW5saW5lIGJvb2wgaXNQb3dl
ck9mMih1bnNpZ25lZCB2KQoreworICAgIC8vIFRha2VuIGZyb20gaHR0cDovL3d3dy5jcy51dGsu
ZWR1L352b3NlL2Mtc3R1ZmYvYml0aGFja3MuaHRtbAorICAgIAorICAgIHJldHVybiAhKHYgJiAo
diAtIDEpKSAmJiB2OworfQorI2VuZGlmCisKK3ZvaWQgU2hhcmVkU3RyaW5nSGFzaFRhYmxlOjpz
ZXRTaGFyZWRNZW1vcnkoUmVmPFNoYXJlZE1lbW9yeT4mJiBzaGFyZWRNZW1vcnkpCit7CisgICAg
bV9zaGFyZWRNZW1vcnkgPSBXVEZNb3ZlKHNoYXJlZE1lbW9yeSk7CisgICAgCisgICAgQVNTRVJU
KG1fc2hhcmVkTWVtb3J5KTsKKyAgICBBU1NFUlQoIShtX3NoYXJlZE1lbW9yeS0+c2l6ZSgpICUg
c2l6ZW9mKFNoYXJlZFN0cmluZ0hhc2gpKSk7CisKKyAgICBtX3RhYmxlID0gc3RhdGljX2Nhc3Q8
U2hhcmVkU3RyaW5nSGFzaCo+KG1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpOworICAgIG1fdGFibGVT
aXplID0gbV9zaGFyZWRNZW1vcnktPnNpemUoKSAvIHNpemVvZihTaGFyZWRTdHJpbmdIYXNoKTsK
KyAgICBBU1NFUlQoaXNQb3dlck9mMihtX3RhYmxlU2l6ZSkpOworICAgIAorICAgIG1fdGFibGVT
aXplTWFzayA9IG1fdGFibGVTaXplIC0gMTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBk
b3VibGVIYXNoKHVuc2lnbmVkIGtleSkKK3sKKyAgICBrZXkgPSB+a2V5ICsgKGtleSA+PiAyMyk7
CisgICAga2V5IF49IChrZXkgPDwgMTIpOworICAgIGtleSBePSAoa2V5ID4+IDcpOworICAgIGtl
eSBePSAoa2V5IDw8IDIpOworICAgIGtleSBePSAoa2V5ID4+IDIwKTsKKyAgICByZXR1cm4ga2V5
OworfQorICAgIAorYm9vbCBTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmFkZChTaGFyZWRTdHJpbmdI
YXNoIHNoYXJlZFN0cmluZ0hhc2gpCit7CisgICAgQVNTRVJUKG1fc2hhcmVkTWVtb3J5KTsKKwor
ICAgIGludCBrID0gMDsKKyAgICBTaGFyZWRTdHJpbmdIYXNoKiB0YWJsZSA9IG1fdGFibGU7Cisg
ICAgaW50IHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNrOworICAgIHVuc2lnbmVkIGggPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc2hhcmVkU3RyaW5nSGFzaCk7CisgICAgaW50IGkgPSBoICYgc2l6
ZU1hc2s7CisKKyAgICBTaGFyZWRTdHJpbmdIYXNoKiBlbnRyeTsKKyAgICB3aGlsZSAoMSkgewor
ICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKworICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGJ1
Y2tldCBpcyBlbXB0eS4KKyAgICAgICAgaWYgKCEqZW50cnkpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2FtZSBsaW5rIGhhc2ggaXMgaW4gdGhlIHRhYmxl
IGFscmVhZHkuCisgICAgICAgIGlmICgqZW50cnkgPT0gc2hhcmVkU3RyaW5nSGFzaCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIWspCisgICAgICAgICAgICBrID0g
MSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAg
fQorCisgICAgKmVudHJ5ID0gc2hhcmVkU3RyaW5nSGFzaDsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTaGFyZWRTdHJpbmdIYXNoVGFibGU6OmNvbnRhaW5zKFNoYXJlZFN0cmluZ0hhc2gg
c2hhcmVkU3RyaW5nSGFzaCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2hhcmVkTWVtb3J5KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgayA9IDA7CisgICAgU2hhcmVkU3RyaW5nSGFz
aCogdGFibGUgPSBtX3RhYmxlOworICAgIGludCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsK
KyAgICB1bnNpZ25lZCBoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNoYXJlZFN0cmluZ0hhc2gp
OworICAgIGludCBpID0gaCAmIHNpemVNYXNrOworICAgIAorICAgIFNoYXJlZFN0cmluZ0hhc2gq
IGVudHJ5OworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOworCisg
ICAgICAgIC8vIENoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgdGFibGUuCisg
ICAgICAgIGlmICghKmVudHJ5KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAg
ICBpZiAoKmVudHJ5ID09IHNoYXJlZFN0cmluZ0hhc2gpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghaykKKyAgICAgICAgICAgIGsgPSAxIHwgZG91Ymxl
SGFzaChoKTsKKyAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2hhcmVkU3RyaW5nSGFzaFRhYmxlOjpjbGVhcigpCit7
CisgICAgbV90YWJsZVNpemUgPSAwOworICAgIG1fdGFibGVTaXplTWFzayA9IDA7CisgICAgbV9z
aGFyZWRNZW1vcnkgPSBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZS5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWNk
MmQzZTgzYWY1OWNjZWZiMDQyYmYxOTYxOGQ5NWMyOTI0ZjMyOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZS5oCkBAIC0wLDAgKzEs
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29y
ZS9TaGFyZWRTdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVkTWVtb3J5OworCitjbGFzcyBTaGFyZWRTdHJpbmdI
YXNoVGFibGUgeworcHVibGljOgorICAgIFNoYXJlZFN0cmluZ0hhc2hUYWJsZSgpOworICAgIH5T
aGFyZWRTdHJpbmdIYXNoVGFibGUoKTsKKworICAgIHZvaWQgc2V0U2hhcmVkTWVtb3J5KFJlZjxT
aGFyZWRNZW1vcnk+JiYpOworCisgICAgLy8gQ2FuIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSB1bmRl
cmx5aW5nIHNoYXJlZCBtZW1vcnkgaXMgaW4gcmVhZCAvIHdyaXRlIG1vZGUuCisgICAgYm9vbCBh
ZGQoV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCk7CisKKyAgICBib29sIGNvbnRhaW5zKFdlYkNv
cmU6OlNoYXJlZFN0cmluZ0hhc2gpIGNvbnN0OworCisgICAgU2hhcmVkTWVtb3J5KiBzaGFyZWRN
ZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZE1lbW9yeS5nZXQoKTsgfQorICAgIHZvaWQg
Y2xlYXIoKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1l
bW9yeTsKKworICAgIHVuc2lnbmVkIG1fdGFibGVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1f
dGFibGVTaXplTWFzayB7IDAgfTsKKyAgICBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoKiBtX3Rh
YmxlIHsgbnVsbHB0ciB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvVmlzaXRlZExpbmtUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9WaXNpdGVkTGlu
a1RhYmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJiMTFiNzNjZjJkNzdh
YjgwZjUzMzI2OTFmYjg3ZWQyYmIyZjA5Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKLQotI2luY2x1ZGUgIlNo
YXJlZE1lbW9yeS5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLVZpc2l0ZWRMaW5rVGFibGU6OlZpc2l0ZWRMaW5rVGFibGUoKQotICAgIDogbV90
YWJsZVNpemUoMCkKLSAgICAsIG1fdGFibGVTaXplTWFzaygwKQotICAgICwgbV90YWJsZShudWxs
cHRyKQotewotfQotCi1WaXNpdGVkTGlua1RhYmxlOjp+VmlzaXRlZExpbmtUYWJsZSgpCi17Ci19
Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQb3dlck9mMih1
bnNpZ25lZCB2KQotewotICAgIC8vIFRha2VuIGZyb20gaHR0cDovL3d3dy5jcy51dGsuZWR1L352
b3NlL2Mtc3R1ZmYvYml0aGFja3MuaHRtbAotICAgIAotICAgIHJldHVybiAhKHYgJiAodiAtIDEp
KSAmJiB2OwotfQotI2VuZGlmCi0KLXZvaWQgVmlzaXRlZExpbmtUYWJsZTo6c2V0U2hhcmVkTWVt
b3J5KFJlZjxTaGFyZWRNZW1vcnk+JiYgc2hhcmVkTWVtb3J5KQotewotICAgIG1fc2hhcmVkTWVt
b3J5ID0gV1RGTW92ZShzaGFyZWRNZW1vcnkpOwotICAgIAotICAgIEFTU0VSVChtX3NoYXJlZE1l
bW9yeSk7Ci0gICAgQVNTRVJUKCEobV9zaGFyZWRNZW1vcnktPnNpemUoKSAlIHNpemVvZihMaW5r
SGFzaCkpKTsKLQotICAgIG1fdGFibGUgPSBzdGF0aWNfY2FzdDxMaW5rSGFzaCo+KG1fc2hhcmVk
TWVtb3J5LT5kYXRhKCkpOwotICAgIG1fdGFibGVTaXplID0gbV9zaGFyZWRNZW1vcnktPnNpemUo
KSAvIHNpemVvZihMaW5rSGFzaCk7Ci0gICAgQVNTRVJUKGlzUG93ZXJPZjIobV90YWJsZVNpemUp
KTsKLSAgICAKLSAgICBtX3RhYmxlU2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZSAtIDE7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgZG91YmxlSGFzaCh1bnNpZ25lZCBrZXkpCi17Ci0gICAga2V5
ID0gfmtleSArIChrZXkgPj4gMjMpOwotICAgIGtleSBePSAoa2V5IDw8IDEyKTsKLSAgICBrZXkg
Xj0gKGtleSA+PiA3KTsKLSAgICBrZXkgXj0gKGtleSA8PCAyKTsKLSAgICBrZXkgXj0gKGtleSA+
PiAyMCk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLSAgICAKLWJvb2wgVmlzaXRlZExpbmtUYWJsZTo6
YWRkTGlua0hhc2goTGlua0hhc2ggbGlua0hhc2gpCi17Ci0gICAgQVNTRVJUKG1fc2hhcmVkTWVt
b3J5KTsKLQotICAgIGludCBrID0gMDsKLSAgICBMaW5rSGFzaCogdGFibGUgPSBtX3RhYmxlOwot
ICAgIGludCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKLSAgICB1bnNpZ25lZCBoID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmtIYXNoKTsKLSAgICBpbnQgaSA9IGggJiBzaXplTWFzazsK
LSAgCi0gICAgTGlua0hhc2gqIGVudHJ5OwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGVudHJ5
ID0gdGFibGUgKyBpOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgYnVja2V0IGlzIGVtcHR5
LgotICAgICAgICBpZiAoISplbnRyeSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8v
IENoZWNrIGlmIHRoZSBzYW1lIGxpbmsgaGFzaCBpcyBpbiB0aGUgdGFibGUgYWxyZWFkeS4KLSAg
ICAgICAgaWYgKCplbnRyeSA9PSBsaW5rSGFzaCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAoIWspCi0gICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0g
ICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7Ci0gICAgfQotCi0gICAgKmVudHJ5ID0gbGlu
a0hhc2g7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmlzaXRlZExpbmtUYWJsZTo6aXNM
aW5rVmlzaXRlZChMaW5rSGFzaCBsaW5rSGFzaCkgY29uc3QKLXsKLSAgICBpZiAoIW1fc2hhcmVk
TWVtb3J5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgayA9IDA7Ci0gICAgTGlu
a0hhc2gqIHRhYmxlID0gbV90YWJsZTsKLSAgICBpbnQgc2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1h
c2s7Ci0gICAgdW5zaWduZWQgaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsaW5rSGFzaCk7Ci0g
ICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7Ci0gICAgCi0gICAgTGlua0hhc2gqIGVudHJ5OwotICAg
IHdoaWxlICgxKSB7Ci0gICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOwotCi0gICAgICAgIC8vIENo
ZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgdGFibGUuCi0gICAgICAgIGlmICgh
KmVudHJ5KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBpZiAoKmVudHJ5
ID09IGxpbmtIYXNoKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoIWspCi0gICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgIGkg
PSAoaSArIGspICYgc2l6ZU1hc2s7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIFZpc2l0ZWRMaW5rVGFibGU6OmNsZWFyKCkKLXsKLSAgICBtX3RhYmxlU2l6ZSA9IDA7Ci0g
ICAgbV90YWJsZVNpemVNYXNrID0gMDsKLSAgICBtX3NoYXJlZE1lbW9yeSA9IG51bGxwdHI7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvVmlzaXRlZExpbmtUYWJsZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvVmlzaXRlZExpbmtU
YWJsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDkxMjY3NTgxNTRjMTg5NDlk
NDVkMjg1MGEzMWIxY2ZlOTRlYzJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Zpc2l0ZWRMaW5rVGFibGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFZpc2l0ZWRM
aW5rVGFibGVfaAotI2RlZmluZSBWaXNpdGVkTGlua1RhYmxlX2gKLQotI2luY2x1ZGUgPFdlYkNv
cmUvTGlua0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBTaGFyZWRNZW1vcnk7Ci0KLWNsYXNzIFZpc2l0ZWRMaW5rVGFibGUgewot
cHVibGljOgotICAgIFZpc2l0ZWRMaW5rVGFibGUoKTsKLSAgICB+VmlzaXRlZExpbmtUYWJsZSgp
OwotCi0gICAgdm9pZCBzZXRTaGFyZWRNZW1vcnkoUmVmPFNoYXJlZE1lbW9yeT4mJik7Ci0KLSAg
ICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBVSSBwcm9jZXNzLgotICAg
IGJvb2wgYWRkTGlua0hhc2goV2ViQ29yZTo6TGlua0hhc2gpOwotCi0gICAgYm9vbCBpc0xpbmtW
aXNpdGVkKFdlYkNvcmU6OkxpbmtIYXNoKSBjb25zdDsKLQotICAgIFNoYXJlZE1lbW9yeSogc2hh
cmVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRNZW1vcnkuZ2V0KCk7IH0KLSAgICB2
b2lkIGNsZWFyKCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9zaGFy
ZWRNZW1vcnk7Ci0KLSAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZTsKLSAgICB1bnNpZ25lZCBtX3Rh
YmxlU2l6ZU1hc2s7Ci0gICAgV2ViQ29yZTo6TGlua0hhc2gqIG1fdGFibGU7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBWaXNpdGVkTGlua1RhYmxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCmluZGV4IDcwNDhiYmUwYzBkNzA3MmRhMjRiYTFkMTRiYjkyOGQ5
ZjllYWM5ZDguLmE2YzQxZTg3ZWQ2MWNjMzRhOTYwZTc3MzI4ZGZiYjljMGIwMWNjOGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApAQCAtMzE1LDcgKzMx
NSw3IEBAIHZvaWQgV0tDb250ZXh0QWRkVmlzaXRlZExpbmsoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIFdLU3RyaW5nUmVmIHZpc2l0ZWRVUkwpCiAgICAgaWYgKHZpc2l0ZWRVUkxTdHJpbmcuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPnZpc2l0
ZWRMaW5rU3RvcmUoKS5hZGRWaXNpdGVkTGlua0hhc2godmlzaXRlZExpbmtIYXNoKHZpc2l0ZWRV
UkxTdHJpbmcpKTsKKyAgICB0b0ltcGwoY29udGV4dFJlZiktPnZpc2l0ZWRMaW5rU3RvcmUoKS5h
ZGRWaXNpdGVkTGlua0hhc2goY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2godmlzaXRlZFVSTFN0cmlu
ZykpOwogfQogCiB2b2lkIFdLQ29udGV4dENsZWFyVmlzaXRlZExpbmtzKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1Zpc2l0ZWRMaW5rU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVmlzaXRlZExpbmtTdG9yZS5tbQppbmRleCBjNTZmMDJjMGU4NmJlMTgwOGIxYWIwM2Ux
ZmVkNzk0NTdiODRlZDAxLi5mYWRmODA4MGQwMDY2YWRjYWVmOWRmMGZjYWI1OTM0MGZiYTcxZGM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVmlzaXRl
ZExpbmtTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VmlzaXRlZExpbmtTdG9yZS5tbQpAQCAtMjksNyArMjksNyBAQAogI2lmIFdLX0FQSV9FTkFCTEVE
CiAKICNpbXBvcnQgIlZpc2l0ZWRMaW5rU3RvcmUuaCIKLSNpbXBvcnQgPFdlYkNvcmUvTGlua0hh
c2guaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkU3RyaW5nSGFzaC5oPgogCiBAaW1wbGVtZW50
YXRpb24gX1dLVmlzaXRlZExpbmtTdG9yZQogCkBAIC01Miw3ICs1Miw3IEBAIC0gKHZvaWQpZGVh
bGxvYwogCiAtICh2b2lkKWFkZFZpc2l0ZWRMaW5rV2l0aFVSTDooTlNVUkwgKilVUkwKIHsKLSAg
ICBhdXRvIGxpbmtIYXNoID0gV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoKFVSTC5hYnNvbHV0ZVN0
cmluZyk7CisgICAgYXV0byBsaW5rSGFzaCA9IFdlYkNvcmU6OmNvbXB1dGVTaGFyZWRTdHJpbmdI
YXNoKFVSTC5hYnNvbHV0ZVN0cmluZyk7CiAKICAgICBfdmlzaXRlZExpbmtTdG9yZS0+YWRkVmlz
aXRlZExpbmtIYXNoKGxpbmtIYXNoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlz
aXRlZExpbmtTdG9yZS5jcHAKaW5kZXggYmQwMDJjMDZmNjQxMTJkYmQ1OTA2Y2E3MDRjYzZlYjMx
Nzk5MjczNi4uMWZkZDFiNTA2YTM3YTllOWE2Y2MwODIzYjIzZWUyMmI2OTg3MDVjNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOSArMjYsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmUuaCIKIAot
I2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmVNZXNz
YWdlcy5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKICNpbmNsdWRlICJWaXNpdGVk
TGlua1RhYmxlQ29udHJvbGxlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3Nh
Z2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKQEAgLTM4LDggKzM2LDYgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgY29u
c3QgaW50IHZpc2l0ZWRMaW5rVGFibGVNYXhMb2FkID0gMjsKLQogUmVmPFZpc2l0ZWRMaW5rU3Rv
cmU+IFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgVmlzaXRlZExpbmtTdG9yZSk7CkBAIC01NCw5ICs1MCw3IEBAIFZpc2l0ZWRMaW5rU3RvcmU6
On5WaXNpdGVkTGlua1N0b3JlKCkKIH0KIAogVmlzaXRlZExpbmtTdG9yZTo6VmlzaXRlZExpbmtT
dG9yZSgpCi0gICAgOiBtX2tleUNvdW50KDApCi0gICAgLCBtX3RhYmxlU2l6ZSgwKQotICAgICwg
bV9wZW5kaW5nVmlzaXRlZExpbmtzVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVmlzaXRl
ZExpbmtTdG9yZTo6cGVuZGluZ1Zpc2l0ZWRMaW5rc1RpbWVyRmlyZWQpCisgICAgOiBtX2xpbmtI
YXNoU3RvcmUoKnRoaXMpCiB7CiB9CiAKQEAgLTY5LDEyICs2MywxMCBAQCB2b2lkIFZpc2l0ZWRM
aW5rU3RvcmU6OmFkZFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogCiAgICAgcHJv
Y2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rU3RvcmU6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgaWRlbnRpZmllcigpLCAqdGhpcyk7CiAKLSAgICBpZiAoIW1fa2V5
Q291bnQpCisgICAgaWYgKG1fbGlua0hhc2hTdG9yZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEFTU0VSVChtX3RhYmxlLnNoYXJlZE1lbW9yeSgpKTsKLQotICAgIHNlbmRUYWJs
ZShwcm9jZXNzKTsKKyAgICBzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MocHJvY2Vzcyk7CiB9CiAK
IHZvaWQgVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHBy
b2Nlc3MpCkBAIC04NSwyMSArNzcsMTQgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpyZW1vdmVQ
cm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBwcm9jZXNzLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6VmlzaXRlZExpbmtTdG9yZTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBpZGVudGlmaWVyKCkpOwogfQogCi12b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0
ZWRMaW5rSGFzaChMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQgVmlzaXRlZExpbmtTdG9yZTo6YWRk
VmlzaXRlZExpbmtIYXNoKFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCiB7Ci0gICAgbV9wZW5k
aW5nVmlzaXRlZExpbmtzLmFkZChsaW5rSGFzaCk7Ci0KLSAgICBpZiAoIW1fcGVuZGluZ1Zpc2l0
ZWRMaW5rc1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fcGVuZGluZ1Zpc2l0ZWRMaW5rc1Rp
bWVyLnN0YXJ0T25lU2hvdCgwX3MpOworICAgIG1fbGlua0hhc2hTdG9yZS5hZGQobGlua0hhc2gp
OwogfQogCiB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZUFsbCgpCiB7Ci0gICAgbV9wZW5k
aW5nVmlzaXRlZExpbmtzVGltZXIuc3RvcCgpOwotICAgIG1fcGVuZGluZ1Zpc2l0ZWRMaW5rcy5j
bGVhcigpOwotICAgIG1fa2V5Q291bnQgPSAwOwotICAgIG1fdGFibGVTaXplID0gMDsKLSAgICBt
X3RhYmxlLmNsZWFyKCk7CisgICAgbV9saW5rSGFzaFN0b3JlLmNsZWFyKCk7CiAKICAgICBmb3Ig
KFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7CiAgICAgICAgIEFTU0VS
VChwcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsK
QEAgLTExNyw5ICsxMDIsOSBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OndlYlByb2Nlc3NEaWRD
bG9zZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgSVBDOjpDb25uZQogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtI
YXNoRnJvbVBhZ2UodWludDY0X3QgcGFnZUlELCBMaW5rSGFzaCBsaW5rSGFzaCkKK3ZvaWQgVmlz
aXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2UodWludDY0X3QgcGFnZUlE
LCBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQogewotICAgIGlmIChXZWJQYWdlUHJveHkqIHdl
YlBhZ2VQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShwYWdlSUQpKSB7CisgICAgaWYg
KGF1dG8qIHdlYlBhZ2VQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShwYWdlSUQpKSB7
CiAgICAgICAgIGlmICghd2ViUGFnZVByb3h5LT5hZGRzVmlzaXRlZExpbmtzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTI3LDEyNSArMTEyLDM1IEBAIHZvaWQgVmlzaXRlZExp
bmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2UodWludDY0X3QgcGFnZUlELCBMaW5r
SGFzaCBsaW5rCiAgICAgYWRkVmlzaXRlZExpbmtIYXNoKGxpbmtIYXNoKTsKIH0KIAotc3RhdGlj
IHVuc2lnbmVkIG5leHRQb3dlck9mMih1bnNpZ25lZCB2KQordm9pZCBWaXNpdGVkTGlua1N0b3Jl
OjpzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogewot
ICAgIC8vIFRha2VuIGZyb20gaHR0cDovL3d3dy5jcy51dGsuZWR1L352b3NlL2Mtc3R1ZmYvYml0
aGFja3MuaHRtbAotICAgIC8vIERldmlzZWQgYnkgU2VhbiBBbmRlcnNvbiwgU2VwZW1iZXIgMTQs
IDIwMDEKLSAgICAKLSAgICB2LS07Ci0gICAgdiB8PSB2ID4+IDE7Ci0gICAgdiB8PSB2ID4+IDI7
Ci0gICAgdiB8PSB2ID4+IDQ7Ci0gICAgdiB8PSB2ID4+IDg7Ci0gICAgdiB8PSB2ID4+IDE2Owot
ICAgIHYrKzsKLSAgICAKLSAgICByZXR1cm4gdjsKKyAgICBBU1NFUlQocHJvY2Vzcy5wcm9jZXNz
UG9vbCgpLnByb2Nlc3NlcygpLmNvbnRhaW5zKCZwcm9jZXNzKSk7CisKKyAgICBTaGFyZWRNZW1v
cnk6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFtX2xpbmtIYXNoU3RvcmUuY3JlYXRlU2hhcmVk
TWVtb3J5SGFuZGxlKGhhbmRsZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHByb2Nlc3Muc2Vu
ZChNZXNzYWdlczo6VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OlNldFZpc2l0ZWRMaW5rVGFi
bGUoaGFuZGxlKSwgaWRlbnRpZmllcigpKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHRhYmxlU2l6
ZUZvcktleUNvdW50KHVuc2lnbmVkIGtleUNvdW50KQordm9pZCBWaXNpdGVkTGlua1N0b3JlOjpk
aWRJbnZhbGlkYXRlU2hhcmVkTWVtb3J5KCkKIHsKLSAgICAvLyBXZSB3YW50IHRoZSB0YWJsZSB0
byBiZSBhdCBsZWFzdCBoYWxmIGVtcHR5LgotICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSA9IG5leHRQ
b3dlck9mMihrZXlDb3VudCAqIHZpc2l0ZWRMaW5rVGFibGVNYXhMb2FkKTsKLQotICAgIC8vIEVu
c3VyZSB0aGF0IHRoZSB0YWJsZSBzaXplIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIGEgcGFnZS4K
LSAgICBzaXplX3QgbWluaW11bVRhYmxlU2l6ZSA9IFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNp
emUoKSAvIHNpemVvZihMaW5rSGFzaCk7Ci0gICAgaWYgKHRhYmxlU2l6ZSA8IG1pbmltdW1UYWJs
ZVNpemUpCi0gICAgICAgIHJldHVybiBtaW5pbXVtVGFibGVTaXplOwotICAgIAotICAgIHJldHVy
biB0YWJsZVNpemU7CisgICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nl
c3NlcykKKyAgICAgICAgc2VuZFN0b3JlSGFuZGxlVG9Qcm9jZXNzKCpwcm9jZXNzKTsKIH0KIAot
dm9pZCBWaXNpdGVkTGlua1N0b3JlOjpwZW5kaW5nVmlzaXRlZExpbmtzVGltZXJGaXJlZCgpCit2
b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OmRpZEFkZFNoYXJlZFN0cmluZ0hhc2hlcyhjb25zdCBWZWN0
b3I8V2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaD4mIGxpbmtIYXNoZXMpCiB7Ci0gICAgdW5zaWdu
ZWQgY3VycmVudFRhYmxlU2l6ZSA9IG1fdGFibGVTaXplOwotICAgIHVuc2lnbmVkIG5ld1RhYmxl
U2l6ZSA9IHRhYmxlU2l6ZUZvcktleUNvdW50KG1fa2V5Q291bnQgKyBtX3BlbmRpbmdWaXNpdGVk
TGlua3Muc2l6ZSgpKTsKLQotICAgIG5ld1RhYmxlU2l6ZSA9IHN0ZDo6bWF4KGN1cnJlbnRUYWJs
ZVNpemUsIG5ld1RhYmxlU2l6ZSk7Ci0KLSAgICBpZiAoY3VycmVudFRhYmxlU2l6ZSAhPSBuZXdU
YWJsZVNpemUpIHsKLSAgICAgICAgcmVzaXplVGFibGUobmV3VGFibGVTaXplKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxXZWJDb3JlOjpMaW5rSGFzaD4gYWRkZWRWaXNp
dGVkTGlua3M7Ci0KLSAgICBmb3IgKGF1dG8mIGxpbmtIYXNoIDogbV9wZW5kaW5nVmlzaXRlZExp
bmtzKSB7Ci0gICAgICAgIGlmIChtX3RhYmxlLmFkZExpbmtIYXNoKGxpbmtIYXNoKSkgewotICAg
ICAgICAgICAgYWRkZWRWaXNpdGVkTGlua3MuYXBwZW5kKGxpbmtIYXNoKTsKLSAgICAgICAgICAg
ICsrbV9rZXlDb3VudDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fcGVuZGluZ1Zpc2l0ZWRM
aW5rcy5jbGVhcigpOwotCi0gICAgaWYgKGFkZGVkVmlzaXRlZExpbmtzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghbGlua0hhc2hlcy5pc0VtcHR5KCkpOwogCiAgICAg
Zm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewogICAgICAgICBB
U1NFUlQocHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5wcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNz
KSk7CiAKLSAgICAgICAgaWYgKGFkZGVkVmlzaXRlZExpbmtzLnNpemUoKSA+IDIwKQorICAgICAg
ICBpZiAobGlua0hhc2hlcy5zaXplKCkgPiAyMCkKICAgICAgICAgICAgIHByb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpBbGxWaXNpdGVkTGlua1N0YXRl
Q2hhbmdlZCgpLCBpZGVudGlmaWVyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6VmlzaXRlZExp
bmtTdGF0ZUNoYW5nZWQoYWRkZWRWaXNpdGVkTGlua3MpLCBpZGVudGlmaWVyKCkpOwotICAgIH0K
LX0KLQotdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpyZXNpemVUYWJsZSh1bnNpZ25lZCBuZXdUYWJs
ZVNpemUpCi17Ci0gICAgYXV0byBuZXdUYWJsZU1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2Nh
dGUobmV3VGFibGVTaXplICogc2l6ZW9mKExpbmtIYXNoKSk7Ci0KLSAgICBpZiAoIW5ld1RhYmxl
TWVtb3J5KSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIHNoYXJlZCBt
ZW1vcnkgZm9yIHZpc2l0ZWQgbGluayB0YWJsZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbWVtc2V0KG5ld1RhYmxlTWVtb3J5LT5kYXRhKCksIDAsIG5ld1RhYmxlTWVtb3J5LT5z
aXplKCkpOwotCi0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gY3VycmVudFRhYmxlTWVtb3J5ID0g
bV90YWJsZS5zaGFyZWRNZW1vcnkoKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50VGFibGVTaXplID0g
bV90YWJsZVNpemU7Ci0KLSAgICBtX3RhYmxlLnNldFNoYXJlZE1lbW9yeShuZXdUYWJsZU1lbW9y
eS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBtX3RhYmxlU2l6ZSA9IG5ld1RhYmxlU2l6ZTsKLQot
ICAgIGlmIChjdXJyZW50VGFibGVNZW1vcnkpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJy
ZW50VGFibGVTaXplLCBjdXJyZW50VGFibGVNZW1vcnktPnNpemUoKSA9PSBjdXJyZW50VGFibGVT
aXplICogc2l6ZW9mKExpbmtIYXNoKSk7Ci0KLSAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUgY3Vy
cmVudCBoYXNoIHRhYmxlIGFuZCByZS1hZGQgYWxsIGVudHJpZXMgdG8gdGhlIG5ldyBoYXNoIHRh
YmxlLgotICAgICAgICBjb25zdCBMaW5rSGFzaCogY3VycmVudExpbmtIYXNoZXMgPSBzdGF0aWNf
Y2FzdDxjb25zdCBMaW5rSGFzaCo+KGN1cnJlbnRUYWJsZU1lbW9yeS0+ZGF0YSgpKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGN1cnJlbnRUYWJsZVNpemU7ICsraSkgewotICAg
ICAgICAgICAgTGlua0hhc2ggbGlua0hhc2ggPSBjdXJyZW50TGlua0hhc2hlc1tpXTsKLQotICAg
ICAgICAgICAgaWYgKCFsaW5rSGFzaCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgYm9vbCBkaWRBZGRMaW5rSGFzaCA9IG1fdGFibGUuYWRkTGlua0hhc2gobGlua0hh
c2gpOwotCi0gICAgICAgICAgICAvLyBJdCBzaG91bGQgYWx3YXlzIGJlIHBvc3NpYmxlIHRvIGFk
ZCB0aGUgbGluayBoYXNoIHRvIGEgbmV3IHRhYmxlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChkaWRBZGRMaW5rSGFzaCwgZGlkQWRkTGlua0hhc2gpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgZm9yIChhdXRvJiBsaW5rSGFzaCA6IG1fcGVuZGluZ1Zpc2l0ZWRMaW5rcykgewotICAgICAg
ICBpZiAobV90YWJsZS5hZGRMaW5rSGFzaChsaW5rSGFzaCkpCi0gICAgICAgICAgICBtX2tleUNv
dW50Kys7CisgICAgICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlcjo6VmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQobGlua0hhc2hlcyksIGlkZW50
aWZpZXIoKSk7CiAgICAgfQotICAgIG1fcGVuZGluZ1Zpc2l0ZWRMaW5rcy5jbGVhcigpOwotCi0g
ICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAg
c2VuZFRhYmxlKCpwcm9jZXNzKTsKLX0KLQotdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpzZW5kVGFi
bGUoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQotewotICAgIEFTU0VSVChwcm9jZXNzLnByb2Nl
c3NQb29sKCkucHJvY2Vzc2VzKCkuY29udGFpbnMoJnByb2Nlc3MpKTsKLQotICAgIFNoYXJlZE1l
bW9yeTo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIW1fdGFibGUuc2hhcmVkTWVtb3J5KCktPmNy
ZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNzLnNlbmQoTWVzc2FnZXM6OlZpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyOjpTZXRWaXNpdGVkTGlua1RhYmxlKGhhbmRsZSksIGlkZW50aWZpZXIo
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
VmlzaXRlZExpbmtTdG9yZS5oCmluZGV4IDVjNmFkOGRkMmY2ZWQxZmFlMzU4NmExZTFjZDBlNDMy
NzJmNWVkYmUuLjcyOGNkYzk5MGIxOTEyZGJlYzA5MWY5ZjhiNTQwMjBjNjcwMjAyZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMjcgKzIzLDI0IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBWaXNp
dGVkTGlua1N0b3JlX2gKLSNkZWZpbmUgVmlzaXRlZExpbmtTdG9yZV9oCisjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgot
I2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKKyNpbmNsdWRlICJTaGFyZWRTdHJpbmdIYXNo
U3RvcmUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
TGlmZXRpbWVPYnNlcnZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTGlua0hhc2guaD4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL0lkZW50aWZpZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlUHJv
eHk7CiBjbGFzcyBXZWJQcm9jZXNzUHJveHk7CiAgICAgCi1jbGFzcyBWaXNpdGVkTGlua1N0b3Jl
IGZpbmFsIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6VmlzaXRl
ZExpbmtTdG9yZT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBXZWJQcm9j
ZXNzTGlmZXRpbWVPYnNlcnZlciwgcHVibGljIElkZW50aWZpZWQ8VmlzaXRlZExpbmtTdG9yZT4g
IHsKK2NsYXNzIFZpc2l0ZWRMaW5rU3RvcmUgZmluYWwgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBs
PEFQSTo6T2JqZWN0OjpUeXBlOjpWaXNpdGVkTGlua1N0b3JlPiwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlciwgcHVibGljIFdlYlByb2Nlc3NMaWZldGltZU9ic2VydmVyLCBwdWJsaWMgSWRl
bnRpZmllZDxWaXNpdGVkTGlua1N0b3JlPiwgcHJpdmF0ZSBTaGFyZWRTdHJpbmdIYXNoU3RvcmU6
OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxWaXNpdGVkTGlua1N0b3JlPiBjcmVh
dGUoKTsKIApAQCAtNTMsMzQgKzUwLDI3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFByb2Nlc3Mo
V2ViUHJvY2Vzc1Byb3h5Jik7CiAgICAgdm9pZCByZW1vdmVQcm9jZXNzKFdlYlByb2Nlc3NQcm94
eSYpOwogCi0gICAgdm9pZCBhZGRWaXNpdGVkTGlua0hhc2goV2ViQ29yZTo6TGlua0hhc2gpOwor
ICAgIHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoKFdlYkNvcmU6OlNoYXJlZFN0cmluZ0hhc2gpOwog
ICAgIHZvaWQgcmVtb3ZlQWxsKCk7CiAKIHByaXZhdGU6CiAgICAgLy8gSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAKICAgICAvLyBXZWJQcm9jZXNzTGlmZXRp
bWVPYnNlcnZlcgotICAgIHZvaWQgd2ViUHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihXZWJQcm9j
ZXNzUHJveHkmLCBJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2b2lkIHdlYlByb2Nl
c3NEaWRDbG9zZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgSVBDOjpDb25uZWN0aW9uJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB3ZWJQcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKFdlYlByb2Nl
c3NQcm94eSYsIElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOworICAgIHZvaWQgd2ViUHJvY2Vzc0Rp
ZENsb3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBJUEM6OkNvbm5lY3Rpb24mKSBmaW5h
bDsKIAotICAgIHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2UodWludDY0X3QgcGFnZUlE
LCBXZWJDb3JlOjpMaW5rSGFzaCk7CisgICAgLy8gU2hhcmVkU3RyaW5nSGFzaFN0b3JlOjpDbGll
bnQKKyAgICB2b2lkIGRpZEludmFsaWRhdGVTaGFyZWRNZW1vcnkoKSBmaW5hbDsKKyAgICB2b2lk
IGRpZEFkZFNoYXJlZFN0cmluZ0hhc2hlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2hhcmVkU3Ry
aW5nSGFzaD4mKSBmaW5hbDsKIAotICAgIHZvaWQgcGVuZGluZ1Zpc2l0ZWRMaW5rc1RpbWVyRmly
ZWQoKTsKKyAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rSGFzaEZyb21QYWdlKHVpbnQ2NF90IHBhZ2VJ
RCwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCk7CiAKLSAgICB2b2lkIHJlc2l6ZVRhYmxlKHVu
c2lnbmVkIG5ld1RhYmxlU2l6ZSk7Ci0gICAgdm9pZCBzZW5kVGFibGUoV2ViUHJvY2Vzc1Byb3h5
Jik7CisgICAgdm9pZCBzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Jik7
CiAKICAgICBIYXNoU2V0PFdlYlByb2Nlc3NQcm94eSo+IG1fcHJvY2Vzc2VzOwotCi0gICAgdW5z
aWduZWQgbV9rZXlDb3VudDsKLSAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZTsKLSAgICBWaXNpdGVk
TGlua1RhYmxlIG1fdGFibGU7Ci0KLSAgICBIYXNoU2V0PFdlYkNvcmU6OkxpbmtIYXNoLCBXZWJD
b3JlOjpMaW5rSGFzaEhhc2g+IG1fcGVuZGluZ1Zpc2l0ZWRMaW5rczsKLSAgICBSdW5Mb29wOjpU
aW1lcjxWaXNpdGVkTGlua1N0b3JlPiBtX3BlbmRpbmdWaXNpdGVkTGlua3NUaW1lcjsKKyAgICBT
aGFyZWRTdHJpbmdIYXNoU3RvcmUgbV9saW5rSGFzaFN0b3JlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBWaXNpdGVkTGlua1N0b3JlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCAyNjIwODYzOWZmNGU3ZDY3YTU2NGQ4
MjUyNjk5YTI2ODg3NGVhZTE2Li5lMzEwNjUxY2VjZWQ5MDZjZmVjYWRiYzdjNGY3NTEzYzFhYzE2
ZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC03
Miw3ICs3Miw2IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTGlua0hhc2guaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0xvZ0luaXRpYWxpemF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VSTFBhcnNlci5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggYWQ1YjBjNjdhOTUwMGQ4YmE4YWQ2NGUz
ZDhmYWQ4OTA0MzU3OTdjNS4uN2M3YThlYzkxZWY3OWJhYmMwZTgxNmNjZWYwYTRmMmJmZTk1MGY2
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC00NCw3ICs0
NCw3IEBACiAjaW5jbHVkZSAiV2ViQ29udGV4dENsaWVudC5oIgogI2luY2x1ZGUgIldlYkNvbnRl
eHRDb25uZWN0aW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5oCmluZGV4IGZhNWY3ZTUwMmZjZGI5NmIyOTcyMDEyYzcwYmQxNzgzYTZm
NjdlNmIuLmQ1MWYwYzIyZDg0MDBjNjEwYjdkNDBhZDVjYzNlOGVjODg0ZDdkZTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCkBAIC0zOCw3ICszOCw3IEBACiAj
aW5jbHVkZSAiVmlzaWJsZVdlYlBhZ2VDb3VudGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkU3Ry
aW5nSGFzaC5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMyOGNjMTFjNWVlYWM0NmY4YzczNTVkMWZmMmYz
YzIwOGI4YzViYzMuLjYzOGQ2NzA0ODI2NTEwNmJmOWY3ZWQ4YjRiNWU1ZDZmMTlhZDc1NjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTUzLDggKzE1Myw2IEBACiAJCTFBMEVDOTA3MTI0QzBBQjgwMDdFRjRBNSAvKiBQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTBFQzkwNTEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b24uY3BwICovOyB9OwogCQkxQTBFQzkwRjEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTBFQzkwRDEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NYW5hZ2VyLmggKi87IH07CiAJCTFBMEVDOTEwMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRUM5MEUxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAgKi87IH07Ci0JCTFBMEYyOUNCMTIwQjM3MTYwMDUz
RDFCOSAvKiBWaXNpdGVkTGlua1RhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEYyOUM5MTIwQjM3MTYwMDUzRDFCOSAvKiBWaXNpdGVkTGlu
a1RhYmxlLmNwcCAqLzsgfTsKLQkJMUEwRjI5Q0MxMjBCMzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRM
aW5rVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBMEYyOUNBMTIwQjM3MTYwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1RhYmxlLmggKi87IH07CiAJ
CTFBMEYyOUUzMTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEYyOUUxMTIwQjQ0NDIw
MDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmNwcCAqLzsgfTsKIAkJMUEwRjI5RTQxMjBCNDQ0
MjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEYyOUUyMTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVk
TGlua1N0b3JlLmggKi87IH07CiAJCTFBMTRGOEUxMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUlu
Zm9EYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBMTRGOERGMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9EYXRhLmNwcCAqLzsgfTsKQEAg
LTEzNTYsNiArMTM1NCwxMCBAQAogCQk4MzA0OEFFNjFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vz
c1Rocm90dGxlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODMwNDhBRTUxQUNBNDVEQzAwODJDODMyIC8qIFByb2Nlc3NUaHJvdHRsZXJDbGll
bnQuaCAqLzsgfTsKIAkJODMxMDQyOEIxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1
YnJlc291cmNlc0VudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4MzEwNDI4OTFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3Vy
Y2VzRW50cnkuaCAqLzsgfTsKIAkJODMxMDQyOEMxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtD
YWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgzMTA0MjhBMUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVT
dWJyZXNvdXJjZXNFbnRyeS5jcHAgKi87IH07CisJCTgzMTNGN0VCMUY3REFFMDgwMEI5NDRFQiAv
KiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODMxM0Y3RUExRjdEQUUwNDAwQjk0NEVCIC8qIFNoYXJlZFN0cmlu
Z0hhc2hTdG9yZS5jcHAgKi87IH07CisJCTgzMTNGN0VDMUY3REFFMDgwMEI5NDRFQiAvKiBTaGFy
ZWRTdHJpbmdIYXNoU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDgzMTNGN0U5MUY3REFFMDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3Rv
cmUuaCAqLzsgfTsKKwkJODMxM0Y3RUQxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hh
c2hUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4MzEzRjdFODFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmNwcCAq
LzsgfTsKKwkJODMxM0Y3RUUxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMxM0Y3
RTcxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oICovOyB9OwogCQk4
MzFFRUJCRDFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzFFRUJCQjFC
RDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmggKi87IH07CiAJ
CTgzMUVFQkJFMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMxRUVC
QkMxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgKi87
IH07CiAJCTgzMkFFMjUyMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2
ZUxvYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4MzJBRTI1MDFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVM
b2FkTWFuYWdlci5oICovOyB9OwpAQCAtMjM2OSw4ICsyMzcxLDYgQEAKIAkJMUEwRUM5MDUxMjRD
MEFCODAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRUM5MEQxMjRDMEFGNTAwN0VGNEE1IC8qIFBs
dWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUEwRUM5MEUxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQTBGMjlDOTEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRlZExpbmtUYWJsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdGVkTGlua1RhYmxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwRjI5Q0ExMjBCMzcxNjAwNTNE
MUI5IC8qIFZpc2l0ZWRMaW5rVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlzaXRlZExpbmtUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBG
MjlFMTEyMEI0NDQyMDA1M0QxQjkgLyogVmlzaXRlZExpbmtTdG9yZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdGVkTGlua1N0b3JlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRjI5RTIxMjBCNDQ0MjAwNTNEMUI5IC8qIFZpc2l0ZWRM
aW5rU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRlZExpbmtT
dG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTE0RjhERjFENzRDODM0MDA2
Q0JFQzYgLyogRnJhbWVJbmZvRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGcmFtZUluZm9EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTM3MTEsNiArMzcxMSwxMCBAQAogCQk4MzA0OEFFNTFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vz
c1Rocm90dGxlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9j
ZXNzVGhyb3R0bGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzMTA0
Mjg5MUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNF
bnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzEwNDI4QTFCRDZCNjZGMDBB
NzE1RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzEzRjdFNzFGN0RBRTAzMDBCOTQ0RUIg
LyogU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4MzEzRjdFODFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZFN0cmluZ0hhc2hUYWJs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzMTNGN0U5MUY3REFFMDMwMEI5
NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTgzMTNGN0VBMUY3REFFMDQwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVkU3RyaW5nSGFz
aFN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMxRUVCQkIxQkQ4NUM0
MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMxRUVCQkMxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdv
cmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4MzJBRTI1MDFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3Bl
Y3VsYXRpdmVMb2FkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC01MDMwLDYgKzUwMzQsMTAgQEAKIAkJCQkxQTY0MjBFMzEyRENFMkZGMDBDQUFF
MkMgLyogU2hhcmVhYmxlQml0bWFwLmggKi8sCiAJCQkJNTEyMTc0NUUxNjRDMjBFMzAwMzdBNUMx
IC8qIFNoYXJlYWJsZVJlc291cmNlLmNwcCAqLywKIAkJCQk1MTIxNzQ1RjE2NEMyMEUzMDAzN0E1
QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuaCAqLywKKwkJCQk4MzEzRjdFQTFGN0RBRTA0MDBCOTQ0
RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcCAqLywKKwkJCQk4MzEzRjdFOTFGN0RBRTAz
MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggKi8sCisJCQkJODMxM0Y3RTgxRjdE
QUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5jcHAgKi8sCisJCQkJODMxM0Y3
RTcxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oICovLAogCQkJCTUy
NzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgKi8sCiAJCQkJNTI3
MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggKi8sCiAJCQkJMUE1RTRE
QTMxMkQzQkQzRDAwOTlBMkJCIC8qIFRleHRDaGVja2VyU3RhdGUuaCAqLywKQEAgLTUwMzksOCAr
NTA0Nyw2IEBACiAJCQkJMUFDMTMzNjYxODU2NUI1NzAwRjNFQzA1IC8qIFVzZXJEYXRhLmggKi8s
CiAJCQkJMjY4NDA1NEExOEI4NjZGRjAwMjJDMzhCIC8qIFZpc2libGVDb250ZW50UmVjdFVwZGF0
ZUluZm8uY3BwICovLAogCQkJCTI2ODQwNTQyMThCODVBNjMwMDIyQzM4QiAvKiBWaXNpYmxlQ29u
dGVudFJlY3RVcGRhdGVJbmZvLmggKi8sCi0JCQkJMUEwRjI5QzkxMjBCMzcxNjAwNTNEMUI5IC8q
IFZpc2l0ZWRMaW5rVGFibGUuY3BwICovLAotCQkJCTFBMEYyOUNBMTIwQjM3MTYwMDUzRDFCOSAv
KiBWaXNpdGVkTGlua1RhYmxlLmggKi8sCiAJCQkJNTE4RDJDQUIxMkQ1MTUzQjAwM0JCOTNCIC8q
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwICovLAogCQkJCTUxOEQyQ0FDMTJENTE1M0IwMDNC
QjkzQiAvKiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtLmggKi8sCiAJCQkJQkNGNTA3MjYxMjQzMjlB
QTAwNTk1NUFFIC8qIFdlYkNlcnRpZmljYXRlSW5mby5oICovLApAQCAtODc3MSw2ICs4Nzc3LDgg
QEAKIAkJCQk1MTIxNzQ2MTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMjRCRUQ1MTIwODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1v
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUNENEI0RDlEMUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFy
ZWRSaW5nQnVmZmVyU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODMxM0Y3RUMxRjdEQUUw
ODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
ODMxM0Y3RUUxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkRBRjA2RDYxOEJEMUE0NzAwODFDRUIxIC8qIFNtYXJ0TWFnbmlmaWNh
dGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERTY5NDNFMThCRDJBNjgwMDVD
MTVFNSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUyNzJCMjhCMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04ODE5LDcgKzg4MjcsNiBAQAogCQkJCTJERDVBNzI5MUVCRjA4RDUw
MDlCQTU5NyAvKiBWaXNpYmxlV2ViUGFnZUNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
MEYyOUU0MTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTYwMjI0RDE4QzE2QjlGMDBDM0U4QzkgLyogVmlzaXRlZExpbmtTdG9yZU1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTBGMjlDQzEyMEIzNzE2MDA1M0QxQjkgLyogVmlz
aXRlZExpbmtUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGNENFRjAxOEJDNDgxODAwQkMy
RDM0IC8qIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QThFN0QzRDE4QzE1MTQ5MDA1QTcwMkEgLyogVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJNZXNz
YWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBOUJBRTExODRGRkFDNzAwM0I2QkM2IC8qIFdl
YWtPYmpDUHRyLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzU5LDYgKzEwMzY2LDggQEAKIAkJCQk1
MTIxNzQ2MDE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDQ1MEFFQzAxREMzRkFFNTAwOTk0M0YyIC8qIFNoYXJlZE1lbW9yeUNvY29h
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENEI0RDlDMUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFy
ZWRSaW5nQnVmZmVyU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4MzEzRjdFQjFGN0RB
RTA4MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTgzMTNGN0VEMUY3REFFMDgwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoVGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBRjA2RDcxOEJEMUE0NzAwODFDRUIxIC8qIFNtYXJ0TWFn
bmlmaWNhdGlvbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkyREU2OTQzRDE4QkQy
QTY4MDA1QzE1RTUgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MjcyQjI4QTE0MDY5ODVEMDA5NkE1RDAgLyogU3Rh
dGlzdGljc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDQyMCw3ICsxMDQyOSw2IEBACiAJ
CQkJMjY4NDA1NEMxOEI4NkMzNTAwMjJDMzhCIC8qIFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUlu
Zm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwRjI5RTMxMjBCNDQ0MjAwNTNEMUI5IC8qIFZp
c2l0ZWRMaW5rU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2MDIyNEMxOEMxNkI5RjAw
QzNFOEM5IC8qIFZpc2l0ZWRMaW5rU3RvcmVNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMUEwRjI5Q0IxMjBCMzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rVGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNENFRUYxOEJDNDgxODAwQkMyRDM0IC8qIFZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEU3RDNDMThDMTUx
NDkwMDVBNzAyQSAvKiBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDRURBMTJFMjE1MkNEMUFFMDBEOUUwOEQgLyogV2ViQWx0
ZXJuYXRpdmVUZXh0Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXIuY3BwCmluZGV4IDZlOGIwNmRmYjhkM2Q1ZjBiY2Q1M2Q1MDg4MTk1ODRjOGYzNzExMTUu
LmVmNzEyODAyZjFiYWQzYTA1MGMwZWIyOTE2YjAwZmQwOGU1M2MxYWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlci5jcHAKQEAgLTcxLDE0ICs3MSwxNCBAQCBWaXNpdGVkTGlua1RhYmxlQ29u
dHJvbGxlcjo6flZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKCkKICAgICB2aXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlcnMoKS5yZW1vdmUobV9pZGVudGlmaWVyKTsKIH0KIAotYm9vbCBWaXNpdGVk
TGlua1RhYmxlQ29udHJvbGxlcjo6aXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hhc2ggbGlua0hh
c2gsIGNvbnN0IFVSTCYsIGNvbnN0IEF0b21pY1N0cmluZyYpCitib29sIFZpc2l0ZWRMaW5rVGFi
bGVDb250cm9sbGVyOjppc0xpbmtWaXNpdGVkKFBhZ2UmLCBTaGFyZWRTdHJpbmdIYXNoIGxpbmtI
YXNoLCBjb25zdCBVUkwmLCBjb25zdCBBdG9taWNTdHJpbmcmKQogewotICAgIHJldHVybiBtX3Zp
c2l0ZWRMaW5rVGFibGUuaXNMaW5rVmlzaXRlZChsaW5rSGFzaCk7CisgICAgcmV0dXJuIG1fdmlz
aXRlZExpbmtUYWJsZS5jb250YWlucyhsaW5rSGFzaCk7CiB9CiAKLXZvaWQgVmlzaXRlZExpbmtU
YWJsZUNvbnRyb2xsZXI6OmFkZFZpc2l0ZWRMaW5rKFBhZ2UmIHBhZ2UsIExpbmtIYXNoIGxpbmtI
YXNoKQordm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6YWRkVmlzaXRlZExpbmsoUGFn
ZSYgcGFnZSwgU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKLSAgICBpZiAobV92aXNpdGVk
TGlua1RhYmxlLmlzTGlua1Zpc2l0ZWQobGlua0hhc2gpKQorICAgIGlmIChtX3Zpc2l0ZWRMaW5r
VGFibGUuY29udGFpbnMobGlua0hhc2gpKQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJQYWdl
KiB3ZWJQYWdlID0gV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKCZwYWdlKTsKQEAgLTk5LDcgKzk5LDcg
QEAgdm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6c2V0VmlzaXRlZExpbmtUYWJsZShj
b25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYKICAgICBpbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlu
a3MoKTsKIH0KIAotdm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6dmlzaXRlZExpbmtT
dGF0ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYgbGlua0hhc2hlcykK
K3ZvaWQgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoPiYgbGlua0hhc2hlcykKIHsK
ICAgICBmb3IgKGF1dG8gbGlua0hhc2ggOiBsaW5rSGFzaGVzKQogICAgICAgICBpbnZhbGlkYXRl
U3R5bGVzRm9yTGluayhsaW5rSGFzaCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAppbmRleCBk
NmU4MmJmN2RlNTM0MGRhYmU1MThkODNhZTIxZmZlMzY4YTkxYWViLi43NDdlM2Q4YmE3MzVlYmMw
MmZhN2E1ZWExZjM1Yzg1NzRkYTBiNGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmgKQEAg
LTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUg
IlNoYXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUuaCIKKyNpbmNsdWRl
ICJTaGFyZWRTdHJpbmdIYXNoVGFibGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Zpc2l0ZWRMaW5r
U3RvcmUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00MSwxOSArNDEsMTkgQEAgcHJpdmF0
ZToKICAgICBleHBsaWNpdCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcih1aW50NjRfdCBpZGVu
dGlmaWVyKTsKIAogICAgIC8vIFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RvcmUuCi0gICAgYm9vbCBp
c0xpbmtWaXNpdGVkKFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpMaW5rSGFzaCwgY29uc3QgV2Vi
Q29yZTo6VVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6
TGlua0hhc2gpIG92ZXJyaWRlOworICAgIGJvb2wgaXNMaW5rVmlzaXRlZChXZWJDb3JlOjpQYWdl
JiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiBiYXNlVVJM
LCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7CisgICAgdm9pZCBh
ZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCkg
b3ZlcnJpZGU7CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlci4KICAgICB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwog
CiAgICAgdm9pZCBzZXRWaXNpdGVkTGlua1RhYmxlKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxl
Jik7Ci0gICAgdm9pZCB2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6TGlua0hhc2g+Jik7CisgICAgdm9pZCB2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZChjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaD4mKTsKICAgICB2b2lkIGFsbFZpc2l0ZWRM
aW5rU3RhdGVDaGFuZ2VkKCk7CiAgICAgdm9pZCByZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKIAog
ICAgIHVpbnQ2NF90IG1faWRlbnRpZmllcjsKLSAgICBWaXNpdGVkTGlua1RhYmxlIG1fdmlzaXRl
ZExpbmtUYWJsZTsKKyAgICBTaGFyZWRTdHJpbmdIYXNoVGFibGUgbV92aXNpdGVkTGlua1RhYmxl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250
cm9sbGVyLm1lc3NhZ2VzLmluCmluZGV4IDAzOWRkMzAyMjljMTAyZDdjNjhkZjZmMDk4Nzk1ZDE0
ZGFiNWFjOWUuLmY5MTY0NTNlNDBlNWQwNThkNTljYzU5Y2FjNTNlYzQxMDM4M2IzOWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw3
IEBACiAKIG1lc3NhZ2VzIC0+IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyIHsKICAgICBTZXRW
aXNpdGVkTGlua1RhYmxlKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlKQotICAg
IFZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKFZlY3RvcjxXZWJDb3JlOjpMaW5rSGFzaD4gbGlua0hh
c2hlcykKKyAgICBWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZChWZWN0b3I8V2ViQ29yZTo6U2hhcmVk
U3RyaW5nSGFzaD4gbGlua0hhc2hlcykKICAgICBBbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgp
CiAgICAgUmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaApp
bmRleCAxNjRmZWQxZjAwYTYxODlhNDc3NTE5ZWU5M2RkY2FiNTY4M2UxZmI1Li5hZWY0ZmM1MmFh
ZTQxMmYzZTZjNGVjZjQwMzk1YjQzZTg3Y2M5NDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmgKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5o
CkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYlZpc2l0ZWRMaW5rU3RvcmVfaAogI2RlZmlu
ZSBXZWJWaXNpdGVkTGlua1N0b3JlX2gKIAotI2ltcG9ydCA8V2ViQ29yZS9MaW5rSGFzaC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRTdHJpbmdIYXNoLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Zp
c2l0ZWRMaW5rU3RvcmUuaD4KICNpbXBvcnQgPHd0Zi9SZWYuaD4KIApAQCAtNDQsMTQgKzQ0LDE0
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViVmlzaXRlZExpbmtTdG9yZSgpOwogCi0gICAg
Ym9vbCBpc0xpbmtWaXNpdGVkKFdlYkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpMaW5rSGFzaCwgY29u
c3QgV2ViQ29yZTo6VVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVS
TCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2Vi
Q29yZTo6TGlua0hhc2gpIG92ZXJyaWRlOworICAgIGJvb2wgaXNMaW5rVmlzaXRlZChXZWJDb3Jl
OjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiBi
YXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5n
SGFzaCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzSWZOZWVkZWQo
V2ViQ29yZTo6UGFnZSYpOwotICAgIHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoKFdlYkNvcmU6Okxp
bmtIYXNoKTsKKyAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rSGFzaChXZWJDb3JlOjpTaGFyZWRTdHJp
bmdIYXNoKTsKICAgICB2b2lkIHJlbW92ZVZpc2l0ZWRMaW5rSGFzaGVzKCk7CiAKLSAgICBIYXNo
U2V0PFdlYkNvcmU6OkxpbmtIYXNoLCBXZWJDb3JlOjpMaW5rSGFzaEhhc2g+IG1fdmlzaXRlZExp
bmtIYXNoZXM7CisgICAgSGFzaFNldDxXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoLCBXZWJDb3Jl
OjpTaGFyZWRTdHJpbmdIYXNoSGFzaD4gbV92aXNpdGVkTGlua0hhc2hlczsKICAgICBib29sIG1f
dmlzaXRlZExpbmtzUG9wdWxhdGVkOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUubW0KaW5k
ZXggYTE1MjkzMzRiMzg2MGY2YjFlNzFkNDA5YTJmMzIwNjhmMmRjN2RmNC4uYjIyMWQ5MzU1YjAz
YWRhOGI2ZWM2NTE4ZjI5Y2ZmY2M4Y2M1ZTQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLm1t
CkBAIC04NCwxOSArODQsMTkgQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVk
TGluayhOU1N0cmluZyAqdXJsU3RyaW5nKQogICAgIHNpemVfdCBsZW5ndGggPSB1cmxTdHJpbmcu
bGVuZ3RoOwogCiAgICAgaWYgKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gQ0ZTdHJpbmdHZXRD
aGFyYWN0ZXJzUHRyKChfX2JyaWRnZSBDRlN0cmluZ1JlZil1cmxTdHJpbmcpKSB7Ci0gICAgICAg
IGFkZFZpc2l0ZWRMaW5rSGFzaCh2aXNpdGVkTGlua0hhc2goY2hhcmFjdGVycywgbGVuZ3RoKSk7
CisgICAgICAgIGFkZFZpc2l0ZWRMaW5rSGFzaChjb21wdXRlU2hhcmVkU3RyaW5nSGFzaChjaGFy
YWN0ZXJzLCBsZW5ndGgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFZlY3RvcjxV
Q2hhciwgNTEyPiBidWZmZXIobGVuZ3RoKTsKICAgICBbdXJsU3RyaW5nIGdldENoYXJhY3RlcnM6
YnVmZmVyLmRhdGEoKV07CiAKLSAgICBhZGRWaXNpdGVkTGlua0hhc2godmlzaXRlZExpbmtIYXNo
KGJ1ZmZlci5kYXRhKCksIGxlbmd0aCkpOworICAgIGFkZFZpc2l0ZWRMaW5rSGFzaChjb21wdXRl
U2hhcmVkU3RyaW5nSGFzaChidWZmZXIuZGF0YSgpLCBsZW5ndGgpKTsKIH0KIAogdm9pZCBXZWJW
aXNpdGVkTGlua1N0b3JlOjpyZW1vdmVWaXNpdGVkTGluayhOU1N0cmluZyAqdXJsU3RyaW5nKQog
ewotICAgIExpbmtIYXNoIGxpbmtIYXNoID0gdmlzaXRlZExpbmtIYXNoKHVybFN0cmluZyk7Cisg
ICAgYXV0byBsaW5rSGFzaCA9IGNvbXB1dGVTaGFyZWRTdHJpbmdIYXNoKHVybFN0cmluZyk7CiAK
ICAgICBBU1NFUlQobV92aXNpdGVkTGlua0hhc2hlcy5jb250YWlucyhsaW5rSGFzaCkpOwogICAg
IG1fdmlzaXRlZExpbmtIYXNoZXMucmVtb3ZlKGxpbmtIYXNoKTsKQEAgLTEwNCwxNCArMTA0LDE0
IEBAIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlVmlzaXRlZExpbmsoTlNTdHJpbmcg
KnVybFN0cmluZykKICAgICBpbnZhbGlkYXRlU3R5bGVzRm9yTGluayhsaW5rSGFzaCk7CiB9CiAK
LWJvb2wgV2ViVmlzaXRlZExpbmtTdG9yZTo6aXNMaW5rVmlzaXRlZChQYWdlJiBwYWdlLCBMaW5r
SGFzaCBsaW5rSGFzaCwgY29uc3QgVVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZVVSTCkKK2Jvb2wgV2ViVmlzaXRlZExpbmtTdG9yZTo6aXNMaW5rVmlzaXRlZChQYWdl
JiBwYWdlLCBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoLCBjb25zdCBVUkwmIGJhc2VVUkwsIGNv
bnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQogewogICAgIHBvcHVsYXRlVmlzaXRlZExp
bmtzSWZOZWVkZWQocGFnZSk7CiAKICAgICByZXR1cm4gbV92aXNpdGVkTGlua0hhc2hlcy5jb250
YWlucyhsaW5rSGFzaCk7CiB9CiAKLXZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRl
ZExpbmsoUGFnZSYgc291cmNlUGFnZSwgTGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFdlYlZpc2l0
ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rKFBhZ2UmIHNvdXJjZVBhZ2UsIFNoYXJlZFN0cmlu
Z0hhc2ggbGlua0hhc2gpCiB7CiAgICAgaWYgKCFzX3Nob3VsZFRyYWNrVmlzaXRlZExpbmtzKQog
ICAgICAgICByZXR1cm47CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0
b3JlOjpwb3B1bGF0ZVZpc2l0ZWRMaW5rc0lmTmVlZGVkKFBhZ2UmIHBhZ2UpCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjphZGRW
aXNpdGVkTGlua0hhc2goTGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFdlYlZpc2l0ZWRMaW5rU3Rv
cmU6OmFkZFZpc2l0ZWRMaW5rSGFzaChTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQogewogICAg
IEFTU0VSVChzX3Nob3VsZFRyYWNrVmlzaXRlZExpbmtzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0
b3JlLmNwcAppbmRleCA2YjQzYzExMjFhYTU5ZjM3Yzk5Zjk2NzFmMmU3NTdmOTYzM2M2NThiLi4y
YTdhN2Q3ZTU3OGQ0NWNiNzNhNjM4YjI5OGRlZGE4NDZjNzkwNzM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVk
TGlua1N0b3JlLmNwcApAQCAtNzUsMTcgKzc1LDE3IEBAIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9y
ZTo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIAogdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjph
ZGRWaXNpdGVkTGluayhjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICBhZGRWaXNpdGVk
TGlua0hhc2godmlzaXRlZExpbmtIYXNoKHVybFN0cmluZykpOworICAgIGFkZFZpc2l0ZWRMaW5r
SGFzaChjb21wdXRlU2hhcmVkU3RyaW5nSGFzaCh1cmxTdHJpbmcpKTsKIH0KIAotYm9vbCBXZWJW
aXNpdGVkTGlua1N0b3JlOjppc0xpbmtWaXNpdGVkKFBhZ2UmIHBhZ2UsIExpbmtIYXNoIGxpbmtI
YXNoLCBjb25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJM
KQorYm9vbCBXZWJWaXNpdGVkTGlua1N0b3JlOjppc0xpbmtWaXNpdGVkKFBhZ2UmIHBhZ2UsIFNo
YXJlZFN0cmluZ0hhc2ggbGlua0hhc2gsIGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBhdHRyaWJ1dGVVUkwpCiB7CiAgICAgcG9wdWxhdGVWaXNpdGVkTGlua3NJZk5lZWRl
ZChwYWdlKTsKIAogICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNvbnRhaW5zKGxpbmtI
YXNoKTsKIH0KIAotdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGluayhQYWdl
JiwgTGlua0hhc2ggbGlua0hhc2gpCit2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0
ZWRMaW5rKFBhZ2UmLCBTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQogewogICAgIGlmICghc19z
aG91bGRUcmFja1Zpc2l0ZWRMaW5rcykKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3LDcgKzExNyw3
IEBAIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6cG9wdWxhdGVWaXNpdGVkTGlua3NJZk5lZWRl
ZChQYWdlJiBzb3VyY2VQYWdlKQogICAgIGhpc3RvcnktPmFkZFZpc2l0ZWRMaW5rc1RvVmlzaXRl
ZExpbmtTdG9yZSgqdGhpcyk7CiB9CiAKLXZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlz
aXRlZExpbmtIYXNoKExpbmtIYXNoIGxpbmtIYXNoKQordm9pZCBXZWJWaXNpdGVkTGlua1N0b3Jl
OjphZGRWaXNpdGVkTGlua0hhc2goU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKIHsKICAgICBB
U1NFUlQoc19zaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyk7CiAgICAgbV92aXNpdGVkTGlua0hhc2hl
cy5hZGQobGlua0hhc2gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oCmluZGV4IGU5ZTEyNDQ0NGY0
NDcwOTRiYTk0NmNkN2I3Njc4ZjA5NWNmNGU0NDkuLjZhN2I5OTIyYzNhMzkxNTIyYzNkYTA0N2U0
YTA2OTczYjQwNGQxMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmgKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgV2ViVmlzaXRlZExpbmtTdG9yZV9oCiAjZGVmaW5lIFdlYlZpc2l0ZWRMaW5r
U3RvcmVfaAogCi0jaW5jbHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU2hhcmVkU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVmlzaXRlZExpbmtTdG9y
ZS5oPgogCiBjbGFzcyBXZWJWaXNpdGVkTGlua1N0b3JlIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OlZpc2l0ZWRMaW5rU3RvcmUgewpAQCAtNDIsMTQgKzQyLDE0IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgV2ViVmlzaXRlZExpbmtTdG9yZSgpOwogCi0gICAgYm9vbCBpc0xpbmtWaXNpdGVkKFdl
YkNvcmU6OlBhZ2UmLCBXZWJDb3JlOjpMaW5rSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiBiYXNl
VVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6TGlua0hhc2gpIG92ZXJy
aWRlOworICAgIGJvb2wgaXNMaW5rVmlzaXRlZChXZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hh
cmVkU3RyaW5nSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiBiYXNlVVJMLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVVSTCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRWaXNpdGVkTGluayhX
ZWJDb3JlOjpQYWdlJiwgV2ViQ29yZTo6U2hhcmVkU3RyaW5nSGFzaCkgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzSWZOZWVkZWQoV2ViQ29yZTo6UGFnZSYpOwotICAg
IHZvaWQgYWRkVmlzaXRlZExpbmtIYXNoKFdlYkNvcmU6OkxpbmtIYXNoKTsKKyAgICB2b2lkIGFk
ZFZpc2l0ZWRMaW5rSGFzaChXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoKTsKICAgICB2b2lkIHJl
bW92ZVZpc2l0ZWRMaW5rSGFzaGVzKCk7CiAKLSAgICBIYXNoU2V0PFdlYkNvcmU6OkxpbmtIYXNo
LCBXZWJDb3JlOjpMaW5rSGFzaEhhc2g+IG1fdmlzaXRlZExpbmtIYXNoZXM7CisgICAgSGFzaFNl
dDxXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoLCBXZWJDb3JlOjpTaGFyZWRTdHJpbmdIYXNoSGFz
aD4gbV92aXNpdGVkTGlua0hhc2hlczsKICAgICBib29sIG1fdmlzaXRlZExpbmtzUG9wdWxhdGVk
OwogfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>