<?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>101621</bug_id>
          
          <creation_ts>2012-11-08 10:22:33 -0800</creation_ts>
          <short_desc>CookieJar uses Document class, which is a layering violation</short_desc>
          <delta_ts>2012-11-15 19:07:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>beidson</cc>
    
    <cc>danw</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>mifenton</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pilgrim</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>761920</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 10:22:33 -0800</bug_when>
    <thetext>Platform code should not use Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761923</commentid>
    <comment_count>1</comment_count>
      <attachid>173063</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 10:24:02 -0800</bug_when>
    <thetext>Created attachment 173063
first attempt

No ChangeLog yet, just running by EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761965</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-08 10:48:36 -0800</bug_when>
    <thetext>Mark Pilgrim is also working on this issue in bug 99340, using a slightly different approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761972</commentid>
    <comment_count>3</comment_count>
      <attachid>173072</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 10:54:31 -0800</bug_when>
    <thetext>Created attachment 173072
second attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761975</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 10:58:41 -0800</bug_when>
    <thetext>I haven&apos;t seen that bug!

I prefer my approach though - further spreading dependency of Frame and FrameLoader client seems undesirable when we already have NetowrkingContext that many platforms use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761993</commentid>
    <comment_count>5</comment_count>
      <attachid>173078</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 11:16:15 -0800</bug_when>
    <thetext>Created attachment 173078
third attempt

WIll it finally apply?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761999</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-08 11:27:02 -0800</bug_when>
    <thetext>We want to delete PlatformSupport.  I&apos;ll need to look at your approach to see if it conflicts with that goal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762009</commentid>
    <comment_count>7</comment_count>
      <attachid>173083</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 11:42:35 -0800</bug_when>
    <thetext>Created attachment 173083
another attempt

Manually edited the patch to apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762017</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 11:46:03 -0800</bug_when>
    <thetext>&gt; We want to delete PlatformSupport.  I&apos;ll need to look at your approach to see if it conflicts with that goal.

Please do have a look!

I do not think that there will be a conflict. With this patch, CookieJar is split into two versions - one that uses non-platform concepts, and another that is purely an interface to underlying platform. There should be enough flexibility for any port here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762018</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 11:47:44 -0800</bug_when>
    <thetext>Attachment 173083 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Sou...&quot; exit_code: 1
Source/WebCore/platform/network/qt/CookieJarQt.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/network/PlatformCookieJar.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/network/soup/CookieJarSoup.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/loader/CookieJar.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762021</commentid>
    <comment_count>10</comment_count>
      <attachid>173083</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-08 11:48:31 -0800</bug_when>
    <thetext>Comment on attachment 173083
another attempt

Attachment 173083 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14775195</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762023</commentid>
    <comment_count>11</comment_count>
      <attachid>173083</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-08 11:50:05 -0800</bug_when>
    <thetext>Comment on attachment 173083
another attempt

Attachment 173083 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14762778</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762025</commentid>
    <comment_count>12</comment_count>
      <attachid>173083</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-08 11:51:50 -0800</bug_when>
    <thetext>Comment on attachment 173083
another attempt

Attachment 173083 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14779005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762067</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-08 12:35:25 -0800</bug_when>
    <thetext>&gt; Please do have a look!

Thanks.  Unfortunately, my afternoon is booked.  I&apos;ll be able to take a look this evening.

One of the design pressures in Mark&apos;s patch is that Chromium might want to use different cookie jars in different frames.  That&apos;s the reason for the introduction of the CookieJar class rather than using free functions.

The CookieJar class can then carry platform-specific state.  For example, on Chromium, the CookieJar can carry a reference to which cookie jar this document should use.  On other platforms, it might be appropriate for the CookieJar class to carry a NetworkingContext.

I haven&apos;t looked at Mark&apos;s most recent patch, but he says that it removes the Document layering violation as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762136</commentid>
    <comment_count>14</comment_count>
      <attachid>173083</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-11-08 13:40:27 -0800</bug_when>
    <thetext>Comment on attachment 173083
another attempt

Attachment 173083 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14770333</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762149</commentid>
    <comment_count>15</comment_count>
      <attachid>173113</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 13:52:50 -0800</bug_when>
    <thetext>Created attachment 173113
patch for review

Chromium bot is slow today. Fixed errors that EWS reported for other ports. There will probably be more errors, but this is ready for review.

&gt; One of the design pressures in Mark&apos;s patch is that Chromium might want to use different cookie jars in different frames.  That&apos;s the reason for the introduction of the CookieJar class rather than using free functions.

This design goal makes sense, and I think that my patch doesn&apos;t make it harder. The WebCore level interface to CookieJar is unchanged - I would certainly prefer if chromium turned to a platform level abstraction like NetworkingContext, but you can keep using a Frame if such a change is undesirable.

Unfortunately, converting CookieJar into a class won&apos;t work for Mac (and Mark&apos;s patch leaves Mac in a confusing state). We don&apos;t have a separate independent cookie storage that could be encapsulated in a class - in most cases, cookie storage is part of a &quot;storage session&quot;. This is why getting cookie storage from a networking context is the design I prefer.

I&apos;m extremely sad that we&apos;ve got so much wasted effort on Mark&apos;s part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762151</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 13:58:26 -0800</bug_when>
    <thetext>Attachment 173113 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/loader/CookieJar.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762154</commentid>
    <comment_count>17</comment_count>
      <attachid>173113</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-08 14:02:30 -0800</bug_when>
    <thetext>Comment on attachment 173113
patch for review

Attachment 173113 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14775230</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762159</commentid>
    <comment_count>18</comment_count>
      <attachid>173113</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-08 14:06:29 -0800</bug_when>
    <thetext>Comment on attachment 173113
patch for review

Attachment 173113 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14758887</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762163</commentid>
    <comment_count>19</comment_count>
      <attachid>173113</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-11-08 14:13:34 -0800</bug_when>
    <thetext>Comment on attachment 173113
patch for review

This approach seems fine to me.  Gotta fix the last lingering errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762164</commentid>
    <comment_count>20</comment_count>
      <attachid>173113</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-08 14:17:24 -0800</bug_when>
    <thetext>Comment on attachment 173113
patch for review

Attachment 173113 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14777140</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762179</commentid>
    <comment_count>21</comment_count>
      <attachid>173117</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 14:29:21 -0800</bug_when>
    <thetext>Created attachment 173117
more build fixing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762188</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 14:34:51 -0800</bug_when>
    <thetext>Attachment 173117 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/loader/CookieJar.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762301</commentid>
    <comment_count>23</comment_count>
      <attachid>173143</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 16:22:37 -0800</bug_when>
    <thetext>Created attachment 173143
proposed patch

EWS is still way behind. Someone helped me check and fix Chromium build. Should be fully ready for review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762320</commentid>
    <comment_count>24</comment_count>
      <attachid>173143</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-11-08 16:44:56 -0800</bug_when>
    <thetext>Comment on attachment 173143
proposed patch

Looks good.  If Adam wants another chance to take a look, do that too.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762446</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-08 19:12:31 -0800</bug_when>
    <thetext>&gt; If Adam wants another chance to take a look, do that too.  :)

I would like to take a look before you land this patch.  It&apos;s on my list for tonight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763060</commentid>
    <comment_count>26</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-09 09:00:13 -0800</bug_when>
    <thetext>Adam, did you have any comments? I&apos;d like to land soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763124</commentid>
    <comment_count>27</comment_count>
      <attachid>173143</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 10:08:35 -0800</bug_when>
    <thetext>Comment on attachment 173143
proposed patch

Clearing flags on attachment: 173143

Committed r134082: &lt;http://trac.webkit.org/changeset/134082&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763125</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 10:08:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763188</commentid>
    <comment_count>29</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-09 11:24:04 -0800</bug_when>
    <thetext>&gt; Adam, did you have any comments? I&apos;d like to land soon.

Sorry, I got distracted last night and fell asleep.  I&apos;ll look now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763191</commentid>
    <comment_count>30</comment_count>
      <attachid>173143</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-09 11:28:00 -0800</bug_when>
    <thetext>Comment on attachment 173143
proposed patch

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

&gt; Source/WebCore/loader/CookieJar.cpp:48
&gt; +    if (!loader)
&gt; +        return 0;

This check isn&apos;t needed.  It&apos;s not possible for frame-&gt;loader() to be 0.

&gt; Source/WebCore/loader/CookieJar.cpp:55
&gt; +String cookies(const Document* document, const KURL&amp; url)
&gt; +{
&gt; +    return cookiesForDOM(networkingContext(document), document-&gt;firstPartyForCookies(), url);
&gt; +}

We should be able to inline these functions into their callers.  I guess the problem is that Chromium and Blackberry don&apos;t use this file?  We should be able to teach Chromium to use the NetworkingContext rather than the document, especially if we have a NetworkingContextClient that the code can use to ask which cookie jar is appropriate.

&gt; Source/WebCore/loader/chromium/CookieJarChromium.cpp:40
&gt; +// FIXME: Unfork. This file is forked because all other platforms use NetworkingContext to access cookie jar, not Document or Frame.

We should be able to unfork this file by adding a NetworkingContextClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763199</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-09 11:39:11 -0800</bug_when>
    <thetext>&gt; We should be able to teach Chromium to use the NetworkingContext rather than the document, especially if we have a NetworkingContextClient that the code can use to ask which cookie jar is appropriate.

Sound right to me. Not sure if a client is needed, or a proper configured NetworkingContext can be just associated with the frame in advance.

I fully agree that once ports are unforked, further cleanup can be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768827</commentid>
    <comment_count>32</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-15 19:07:33 -0800</bug_when>
    <thetext>Followup: bug 102456 in preparation for Chromium integration.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173063</attachid>
            <date>2012-11-08 10:24:02 -0800</date>
            <delta_ts>2012-11-08 10:54:31 -0800</delta_ts>
            <desc>first attempt</desc>
            <filename>CookieJar.txt</filename>
            <type>text/plain</type>
            <size>110925</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMzNzA1KQorKysg
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzg1
Nyw2ICszODU3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVQb2xpY3kuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1l
dGFkYXRhLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmggXAor
CVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ29va2llSmFyLmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFj
Y2Vzc0NvbnRyb2wuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlLmNwcCBcCkBAIC00MjQ3LDcgKzQyNDksNiBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q29va2llc1N0cmF0ZWd5LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0N1cnNvci5jcHAgXApAQCAtNDcxNCw2ICs0NzE1LDcgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Byb3h5U2VydmVy
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZp
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5v
dGlmaWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29r
aWVKYXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3Bh
Y2VIYXNoLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNw
YWNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3Bh
Y2UuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCShyZXZp
c2lvbiAxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX0lO
Q0xVREVfRElSRUNUT1JJRVMKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRp
bmcvYmxhY2tiZXJyeS9FZGl0b3JCbGFja0JlcnJ5LmNwcAogICAgIGVkaXRpbmcvYmxhY2tiZXJy
eS9TbWFydFJlcGxhY2VCbGFja0JlcnJ5LmNwcAorICAgIGxvYWRlci9ibGFja2JlcnJ5L0Nvb2tp
ZUphckJsYWNrQmVycnkuY3BwCiAgICAgcGFnZS9ibGFja2JlcnJ5L0FjY2Vzc2liaWxpdHlPYmpl
Y3RCbGFja0JlcnJ5LmNwcAogICAgIHBhZ2UvYmxhY2tiZXJyeS9EcmFnQ29udHJvbGxlckJsYWNr
QmVycnkuY3BwCiAgICAgcGFnZS9ibGFja2JlcnJ5L0V2ZW50SGFuZGxlckJsYWNrQmVycnkuY3Bw
CkBAIC0xNDgsNyArMTQ5LDYgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2Js
YWNrYmVycnkvQ29udGV4dE1lbnVCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVy
cnkvQ29udGV4dE1lbnVJdGVtQmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5
L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCiAgICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9DdXJzb3JC
bGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0RhdGFCbGFja0JlcnJ5
LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0ltYWdlQmxhY2tCZXJyeS5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMzNzA1KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGxvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudC5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5jcHAgXAorICAgIGxvYWRlci9Db29raWVKYXIuY3BwIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmln
aW5BY2Nlc3NDb250cm9sLmNwcCBcCiAgICAgbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVz
dWx0Q2FjaGUuY3BwIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3Bw
IFwKQEAgLTE5NDksNiArMTk1MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5oIFwKICAgICBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaCBcCisgICAgbG9hZGVyL0Nvb2tp
ZUphci5oIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmggXAogICAgIGxv
YWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmggXAogICAgIGxvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oIFwKQEAgLTIyMzcsNiArMjIzOSw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvTUlNRVNuaWZmaW5nLmggXAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JrU3RhdGVOb3RpZmllci5oIFwKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2ll
SmFyLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmggXAogICAgIHBs
YXRmb3JtL25ldHdvcmsvUHJveHlTZXJ2ZXIuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9R
dE1JTUVUeXBlU25pZmZlci5oIFwKQEAgLTIyNDksNiArMjI1Miw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIFwKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
cXQvTmV0d29ya1N0YXRlTm90aWZpZXJQcml2YXRlLmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsv
cXQvQ29va2llSmFyUXQuaCBcCiAgICAgcGxhdGZvcm0vUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBc
CiAgICAgcGxhdGZvcm0vUGxhdGZvcm1NZW1vcnlJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgcGxh
dGZvcm0vUGxhdGZvcm1Ub3VjaEV2ZW50LmggXApAQCAtMjI1Niw3ICsyMjYwLDYgQEAgSEVBREVS
UyArPSBcCiAgICAgcGxhdGZvcm0vUG9wdXBNZW51LmggXAogICAgIHBsYXRmb3JtL1JlZmVycmVy
UG9saWN5LmggXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggXAotICAgIHBsYXRmb3Jt
L3F0L0Nvb2tpZUphclF0LmggXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmggXAog
ICAgIHBsYXRmb3JtL3F0L1FTdHlsZUZhY2FkZS5oIFwKICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVFTdHlsZS5oIFwKQEAgLTI4MDQsNiArMjgwNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIFwKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL0ROU1Jlc29sdmVRdWV1ZS5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
TUlNRVNuaWZmaW5nLmNwcCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5j
cHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvQ3JlZGVudGlhbFN0b3JhZ2VRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAgXAogICAgIHBsYXRm
b3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwIFwKQEAgLTI4MTcsNyArMjgyMSw2
IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcCBcCiAgICAg
cGxhdGZvcm0vcXQvQ29udGV4dE1lbnVJdGVtUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Db250
ZXh0TWVudVF0LmNwcCBcCi0gICAgcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwIFwKICAgICBw
bGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAgXApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQkocmV2aXNpb24gMTMzNzA1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50
LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgnLAorICAg
ICAgICAgICAgJ2xvYWRlci9Db29raWVKYXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Nyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0RvY3Vt
ZW50TG9hZFRpbWluZy5oJywKICAgICAgICAgICAgICdsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaCcs
CkBAIC0yNzMsNyArMjc0LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ29va2llLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL0Nvb2tpZUphci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ3Vyc29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RhdGVDb21wb25l
bnRzLmgnLApAQCAtMzEyLDYgKzMxMiw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZv
cm1Nb3VzZUV2ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9QbGF0Zm9ybUNvb2tpZUphci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oJywKQEAgLTI5NjEs
NiArMjk2Miw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5o
JywKICAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuY3BwJywKICAgICAgICAgICAg
ICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaCcsCisgICAgICAgICAgICAnbG9hZGVyL0Nvb2tpZUph
ci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3Bw
JywKICAgICAgICAgICAgICdsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgnLAogICAg
ICAgICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCcsCkBA
IC0zMDY4LDYgKzMwNzAsNyBAQAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jZi9SZXNvdXJjZUxvYWRlckNGTmV0LmNwcCcs
CiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJhd1Jlc291cmNlQ2hyb21pdW0u
Y3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vUmVzb3VyY2VMb2Fk
ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9TdWJyZXNvdXJj
ZUxvYWRlckNocm9taXVtLmNwcCcsCkBAIC01NDcyLDcgKzU0NzUsNiBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21h
Yy9Db250ZXh0TWVudUl0ZW1NYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9Db250
ZXh0TWVudU1hYy5tbScsCi0gICAgICAgICAgICAncGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbScs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0N1cnNvck1hYy5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMv
RHJhZ0ltYWdlTWFjLm1tJywKQEAgLTU1OTAsNyArNTU5Miw2IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvY2hyb21pdW0vRE5TQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3
b3JrL2Nocm9taXVtL1Jlc291cmNlRXJyb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0
d29yay9jaHJvbWl1bS9SZXNvdXJjZUhhbmRsZS5jcHAnLApAQCAtNTYxOCw2ICs1NjE5LDcgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVD
dXJsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVudGljYXRp
b25NYWMubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1h
Yy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llU3RvcmFnZU1h
Yy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3Jh
Z2VNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3Ry
ZWFtTWFjLm1tJywKQEAgLTU2MjgsNiArNTYzMCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VSZXNwb25zZU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZv
cm0vbmV0d29yay9tYWMvV2ViQ29yZVVSTFJlc3BvbnNlLm1tJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9uZXR3b3JrL3F0L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9uZXR3b3JrL3F0L0NyZWRlbnRpYWxTdG9yYWdlUXQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9uZXR3b3JrL3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUHJpdmF0ZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUXQuY3BwJywK
QEAgLTU2NzgsNyArNTY4MSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvQ2xpcGJvYXJk
UXQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvQ29udGV4dE1lbnVJdGVtUXQuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9x
dC9DdXJzb3JRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAnLApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEz
MzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzQxNSw2ICsyNzQxNSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ29va2llSmFyLmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENv
b2tpZUphci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxsb2FkZXJcQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CkBAIC0yODI4NywxMCArMjgyOTUsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxDb29raWVKYXIuaCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29va2llc1N0
cmF0ZWd5LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMzI1MTgsNiArMzI1MjIsMTAgQEAKIAkJ
CQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXG5ldHdvcmtcUGxhdGZvcm1Db29raWVKYXIuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcUHJvdGVjdGlv
blNwYWNlLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMzcwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzI3MCw4ICszMjcwLDYgQEAKIAkJOTM1MDBGMzIxM0ZERTNCRTAwOTlF
QzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzUwMEYzMTEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxl
ckltcERldGFpbHMuaCAqLzsgfTsKIAkJOTM1MjA3QkUwOUJENDEwQTAwRjIwMzhEIC8qIExvY2Fs
aXplZFN0cmluZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzNTIwN0JEMDlCRDQxMEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM1MjA4NDUwOUJE
NDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM1MjA4NDQwOUJENDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1t
ICovOyB9OwotCQk5MzUyMDg3NzA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MjA4NzYwOUJENDUz
NDAwRjIwMzhEIC8qIENvb2tpZUphci5tbSAqLzsgfTsKLQkJOTM1MjA4ODIwOUJENDVFOTAwRjIw
MzhEIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTM1MjA4ODEwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzNTM2NzZCMDlBRUQ4
OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MzY3NkEwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZp
ZXdNYWMubW0gKi87IH07CiAJCTkzNUM0NzYzMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzVDNDc2MjA5QUM0Q0U2MDBBNkFBQjQgLyogTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cy5oICovOyB9OwogCQk5MzVDNDc2ODA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZv
cm1LZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzVDNDc2NjA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYw
NDgsNiArNjA0NiwxMCBAQAogCQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNv
bHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTM5ODY2MTE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi87IH07CiAJCUUx
Mzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUg
LyogU3R5bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyog
Q29va2llU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1t
ICovOyB9OworCQlFMTQyNEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29raWVKYXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0Qzg5
MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyB9OworCQlFMTQyNEM5
MDE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDOEYxNjRCNDYwQjAwRjMyRDQwIC8qIENv
b2tpZUphck1hYy5tbSAqLzsgfTsKKwkJRTE0MjRDOTMxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tp
ZUphci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTQyNEM5MTE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCAqLzsgfTsKKwkJRTE0MjRD
OTQxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDOTIxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tp
ZUphci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUUxNEYxQzQ0MTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NEYxQzQyMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
LmNwcCAqLzsgfTsKIAkJRTE0RjFDNDUxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNEYxQzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRTE1QTM2RDcxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNUEzNkQ2MTEwNDU3MjAw
MEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi87IH07CkBAIC0xMDQ5Nyw4ICsxMDQ5OSw2IEBACiAJ
CTkzNTAwRjMxMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOU1Njcm9sbGVySW1wRGV0YWlscy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzUyMDdCRDA5QkQ0MTBBMDBGMjAzOEQgLyogTG9j
YWxpemVkU3RyaW5ncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbGl6
ZWRTdHJpbmdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNTIwODQ0MDlCRDQz
QjkwMEYyMDM4RCAvKiBMYW5ndWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IExhbmd1YWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MzUy
MDg3NjA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2llSmFyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5MzUyMDg4MTA5QkQ0NUU5MDBGMjAzOEQgLyogQ29va2llSmFyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvb2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzUzNjc2QTA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbFZpZXdNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNUM0NzYyMDlBQzRDRTYwMEE2QUFCNCAv
KiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM1QzQ3NjYwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNDUwLDYgKzEzNDUw
LDEwIEBACiAJCUUxMzk4NjYyMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tpZVN0
b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llU3RvcmFnZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTNGMDFGMDEyNzBFMTkwMDBERkJBNzEg
LyogQ29va2llU3RvcmFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IENvb2tpZVN0b3JhZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUNvb2tpZUphci5oOyBwYXRoID0gbmV0
d29yay9QbGF0Zm9ybUNvb2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2llSmFyTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMTQyNEM5MTE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvb2tpZUphci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNDI0QzkyMTY0QjUyQzgwMEYzMkQ0MCAvKiBD
b29raWVKYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llSmFyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNEYxQzQyMTRCNURBQzYwMEVBOTAwOSAv
KiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTRGMUM0MzE0QjVEQUM2MDBFQTkwMDkgLyog
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxNUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTE5TTmFtZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NzE1LDYgKzE1NzE5LDcgQEAKIAkJCQk1MTRDNzY0
NDBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMuaCAqLywKIAkJCQk1MTRDNzY0
NTBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMubW0gKi8sCiAJCQkJMUE3RkE2
NDcwRERBM0NCQTAwMjhGOEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVyTWFjLmNwcCAqLywKKwkJ
CQlFMTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovLAogCQkJCTUx
NEM3NjQ2MENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZUVycm9yTWFjLm1tICovLAogCQkJCTUx
NEM3NjQ3MENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZU1hYy5tbSAqLywKIAkJCQk1
MTRDNzY0OTBDRTkyMzRFMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0TWFjLm1tICovLApAQCAt
MTU3MzcsNyArMTU3NDIsNiBAQAogCQkJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlw
Ym9hcmRNYWMubW0gKi8sCiAJCQkJMDYwMjdDQjIwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRleHRN
ZW51SXRlbU1hYy5tbSAqLywKIAkJCQk5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4
dE1lbnVNYWMubW0gKi8sCi0JCQkJOTM1MjA4NzYwOUJENDUzNDAwRjIwMzhEIC8qIENvb2tpZUph
ci5tbSAqLywKIAkJCQlGNTg3ODRGMDAyREUzNzU5MDFFQTQxMjIgLyogQ3Vyc29yTWFjLm1tICov
LAogCQkJCTVEOEM0REJEMTQyODIyMkMwMDI2Q0U3MiAvKiBEaXNwbGF5U2xlZXBEaXNhYmxlci5j
cHAgKi8sCiAJCQkJNUQ4QzREQkUxNDI4MjIyQzAwMjZDRTcyIC8qIERpc3BsYXlTbGVlcERpc2Fi
bGVyLmggKi8sCkBAIC0yMDY5Nyw2ICsyMDcwMSw4IEBACiAJCQkJRTFDNDE2MTYwRjY1NjMxODAw
OTJEMkZCIC8qIENyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgKi8sCiAJCQkJNEZDODUzNDkx
NjQ0MjcxQjAwRDFDMjc1IC8qIENhY2hlZE1ldGFkYXRhLmNwcCAqLywKIAkJCQk0RkM4NTM0QTE2
NDQyNzFCMDBEMUMyNzUgLyogQ2FjaGVkTWV0YWRhdGEuaCAqLywKKwkJCQlFMTQyNEM5MTE2NEI1
MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCAqLywKKwkJCQlFMTQyNEM5MjE2NEI1MkM4MDBG
MzJENDAgLyogQ29va2llSmFyLmggKi8sCiAJCQkJRTFDNDE2MTEwRjY1NjJGRDAwOTJEMkZCIC8q
IENyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oICovLAogCQkJCUUxQzQxNUREMEY2NTVEN0MwMDky
RDJGQiAvKiBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCAqLywKIAkJCQlFMUM0
MTVEOTBGNjU1RDZGMDA5MkQyRkIgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5o
ICovLApAQCAtMjA4NjEsNyArMjA4NjcsNiBAQAogCQkJCTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3
QSAvKiBDb250ZXh0TWVudS5oICovLAogCQkJCTA2MDI3Q0FDMEIxQ0JGQzAwMDg4NEIyRCAvKiBD
b250ZXh0TWVudUl0ZW0uaCAqLywKIAkJCQlEOEI2MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29v
a2llLmggKi8sCi0JCQkJOTM1MjA4ODEwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oICov
LAogCQkJCTMzOUI1QjYyMTMxREFBMzIwMEY0OEQwMiAvKiBDb29raWVzU3RyYXRlZ3kuaCAqLywK
IAkJCQkyRTQzNDY1NjBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICov
LAogCQkJCTJFNDM0NjU3MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oICov
LApAQCAtMjA5MjQsNiArMjA5MjksNyBAQAogCQkJCTk4RUIxRjk0MTMxM0ZFMDUwMEQwRTFFQSAv
KiBOb3RJbXBsZW1lbnRlZC5oICovLAogCQkJCTRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQ
YXN0ZWJvYXJkLmggKi8sCiAJCQkJQzVGNzY1QjQxNEUxRDQxNDAwNkM4OTlCIC8qIFBhc3RlYm9h
cmRTdHJhdGVneS5oICovLAorCQkJCUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9y
bUNvb2tpZUphci5oICovLAogCQkJCUJDNUM3NjI4MTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9y
bUV2ZW50LmNwcCAqLywKIAkJCQlCQzVDNzYyOTE0OTdGRTE0MDBCQzQ3NzUgLyogUGxhdGZvcm1F
dmVudC5oICovLAogCQkJCUE3MjNGNzdBMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9y
dE1hY3Jvcy5oICovLApAQCAtMjI2MzAsNyArMjI2MzYsNiBAQAogCQkJCTdBREU3MjI2MTBDQkJC
OUIwMDZCM0IzQSAvKiBDb250ZXh0TWVudVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RDMxNjAyOTEyQjAyNjc2MDBDMUEzNTkgLyogQ29udm9sdmVyTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRDhCNjE1MkYxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJOTM1MjA4ODIwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzM5QjVCNjMxMzFEQUEzMjAwRjQ4RDAyIC8qIENvb2tpZXNTdHJhdGVneS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzNEMDIxMkQxMzFEQjM3QjAwNDA5MUE4IC8qIENvb2tpZVN0b3Jh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFRTY4NDY0MTJEMjZFMzgwMEU3OTQxNSAvKiBDb29r
aWVTdG9yYWdlQ0ZOZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2OTIsNiArMjU2OTcsOCBAQAog
CQkJCTNGRkZGOUE5MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzQzM4QkZGMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDMzhDMDMxNjQ0NzNERDAwMDkx
RUIyIC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxNDI0
QzhBMTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTE0MjRDOTQxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0yNjIxMCw3ICsyNjIxNyw2IEBACiAJCQkJMDYwMjdDQjMwQjFDQzAzRDAwODg0QjJE
IC8qIENvbnRleHRNZW51SXRlbU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzQjZBMEVBMEIw
QkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZE
MzE2MDI4MTJCMDI2NzYwMEMxQTM1OSAvKiBDb252b2x2ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTkzNTIwODc3MDlCRDQ1MzQwMEYyMDM4RCAvKiBDb29raWVKYXIubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3RUU2ODQ2MjEyRDI2RTM4MDBFNzk0MTUgLyogQ29va2llSmFyQ0ZOZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NjMxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0
b3JhZ2VDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJB
NzEgLyogQ29va2llU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMjg3NzgsNiArMjg3
ODQsOCBAQAogCQkJCTkzQzM4QkZFMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0ZUZp
eGVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0MzOEMwNDE2NDQ3M0REMDAwOTFFQjIg
LyogU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTRGQzg1MzRD
MTY0NDI3MjMwMEQxQzI3NSAvKiBDYWNoZWRNZXRhZGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlFMTQyNEM5MDE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTE0MjRDOTMxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ29va2llSmFyLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKKworI2lmIFBMQVRGT1JNKENIUk9N
SVVNKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQorI2Vycm9yIENocm9taXVtIGFuZCBCbGFja2Jl
cnJ5IGN1cnJlbnRseSB1c2UgYSBmb3JrIG9mIHRoaXMgZmlsZSBiZWNhdXNlIG9mIGxheWVyaW5n
IHZpb2xhdGlvbnMKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBOZXR3
b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
KQoreworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVy
biAwOworICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7CisgICAgaWYg
KCFsb2FkZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtp
bmdDb250ZXh0KCk7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBjb29raWVzRm9yRE9NKG5ldHdvcmtp
bmdDb250ZXh0KGRvY3VtZW50KSwgdXJsKTsKK30KKwordm9pZCBzZXRDb29raWVzKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykK
K3sKKyAgICBzZXRDb29raWVzRnJvbURPTShuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmwsIGNvb2tpZVN0cmluZyk7Cit9CisK
K2Jvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJl
dHVybiBjb29raWVzRW5hYmxlZChuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCkpOworfQorCitT
dHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgdXJsKTsKK30KKworYm9vbCBn
ZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBW
ZWN0b3I8Q29va2llPiYgY29va2llcykKK3sKKyAgICByZXR1cm4gZ2V0UmF3Q29va2llcyhuZXR3
b3JraW5nQ29udGV4dChkb2N1bWVudCksIHVybCwgY29va2llcyk7Cit9CisKK3ZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgZGVsZXRlQ29va2llKG5ldHdvcmtpbmdDb250ZXh0
KGRvY3VtZW50KSwgdXJsLCBjb29raWVOYW1lKTsKK30KKwordm9pZCBnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBnZXRIb3N0bmFtZXNX
aXRoQ29va2llcygwLCBob3N0bmFtZXMpOworfQorCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQoreworICAgIGRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZSgwLCBob3N0bmFtZSk7Cit9CisKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygpCit7CisgICAg
ZGVsZXRlQWxsQ29va2llcygwKTsKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1z
dHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmgJKHJldmlz
aW9uIDEzMzcwNSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmg6MTMz
NzA1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29va2llSmFy
X2gKKyNkZWZpbmUgQ29va2llSmFyX2gKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9j
dW1lbnQ7CitjbGFzcyBLVVJMOworc3RydWN0IENvb2tpZTsKKworLy8gVGhlc2UgdHdvIGZ1bmN0
aW9ucyBpbXBsZW1lbnQgZG9jdW1lbnQuY29va2llIEFQSSwgd2l0aCBzcGVjaWFsIHJ1bGVzIGZv
ciBIdHRwT25seSBjb29raWVzLgorU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJik7Cit2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
U3RyaW5nJik7CisKKy8vIFRoZXNlIG1ldGhvZHMgdXNlIGN1cnJlbnQgY29va2llIHN0b3JhZ2Us
IHRodXMgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQuCitib29sIGNv
b2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7CitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Citib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKK3Zv
aWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYpOworCisvLyBUaGVzZSBmdW5jdGlvbnMgYWx3YXlzIGFjY2VzcyBkZWZhdWx0IGNvb2tpZSBz
dG9yYWdlLCBub3QgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQuCit2
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsK
K3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOwor
dm9pZCBkZWxldGVBbGxDb29raWVzKCk7CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvQ29va2llSmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvQ29va2llSmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5
LDEzICszOSwxMyBAQCBzdHJ1Y3QgQ29va2llOwogCiAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGlt
cGxlbWVudCBkb2N1bWVudC5jb29raWUgQVBJLCB3aXRoIHNwZWNpYWwgcnVsZXMgZm9yIEh0dHBP
bmx5IGNvb2tpZXMuCiBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
KTsKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
KTsKK3ZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
IGNvb2tpZVN0cmluZyk7CiAKIC8vIFRoZXNlIG1ldGhvZHMgdXNlIGN1cnJlbnQgY29va2llIHN0
b3JhZ2UsIHRodXMgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQuCiBi
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7CiBTdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7CiBib29sIGdl
dFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4m
KTsKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYpOwordm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKTsKIAogLy8gVGhlc2UgZnVuY3Rpb25zIGFsd2F5
cyBhY2Nlc3MgZGVmYXVsdCBjb29raWUgc3RvcmFnZSwgbm90IHRha2luZyBwcml2YXRlIGJyb3dz
aW5nIG1vZGUgaW50byBhY2NvdW50Lgogdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYmxh
Y2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24g
MTMzNzA1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZUph
ckJsYWNrQmVycnkuY3BwOjEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9ibGFja2Jl
cnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAtMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisKKyNpbmNsdWRlICJDb29raWUuaCIKKyNpbmNsdWRl
ICJDb29raWVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5oIgorI2luY2x1ZGUg
IktVUkwuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTdHJpbmcgY29va2llcyhEb2N1bWVudCBjb25zdCogZG9jdW1lbnQsIEtVUkwgY29uc3QmIHVy
bCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBQYWdlKiBw
YWdlID0gZnJhbWUgPyBmcmFtZS0+cGFnZSgpIDogMDsKKworICAgIGlmICghcGFnZSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKCEoZnJhbWUgJiYgZnJhbWUtPmxvYWRlcigp
ICYmIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKKyAgICBpZiAoIXN0YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KGZy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5jb29raWVzRW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisKKyAgICBBU1NFUlQoZG9jdW1lbnQgJiYgdXJsID09IGRvY3VtZW50LT5j
b29raWVVUkwoKSk7CisgICAgLy8gJ0h0dHBPbmx5JyBjb29raWVzIHNob3VsZCBubyBiZSBhY2Nl
c3NpYmxlIGZyb20gc2NyaXB0cywgc28gd2UgZmlsdGVyIHRoZW0gb3V0IGhlcmUKKyAgICByZXR1
cm4gY29va2llTWFuYWdlcigpLmdldENvb2tpZSh1cmwsIE5vSHR0cE9ubHlDb29raWUpOworfQor
Cit2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBLVVJMIGNvbnN0JiB1cmwsIFN0
cmluZyBjb25zdCYgdmFsdWUpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1l
KCk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7CisKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghKGZyYW1lICYmIGZyYW1lLT5s
b2FkZXIoKSAmJiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkqPihmcmFt
ZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+Y29va2llc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKGRvY3VtZW50ICYmIHVybCA9PSBkb2N1bWVudC0+Y29va2llVVJMKCkp
OworICAgIGNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKHVybCwgdmFsdWUsIE5vSHR0cE9ubHlD
b29raWUpOworfQorCitib29sIGNvb2tpZXNFbmFibGVkKERvY3VtZW50IGNvbnN0KikKK3sKKyAg
ICAvLyBGSVhNRS4gQ3VycmVudGx5IGNvb2tpZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIG5vIHNl
dHRpbmcgb24gcHJvcGVydHkgcGFnZS4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBnZXRS
YXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0
b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICBWZWN0b3I8UGFyc2VkQ29va2llKj4gcmVz
dWx0OworICAgIGNvb2tpZU1hbmFnZXIoKS5nZXRSYXdDb29raWVzKHJlc3VsdCwgdXJsLCBXaXRo
SHR0cE9ubHlDb29raWVzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXpl
KCk7IGkrKykKKyAgICAgICAgcmVzdWx0W2ldLT5hcHBlbmRXZWJDb3JlQ29va2llKHJhd0Nvb2tp
ZXMpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1l
KQoreworICAgIC8vIENvb2tpZXMgYXJlIG5vdCBib3VuZCB0byB0aGUgZG9jdW1lbnQuIFRoZXJl
Zm9yZSwgd2UgZG9uJ3QgbmVlZCB0byBwYXNzCisgICAgLy8gaW4gdGhlIGRvY3VtZW50IG9iamVj
dCB0byBmaW5kIHRoZSB0YXJnZXRlZCBjb29raWVzIGluIGNvb2tpZSBtYW5hZ2VyLgorICAgIGNv
b2tpZU1hbmFnZXIoKS5yZW1vdmVDb29raWVXaXRoTmFtZSh1cmwsIGNvb2tpZU5hbWUpOworfQor
CitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMICZ1cmwpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKworICAg
IGlmICghKGRvY3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKSAm
JiBkb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworCisgICAgaWYgKCFzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnkqPihkb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpKS0+Y29va2llc0Vu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIGNvb2tpZU1h
bmFnZXIoKS5nZXRDb29raWUodXJsLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2JsYWNrYmVycnkv
Q29va2llSmFyQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
Ky8vIEZJWE1FOiBVbmZvcmsuIFRoaXMgZmlsZSBpcyBmb3JrZWQgYmVjYXVzZSBhbGwgb3RoZXIg
cGxhdGZvcm1zIHVzZSBOZXR3b3JraW5nQ29udGV4dCB0byBhY2Nlc3MgY29va2llIGphciwgbm90
IERvY3VtZW50IG9yIEZyYW1lLgorCiBTdHJpbmcgY29va2llcyhEb2N1bWVudCBjb25zdCogZG9j
dW1lbnQsIEtVUkwgY29uc3QmIHVybCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9Db29raWVKYXJD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVt
L0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTMzNzA1KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcDoxMzM3
MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgorCisjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgUGxhdGZvcm1TdXBwb3J0Ojpz
ZXRDb29raWVzKGRvY3VtZW50LCB1cmwsIHZhbHVlKTsKK30KKworU3RyaW5nIGNvb2tpZXMoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIFBs
YXRmb3JtU3VwcG9ydDo6Y29va2llcyhkb2N1bWVudCwgdXJsKTsKK30KKworU3RyaW5nIGNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsKQoreworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworfQorCitib29sIGNvb2tpZXNFbmFibGVk
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0
Ojpjb29raWVzRW5hYmxlZChkb2N1bWVudCk7Cit9CisKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJh
d0Nvb2tpZXMpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhkb2N1
bWVudCwgdXJsLCByYXdDb29raWVzKTsKK30KKwordm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFt
ZSkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUoZG9jdW1lbnQs
IHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFz
aFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKK30KKwordm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBo
b3N0bmFtZSkKK3sKKyAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorfQorCit2b2lk
IGRlbGV0ZUFsbENvb2tpZXMoKQoreworICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTMz
NzA1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKKy8vIEZJWE1FOiBVbmZvcmsuIFRoaXMgZmlsZSBpcyBmb3JrZWQgYmVjYXVzZSBhbGwg
b3RoZXIgcGxhdGZvcm1zIHVzZSBOZXR3b3JraW5nQ29udGV4dCB0byBhY2Nlc3MgY29va2llIGph
ciwgbm90IERvY3VtZW50IG9yIEZyYW1lLgorCiB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgUGxh
dGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGRvY3VtZW50LCB1cmwsIHZhbHVlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzM3MDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvb2tpZUphcl9oCi0jZGVmaW5lIENv
b2tpZUphcl9oCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERvY3VtZW50OwotY2xhc3Mg
S1VSTDsKLXN0cnVjdCBDb29raWU7Ci0KLS8vIFRoZXNlIHR3byBmdW5jdGlvbnMgaW1wbGVtZW50
IGRvY3VtZW50LmNvb2tpZSBBUEksIHdpdGggc3BlY2lhbCBydWxlcyBmb3IgSHR0cE9ubHkgY29v
a2llcy4KLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotdm9p
ZCBzZXRDb29raWVzKERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwotCi0v
LyBUaGVzZSBtZXRob2RzIHVzZSBjdXJyZW50IGNvb2tpZSBzdG9yYWdlLCB0aHVzIHRha2luZyBw
cml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50LgotYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCopOwotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci12b2lkIGRlbGV0ZUNvb2tp
ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKLQotLy8gVGhl
c2UgZnVuY3Rpb25zIGFsd2F5cyBhY2Nlc3MgZGVmYXVsdCBjb29raWUgc3RvcmFnZSwgbm90IHRh
a2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50Lgotdm9pZCBnZXRIb3N0bmFt
ZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7Ci12b2lkIGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKLXZvaWQgZGVsZXRlQWxs
Q29va2llcygpOwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCShyZXZp
c2lvbiAxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tp
ZUphckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAtMjAxMS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ29va2llSmFyLmgiCi0KLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJDb29raWVN
YW5hZ2VyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIktVUkwuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRl
ICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TdHJpbmcg
Y29va2llcyhEb2N1bWVudCBjb25zdCogZG9jdW1lbnQsIEtVUkwgY29uc3QmIHVybCkKLXsKLSAg
ICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBQYWdlKiBwYWdlID0gZnJh
bWUgPyBmcmFtZS0+cGFnZSgpIDogMDsKLQotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotCi0gICAgaWYgKCEoZnJhbWUgJiYgZnJhbWUtPmxvYWRlcigpICYmIGZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCkpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBp
ZiAoIXN0YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KGZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCkpLT5jb29raWVzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0KLSAgICBBU1NFUlQoZG9jdW1lbnQgJiYgdXJsID09IGRvY3VtZW50LT5jb29raWVVUkwo
KSk7Ci0gICAgLy8gJ0h0dHBPbmx5JyBjb29raWVzIHNob3VsZCBubyBiZSBhY2Nlc3NpYmxlIGZy
b20gc2NyaXB0cywgc28gd2UgZmlsdGVyIHRoZW0gb3V0IGhlcmUKLSAgICByZXR1cm4gY29va2ll
TWFuYWdlcigpLmdldENvb2tpZSh1cmwsIE5vSHR0cE9ubHlDb29raWUpOwotfQotCi12b2lkIHNl
dENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBLVVJMIGNvbnN0JiB1cmwsIFN0cmluZyBjb25z
dCYgdmFsdWUpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAg
UGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7Ci0KLSAgICBpZiAoIXBhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghKGZyYW1lICYmIGZyYW1lLT5sb2FkZXIoKSAm
JiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkqPihmcmFtZS0+bG9hZGVy
KCktPmNsaWVudCgpKS0+Y29va2llc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKGRvY3VtZW50ICYmIHVybCA9PSBkb2N1bWVudC0+Y29va2llVVJMKCkpOwotICAgIGNv
b2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKHVybCwgdmFsdWUsIE5vSHR0cE9ubHlDb29raWUpOwot
fQotCi1ib29sIGNvb2tpZXNFbmFibGVkKERvY3VtZW50IGNvbnN0KikKLXsKLSAgICAvLyBGSVhN
RS4gQ3VycmVudGx5IGNvb2tpZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIG5vIHNldHRpbmcgb24g
cHJvcGVydHkgcGFnZS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBnZXRSYXdDb29raWVz
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2ll
PiYgcmF3Q29va2llcykKLXsKLSAgICBWZWN0b3I8UGFyc2VkQ29va2llKj4gcmVzdWx0OwotICAg
IGNvb2tpZU1hbmFnZXIoKS5nZXRSYXdDb29raWVzKHJlc3VsdCwgdXJsLCBXaXRoSHR0cE9ubHlD
b29raWVzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7IGkrKykK
LSAgICAgICAgcmVzdWx0W2ldLT5hcHBlbmRXZWJDb3JlQ29va2llKHJhd0Nvb2tpZXMpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAg
IC8vIENvb2tpZXMgYXJlIG5vdCBib3VuZCB0byB0aGUgZG9jdW1lbnQuIFRoZXJlZm9yZSwgd2Ug
ZG9uJ3QgbmVlZCB0byBwYXNzCi0gICAgLy8gaW4gdGhlIGRvY3VtZW50IG9iamVjdCB0byBmaW5k
IHRoZSB0YXJnZXRlZCBjb29raWVzIGluIGNvb2tpZSBtYW5hZ2VyLgotICAgIGNvb2tpZU1hbmFn
ZXIoKS5yZW1vdmVDb29raWVXaXRoTmFtZSh1cmwsIGNvb2tpZU5hbWUpOwotfQotCi1TdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMICZ1cmwpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLQotICAgIGlmICghKGRv
Y3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKSAmJiBkb2N1bWVu
dC0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotCi0gICAgaWYgKCFzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkqPihk
b2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpKS0+Y29va2llc0VuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIGNvb2tpZU1hbmFnZXIoKS5n
ZXRDb29raWUodXJsLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCShy
ZXZpc2lvbiAxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA2LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkNvb2tpZUphci5oIgotCi0jaWYg
IVVTRShDRk5FVFdPUkspCi0KLSNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAi
Q29va2llLmgiCi0jaW1wb3J0ICJDb29raWVTdG9yYWdlLmgiCi0jaW1wb3J0ICJDb29raWVTdG9y
YWdlQ0ZOZXQuaCIKLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFJldGFpblB0cjxO
U0FycmF5PiBmaWx0ZXJDb29raWVzKE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzKQotewotICAg
IE5TVUludGVnZXIgY291bnQgPSBbdW5maWx0ZXJlZENvb2tpZXMgY291bnRdOwotICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gZmlsdGVyZWRDb29raWVzKEFkb3B0TlMsIFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y291bnRdKTsKLQotICAgIGZvciAoTlNVSW50
ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNIVFRQQ29va2llICpjb29r
aWUgPSAoTlNIVFRQQ29va2llICopW3VuZmlsdGVyZWRDb29raWVzIG9iamVjdEF0SW5kZXg6aV07
Ci0KLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IE9uIDEwLjUsIE5TSFRUUENv
b2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29va2llLAotICAgICAgICAvLyB3aGlj
aCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLiBXZSBoYXZlIGEgd29ya2Fyb3VuZCBpbiBz
ZXRDb29raWVzKCkgdG8gcHJldmVudAotICAgICAgICAvLyB0aGF0LCBidXQgd2UgYWxzbyBuZWVk
IHRvIGF2b2lkIHNlbmRpbmcgY29va2llcyB0aGF0IHdlcmUgcHJldmlvdXNseSBzdG9yZWQsIGFu
ZAotICAgICAgICAvLyB0aGVyZSdzIG5vIGhhcm0gdG8gZG9pbmcgdGhpcyBjaGVjayBiZWNhdXNl
IHN1Y2ggYSBjb29raWUgaXMgbmV2ZXIgdmFsaWQuCi0gICAgICAgIGlmICghW1tjb29raWUgbmFt
ZV0gbGVuZ3RoXSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChbY29va2ll
IGlzSFRUUE9ubHldKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgW2ZpbHRlcmVk
Q29va2llcy5nZXQoKSBhZGRPYmplY3Q6Y29va2llXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmls
dGVyZWRDb29raWVzOwotfQotCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmIHVybCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBO
U0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpLmdldCgpLCB1cmwpOwotICAgIHJldHVybiBbW05TSFRUUENvb2tpZSByZXF1ZXN0
SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6ZmlsdGVyQ29va2llcyhjb29raWVzKS5nZXQoKV0gb2Jq
ZWN0Rm9yS2V5OkAiQ29va2llIl07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwot
ICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQotewotICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29r
aWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7Ci0gICAg
cmV0dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpjb29r
aWVzXSBvYmplY3RGb3JLZXk6QCJDb29raWUiXTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQot
ewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFu
IGVtcHR5IGNvb2tpZSwKLSAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0i
LgotICAgIGlmIChjb29raWVTdHIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8v
NDQwOTAzND4KLSAgICAvLyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3Qg
cGFyc2UgY29va2llcyB3aXRob3V0IGEgdmFsdWUKLSAgICBTdHJpbmcgY29va2llU3RyaW5nID0g
Y29va2llU3RyLmNvbnRhaW5zKCc9JykgPyBjb29raWVTdHIgOiBjb29raWVTdHIgKyAiPSI7Ci0K
LSAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwotICAgIFJldGFpblB0cjxOU0FycmF5PiBmaWx0
ZXJlZENvb2tpZXMgPSBmaWx0ZXJDb29raWVzKFtOU0hUVFBDb29raWUgY29va2llc1dpdGhSZXNw
b25zZUhlYWRlckZpZWxkczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OmNvb2tp
ZVN0cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl0gZm9yVVJMOmNvb2tpZVVSTF0pOwotICAgIEFT
U0VSVChbZmlsdGVyZWRDb29raWVzLmdldCgpIGNvdW50XSA8PSAxKTsKLQotICAgIHdrU2V0SFRU
UENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVy
ZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpKTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLWJvb2wgY29va2ll
c0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLQotICAgIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kg
PSBzdGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHdrR2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKSk7Ci0gICAgcmV0
dXJuIGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMg
fHwgY29va2llQWNjZXB0UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9t
TWFpbkRvY3VtZW50RG9tYWluOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmF3
Q29va2llcy5jbGVhcigpOwotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAg
IE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7Ci0gICAgTlNVSW50ZWdlciBjb3VudCA9IFtjb29raWVz
IGNvdW50XTsKLSAgICByYXdDb29raWVzLnJlc2VydmVDYXBhY2l0eShjb3VudCk7Ci0gICAgZm9y
IChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBOU0hUVFBDb29r
aWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbY29va2llcyBvYmplY3RBdEluZGV4OmldOwot
ICAgICAgICBOU1RpbWVJbnRlcnZhbCBleHBpcmVzID0gW1tjb29raWUgZXhwaXJlc0RhdGVdIHRp
bWVJbnRlcnZhbFNpbmNlMTk3MF0gKiAxMDAwOwotICAgICAgICByYXdDb29raWVzLnVuY2hlY2tl
ZEFwcGVuZChDb29raWUoW2Nvb2tpZSBuYW1lXSwgW2Nvb2tpZSB2YWx1ZV0sIFtjb29raWUgZG9t
YWluXSwgW2Nvb2tpZSBwYXRoXSwgZXhwaXJlcywKLSAgICAgICAgICAgIFtjb29raWUgaXNIVFRQ
T25seV0sIFtjb29raWUgaXNTZWN1cmVdLCBbY29va2llIGlzU2Vzc2lvbk9ubHldKSk7Ci0gICAg
fQotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7Ci0KLSAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwotICAgIFJldGFpblB0cjxDRkhUVFBD
b29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3Jh
Z2UoKTsKLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVT
dG9yYWdlLmdldCgpLCBjb29raWVVUkwpOwotCi0gICAgTlNTdHJpbmcgKmNvb2tpZU5hbWVTdHJp
bmcgPSBjb29raWVOYW1lOwotCi0gICAgTlNVSW50ZWdlciBjb3VudCA9IFtjb29raWVzIGNvdW50
XTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVtjb29raWVzIG9iamVjdEF0
SW5kZXg6aV07Ci0gICAgICAgIGlmIChbW2Nvb2tpZSBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6Y29v
a2llTmFtZVN0cmluZ10pCi0gICAgICAgICAgICB3a0RlbGV0ZUhUVFBDb29raWUoY29va2llU3Rv
cmFnZS5nZXQoKSwgY29va2llKTsKLSAgICB9Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotfQotCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYg
aG9zdG5hbWVzKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5T
QXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzKGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdl
KCkuZ2V0KCkpOwotICAgIAotICAgIGZvciAoTlNIVFRQQ29va2llKiBjb29raWUgaW4gY29va2ll
cykKLSAgICAgICAgaG9zdG5hbWVzLmFkZChbY29va2llIGRvbWFpbl0pOwotICAgIAotICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotCi0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0
b3JhZ2UgPSBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIE5TQXJyYXkgKmNvb2tp
ZXMgPSB3a0hUVFBDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwotICAgIGlmICghY29va2ll
cykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGZvciAoTlNIVFRQQ29va2llKiBjb29raWUg
aW4gY29va2llcykgewotICAgICAgICBpZiAoaG9zdG5hbWUgPT0gU3RyaW5nKFtjb29raWUgZG9t
YWluXSkpCi0gICAgICAgICAgICB3a0RlbGV0ZUhUVFBDb29raWUoY29va2llU3RvcmFnZS5nZXQo
KSwgY29va2llKTsKLSAgICB9Ci0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKLXsKLSAgICB3a0RlbGV0ZUFsbEhUVFBDb29r
aWVzKGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCkpOwotfQotCi19Ci0KLSNlbmRp
ZiAvLyAhVVNFKENGTkVUV09SSykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUGxhdGZvcm1Db29raWVKYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2llSmFyLmgJKHJldmlzaW9uIDEzMzcwNSkJKGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmg6MTMzNzA1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29va2llSmFy
X2gKKyNkZWZpbmUgQ29va2llSmFyX2gKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9j
dW1lbnQ7CitjbGFzcyBLVVJMOworc3RydWN0IENvb2tpZTsKKworLy8gVGhlc2UgdHdvIGZ1bmN0
aW9ucyBpbXBsZW1lbnQgZG9jdW1lbnQuY29va2llIEFQSSwgd2l0aCBzcGVjaWFsIHJ1bGVzIGZv
ciBIdHRwT25seSBjb29raWVzLgorU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJik7Cit2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
U3RyaW5nJik7CisKKy8vIFRoZXNlIG1ldGhvZHMgdXNlIGN1cnJlbnQgY29va2llIHN0b3JhZ2Us
IHRodXMgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQuCitib29sIGNv
b2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7CitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Citib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKK3Zv
aWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYpOworCisvLyBUaGVzZSBmdW5jdGlvbnMgYWx3YXlzIGFjY2VzcyBkZWZhdWx0IGNvb2tpZSBz
dG9yYWdlLCBub3QgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQuCit2
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsK
K3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOwor
dm9pZCBkZWxldGVBbGxDb29raWVzKCk7CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2llSmFyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCShyZXZp
c2lvbiAxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3Jt
Q29va2llSmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBDb29raWVKYXJfaAotI2RlZmluZSBDb29raWVKYXJfaAorI2lm
bmRlZiBQbGF0Zm9ybUNvb2tpZUphcl9oCisjZGVmaW5lIFBsYXRmb3JtQ29va2llSmFyX2gKIAog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTMz
LDI0ICszMywyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50Owog
Y2xhc3MgS1VSTDsKK2NsYXNzIE5ldHdvcmtpbmdDb250ZXh0Owogc3RydWN0IENvb2tpZTsKIAot
Ly8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgZG9jdW1lbnQuY29va2llIEFQSSwgd2l0
aCBzcGVjaWFsIHJ1bGVzIGZvciBIdHRwT25seSBjb29raWVzLgotU3RyaW5nIGNvb2tpZXMoY29u
c3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgdXNlIGN1cnJl
bnQgY29va2llIHN0b3JhZ2UsIHRodXMgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRv
IGFjY291bnQuCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci1TdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
Jik7Ci1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVj
dG9yPENvb2tpZT4mKTsKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYpOwotCi0vLyBUaGVzZSBmdW5jdGlvbnMgYWx3YXlzIGFjY2Vz
cyBkZWZhdWx0IGNvb2tpZSBzdG9yYWdlLCBub3QgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9k
ZSBpbnRvIGFjY291bnQuCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKTsKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0
cmluZyYgaG9zdG5hbWUpOwotdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CisvLyBJZiBuZXR3b3Jr
aW5nIGNvbnRleHQgaXMgbnVsbCwgZGVmYXVsdCBjb29raWUgc3RvcmFnZSBpcyB1c2VkLgorU3Ry
aW5nIGNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJik7Cit2b2lk
IHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworYm9vbCBjb29raWVzRW5hYmxlZChO
ZXR3b3JraW5nQ29udGV4dCopOworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYpOworYm9vbCBnZXRSYXdDb29raWVzKE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Cit2b2lkIGRl
bGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
KTsKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7Cit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOwordm9pZCBkZWxldGVB
bGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0Kik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHJl
dmlzaW9uIDEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29v
a2llSmFyQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NCwxMyArMjQsMTIgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29v
a2llSmFyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKIAogI2lmIFVTRShDRk5F
VFdPUkspCiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVTdG9yYWdlQ0ZO
ZXQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCkBAIC05NSwxOCAr
OTQsMTggQEAgc3RhdGljIFJldGFpblB0cjxDRkFycmF5UmVmPiBmaWx0ZXJDb29raQogICAgIHJl
dHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgc2V0Q29v
a2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0
UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyA8
cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFnZSBzdG9yZXMgYW4gZW1w
dHkgY29va2llLCB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgogICAgIGlmICh2
YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxDRkhUVFBD
b29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3Jh
Z2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFn
ZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsQ0YoQWRvcHRDRiwgdXJsLmNyZWF0ZUNG
VVJMKCkpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihB
ZG9wdENGLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jcmVhdGVDRlVSTCgpKTsK
KyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwg
Zmlyc3RQYXJ0eS5jcmVhdGVDRlVSTCgpKTsKIAogICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgogICAgIC8vIGNvb2tp
ZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVzIHdpdGhvdXQg
YSB2YWx1ZQpAQCAtMTIzLDkgKzEyMiw5IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnMKICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVTdG9y
YWdlLmdldCgpLCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSkuZ2V0KCksIHVybENGLmdl
dCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc0NGLmdldCgpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNv
b2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCkK
IHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29r
aWVTdG9yYWdlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTEzNyw5ICsxMzYsOSBA
QCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIChD
RlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVD
Rik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwm
IHVybCkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3Rv
cmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYg
KCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTE1MSwxOCAr
MTUwLDE5IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAgICBy
ZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBz
X2Nvb2tpZUNGKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypk
b2N1bWVudCovKQorYm9vbCBjb29raWVzRW5hYmxlZChOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCkKIHsKICAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGljeSA9IENGSFRU
UENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKLSAg
ICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQorICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIGlmIChjb29raWVT
dG9yYWdlKQogICAgICAgICBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlR2V0Q29va2llQWNj
ZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwogICAgIHJldHVybiBwb2xpY3kgPT0gQ0ZI
VFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8
IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzOwogfQogCi1i
b29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVz
KQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7
CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBj
b250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29r
aWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTE5Myw5ICsxOTMsOSBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1l
bnQqLCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0
IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIGRl
bGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJl
dGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMTQs
OSArMjE0LDkgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAg
IH0KIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhv
c3RuYW1lcykKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIFJldGFpblB0cjxD
RkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVs
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMjMyLDkgKzIzMiw5IEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKLSAg
ICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGRlZmF1
bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3Jh
Z2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9y
YWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTI1MSw5ICsyNTEsOSBAQCB2b2lkIGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpCiAgICAgfQogfQogCi12b2lkIGRlbGV0ZUFsbENv
b2tpZXMoKQordm9pZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
KQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdl
ID0gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29v
a2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNv
b2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJv
bWl1bS5jcHAJKHJldmlzaW9uIDEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5o
IgotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybVN1cHBvcnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGRvY3VtZW50LCB1cmws
IHZhbHVlKTsKLX0KLQotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhk
b2N1bWVudCwgdXJsKTsKLX0KLQotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQotewotICAgIHJldHVy
biBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50
LCB1cmwpOwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCkKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChkb2N1bWVu
dCk7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmV0dXJu
IFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhkb2N1bWVudCwgdXJsLCByYXdDb29raWVzKTsK
LX0KLQotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICByZXR1cm4gUGxhdGZv
cm1TdXBwb3J0OjpkZWxldGVDb29raWUoZG9jdW1lbnQsIHVybCwgY29va2llTmFtZSk7Ci19Ci0K
LXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMp
Ci17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLX0KLQotdm9pZCBkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKLXsKLSAgICAvLyBGSVhN
RTogTm90IHlldCBpbXBsZW1lbnRlZAotfQotCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQotewot
ICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVK
YXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llSmFyQ3VybC5jcHAJKHJldmlzaW9uIDEzMzcwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUsMTAgKzE1LDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKIAogI2luY2x1
ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5o
PgpAQCAtMjgsNTAgKzI3LDUwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUphcjsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50
KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3Zv
aWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIGNvb2tpZUphci5zZXQo
dXJsLnN0cmluZygpLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50
KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVzRm9yRE9NKE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIHJldHVybiBjb29raWVK
YXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitT
dHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqLCBj
b25zdCBLVVJMJiB1cmwpCiB7CiAgICAgLy8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2ll
LgogICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLWJvb2wgY29v
a2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgY29va2llc0Vu
YWJsZWQoTmV0d29ya2luZ0NvbnRleHQqKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tp
ZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBj
b25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJu
IGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lk
IGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+
JiBob3N0bmFtZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3Zv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQog
Ci12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtp
bmdDb250ZXh0KikKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUph
ck1hYy5tbQkocmV2aXNpb24gMTMzNzA1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvQ29va2llSmFyLm1tOjEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL0Nvb2tpZUphck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJD
b29raWVKYXIuaCIKKworI2lmICFVU0UoQ0ZORVRXT1JLKQorCisjaW1wb3J0ICJCbG9ja0V4Y2Vw
dGlvbnMuaCIKKyNpbXBvcnQgIkNvb2tpZS5oIgorI2ltcG9ydCAiQ29va2llU3RvcmFnZS5oIgor
I2ltcG9ydCAiQ29va2llU3RvcmFnZUNGTmV0LmgiCisjaW1wb3J0ICJEb2N1bWVudC5oIgorI2lt
cG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2llcyhOU0FycmF5ICp1bmZpbHRl
cmVkQ29va2llcykKK3sKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW3VuZmlsdGVyZWRDb29raWVz
IGNvdW50XTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGZpbHRlcmVkQ29va2llcyhB
ZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvdW50XSk7
CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAg
IE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVt1bmZpbHRlcmVkQ29va2ll
cyBvYmplY3RBdEluZGV4OmldOworCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgz
PiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tp
ZSwKKyAgICAgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2UgaGF2
ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29va2llcygpIHRvIHByZXZlbnQKKyAgICAgICAgLy8gdGhh
dCwgYnV0IHdlIGFsc28gbmVlZCB0byBhdm9pZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJlIHBy
ZXZpb3VzbHkgc3RvcmVkLCBhbmQKKyAgICAgICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRvaW5n
IHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNoIGEgY29va2llIGlzIG5ldmVyIHZhbGlkLgorICAgICAg
ICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBpZiAoW2Nvb2tpZSBpc0hUVFBPbmx5XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgYWRkT2JqZWN0OmNvb2tpZV07CisgICAg
fQorCisgICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKK30KKworU3RyaW5nIGNvb2tpZXMoY29u
c3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOworCisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwo
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsKKyAgICByZXR1cm4gW1tO
U0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVzOmZpbHRlckNvb2tpZXMo
Y29va2llcykuZ2V0KCldIG9iamVjdEZvcktleTpAIkNvb2tpZSJdOworCisgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVy
bCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5ICpj
b29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgp
LmdldCgpLCB1cmwpOworICAgIHJldHVybiBbW05TSFRUUENvb2tpZSByZXF1ZXN0SGVhZGVyRmll
bGRzV2l0aENvb2tpZXM6Y29va2llc10gb2JqZWN0Rm9yS2V5OkAiQ29va2llIl07CisKKyAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9p
ZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZVN0cikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisK
KyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3Rv
cmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCisgICAgLy8gd2hpY2ggd291bGQgYmUg
c2VudCBhcyAiQ29va2llOiA9Ii4KKyAgICBpZiAoY29va2llU3RyLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+CisgICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhl
YWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCisgICAgU3Ry
aW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZVN0ci5jb250YWlucygnPScpID8gY29va2llU3RyIDog
Y29va2llU3RyICsgIj0iOworCisgICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKKyAgICBSZXRh
aW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29raWVzID0gZmlsdGVyQ29va2llcyhbTlNIVFRQQ29v
a2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHM6W05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcgZm9yS2V5OkAiU2V0LUNvb2tpZSJdIGZvclVSTDpj
b29raWVVUkxdKTsKKyAgICBBU1NFUlQoW2ZpbHRlcmVkQ29va2llcy5nZXQoKSBjb3VudF0gPD0g
MSk7CisKKyAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9y
YWdlKCkuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworfQorCitib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKK3sKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kg
Y29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5
Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2Uo
KS5nZXQoKSkpOworICAgIHJldHVybiBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29va2ll
QWNjZXB0UG9saWN5QWx3YXlzIHx8IGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVB
Y2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKKworICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGdldFJhd0Nvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdD
b29raWVzKQoreworICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVS
TChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOworICAgIE5TVUludGVn
ZXIgY291bnQgPSBbY29va2llcyBjb3VudF07CisgICAgcmF3Q29va2llcy5yZXNlcnZlQ2FwYWNp
dHkoY291bnQpOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tpZXMg
b2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgTlNUaW1lSW50ZXJ2YWwgZXhwaXJlcyA9IFtbY29v
a2llIGV4cGlyZXNEYXRlXSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdICogMTAwMDsKKyAgICAgICAg
cmF3Q29va2llcy51bmNoZWNrZWRBcHBlbmQoQ29va2llKFtjb29raWUgbmFtZV0sIFtjb29raWUg
dmFsdWVdLCBbY29va2llIGRvbWFpbl0sIFtjb29raWUgcGF0aF0sIGV4cGlyZXMsCisgICAgICAg
ICAgICBbY29va2llIGlzSFRUUE9ubHldLCBbY29va2llIGlzU2VjdXJlXSwgW2Nvb2tpZSBpc1Nl
c3Npb25Pbmx5XSkpOworICAgIH0KKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKKyAg
ICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJl
bnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENv
b2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llVVJMKTsKKworICAgIE5TU3Ry
aW5nICpjb29raWVOYW1lU3RyaW5nID0gY29va2llTmFtZTsKKworICAgIE5TVUludGVnZXIgY291
bnQgPSBbY29va2llcyBjb3VudF07CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUg
KilbY29va2llcyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBpZiAoW1tjb29raWUgbmFtZV0g
aXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5hbWVTdHJpbmddKQorICAgICAgICAgICAgd2tEZWxldGVI
VFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7CisgICAgfQorCisgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CisKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llcyhkZWZhdWx0
Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKTsKKyAgICAKKyAgICBmb3IgKE5TSFRUUENvb2tp
ZSogY29va2llIGluIGNvb2tpZXMpCisgICAgICAgIGhvc3RuYW1lcy5hZGQoW2Nvb2tpZSBkb21h
aW5dKTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIGRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQoreworICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsK
KyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llcyhjb29raWVTdG9yYWdlLmdldCgp
KTsKKyAgICBpZiAoIWNvb2tpZXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKE5T
SFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpIHsKKyAgICAgICAgaWYgKGhvc3RuYW1lID09
IFN0cmluZyhbY29va2llIGRvbWFpbl0pKQorICAgICAgICAgICAgd2tEZWxldGVIVFRQQ29va2ll
KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7CisgICAgfQorICAgIAorICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygpCit7CisgICAg
d2tEZWxldGVBbGxIVFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgp
KTsKK30KKworfQorCisjZW5kaWYgLy8gIVVTRShDRk5FVFdPUkspCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCShyZXZp
c2lvbiAxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29r
aWVKYXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkNvb2tpZUphci5oIgorI2ltcG9ydCAiUGxhdGZvcm1D
b29raWVKYXIuaCIKIAogI2lmICFVU0UoQ0ZORVRXT1JLKQogCkBAIC0zMiw3ICszMiw3IEBACiAj
aW1wb3J0ICJDb29raWUuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2UuaCIKICNpbXBvcnQgIkNv
b2tpZVN0b3JhZ2VDRk5ldC5oIgotI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIktVUkwu
aCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNjEsMjkgKzYxLDMxIEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVy
Q29va2llcygKICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi1TdHJpbmcgY29va2ll
cyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVzRm9yRE9N
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRU
UENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsK
KyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNv
bnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChj
b29raWVTdG9yYWdlLmdldCgpLCB1cmwpOwogICAgIHJldHVybiBbW05TSFRUUENvb2tpZSByZXF1
ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6ZmlsdGVyQ29va2llcyhjb29raWVzKS5nZXQoKV0g
b2JqZWN0Rm9yS2V5OkAiQ29va2llIl07CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBLVVJMJiB1cmwpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAg
TlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0FycmF5ICpjb29raWVz
ID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCB1cmwpOwogICAgIHJl
dHVybiBbW05TSFRUUENvb2tpZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6Y29va2ll
c10gb2JqZWN0Rm9yS2V5OkAiQ29va2llIl07CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKK3Zv
aWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIp
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0xMDAsMjggKzEwMiwz
MSBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgUmV0YWlu
UHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGZpbHRlckNvb2tpZXMoW05TSFRUUENvb2tp
ZSBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOltOU0RpY3Rpb25hcnkgZGljdGlvbmFy
eVdpdGhPYmplY3Q6Y29va2llU3RyaW5nIGZvcktleTpAIlNldC1Db29raWUiXSBmb3JVUkw6Y29v
a2llVVJMXSk7CiAgICAgQVNTRVJUKFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgY291bnRdIDw9IDEp
OwogCi0gICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpLmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIHdrU2V0SFRUUENvb2tpZXNG
b3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVV
UkwsIGZpcnN0UGFydHkpOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAot
Ym9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopCitib29sIGNvb2tpZXNFbmFibGVk
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKIAotICAgIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xp
Y3kgPSBzdGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHdrR2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKSk7CisgICAg
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0
ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9y
YWdlKCk7CisgICAgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9
IHN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4od2tHZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCkpKTsKICAgICByZXR1cm4gY29va2llQWNjZXB0
UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyB8fCBjb29raWVBY2NlcHRQ
b2xpY3kgPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21h
aW47CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJs
LCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgZ2V0UmF3Q29va2llcyhOZXR3b3Jr
aW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3
Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JV
UkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsKKyAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsK
KyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdl
LmdldCgpLCB1cmwpOwogICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07CiAg
ICAgcmF3Q29va2llcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwogICAgIGZvciAoTlNVSW50ZWdl
ciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKQEAgLTEzNSwxMiArMTQwLDEyIEBAIGJvb2wgZ2V0
UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsK
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBOU1VSTCAqY29va2llVVJM
ID0gdXJsOwotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9y
YWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBOU0Fy
cmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCBj
b29raWVVUkwpOwogCiAgICAgTlNTdHJpbmcgKmNvb2tpZU5hbWVTdHJpbmcgPSBjb29raWVOYW1l
OwpAQCAtMTU1LDExICsxNjAsMTIgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdldEhv
c3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0
cmluZz4mIGhvc3RuYW1lcykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAK
LSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDog
ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tI
VFRQQ29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKICAgICAKICAgICBmb3IgKE5TSFRUUENv
b2tpZSogY29va2llIGluIGNvb2tpZXMpCiAgICAgICAgIGhvc3RuYW1lcy5hZGQoW2Nvb2tpZSBk
b21haW5dKTsKQEAgLTE2NywxMSArMTczLDExIEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHIKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lk
IGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwog
Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBk
ZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIE5TQXJyYXkgKmNv
b2tpZXMgPSB3a0hUVFBDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwogICAgIGlmICghY29v
a2llcykKICAgICAgICAgcmV0dXJuOwpAQCAtMTg0LDkgKzE5MCwxMCBAQCB2b2lkIGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgZGVsZXRlQWxsQ29va2llcyhO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKIHsKLSAgICB3a0RlbGV0ZUFsbEhUVFBDb29raWVz
KGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCkpOworICAgIFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIHdr
RGVsZXRlQWxsSFRUUENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7CiB9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQu
Y3BwCShyZXZpc2lvbiAxMzM3MDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nv
b2tpZUphclF0LmNwcDoxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZUphclF0LmgiCisKKyNpbmNsdWRlICJDb29raWUu
aCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5Q29v
a2llc1F0LmgiCisjaW5jbHVkZSA8UURhdGVUaW1lPgorI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNz
TWFuYWdlcj4KKyNpbmNsdWRlIDxRTmV0d29ya0Nvb2tpZT4KKyNpbmNsdWRlIDxRU3FsUXVlcnk+
CisjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+CisjaW5jbHVkZSA8UVZhcmlhbnQ+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFNo
YXJlZENvb2tpZUphclF0KiBzX3NoYXJlZENvb2tpZUphclF0ID0gMDsKKworc3RhdGljIE5ldHdv
cmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQp
Cit7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICBpZiAo
IWxvYWRlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGxvYWRlci0+bmV0d29ya2lu
Z0NvbnRleHQoKTsKK30KKwordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250
ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBpZiAoIWphcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgUVVybCB1cmxGb3JDb29raWVzKHVybCk7CisgICAgUVVy
bCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICBp
ZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMs
IGZpcnN0UGFydHlVcmwpKQorICAgICAgICByZXR1cm47CisKKyAgICBRTGlzdDxRTmV0d29ya0Nv
b2tpZT4gY29va2llcyA9IFFOZXR3b3JrQ29va2llOjpwYXJzZUNvb2tpZXMoUVN0cmluZyh2YWx1
ZSkudG9MYXRpbjEoKSk7CisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJdGVyYXRvciBpdCA9
IGNvb2tpZXMuYmVnaW4oKTsKKyAgICB3aGlsZSAoaXQgIT0gY29va2llcy5lbmQoKSkgeworICAg
ICAgICBpZiAoaXQtPmlzSHR0cE9ubHkoKSkKKyAgICAgICAgICAgIGl0ID0gY29va2llcy5lcmFz
ZShpdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICsraXQ7CisgICAgfQorCisgICAgamFy
LT5zZXRDb29raWVzRnJvbVVybChjb29raWVzLCB1cmxGb3JDb29raWVzKTsKK30KKworU3RyaW5n
IGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCit7Cisg
ICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVu
dCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgUU5l
dHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNv
b2tpZUphcigpOworCisgICAgUVVybCB1cmxGb3JDb29raWVzKHVybCk7CisgICAgUVVybCBmaXJz
dFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICBpZiAoIXRo
aXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0
UGFydHlVcmwpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBRTGlzdDxRTmV0d29y
a0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVybCh1cmxGb3JDb29raWVzKTsKKyAg
ICBpZiAoY29va2llcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
IFFTdHJpbmdMaXN0IHJlc3VsdENvb2tpZXM7CisgICAgZm9yZWFjaCAoY29uc3QgUU5ldHdvcmtD
b29raWUmIG5ldHdvcmtDb29raWUsIGNvb2tpZXMpIHsKKyAgICAgICAgaWYgKG5ldHdvcmtDb29r
aWUuaXNIdHRwT25seSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlc3VsdENv
b2tpZXMuYXBwZW5kKFFTdHJpbmc6OmZyb21MYXRpbjEobmV0d29ya0Nvb2tpZS50b1Jhd0Zvcm0o
UU5ldHdvcmtDb29raWU6Ok5hbWVBbmRWYWx1ZU9ubHkpLmNvbnN0RGF0YSgpKSk7CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3RyaW5nKCI7ICIpKTsKK30K
KworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQoreworICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250
ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKworICAgIFFMaXN0PFFO
ZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKFFVcmwodXJsKSk7Cisg
ICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICBRU3RyaW5nTGlzdCByZXN1bHRDb29raWVzOworICAgIGZvcmVhY2ggKFFOZXR3b3JrQ29va2ll
IG5ldHdvcmtDb29raWUsIGNvb2tpZXMpCisgICAgICAgIHJlc3VsdENvb2tpZXMuYXBwZW5kKFFT
dHJpbmc6OmZyb21MYXRpbjEobmV0d29ya0Nvb2tpZS50b1Jhd0Zvcm0oUU5ldHdvcmtDb29raWU6
Ok5hbWVBbmRWYWx1ZU9ubHkpLmNvbnN0RGF0YSgpKSk7CisKKyAgICByZXR1cm4gcmVzdWx0Q29v
a2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOworfQorCitib29sIGNvb2tpZXNFbmFibGVk
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKKyAgICBpZiAoIWNvbnRleHQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY29udGV4dC0+bmV0d29ya0FjY2Vzc01h
bmFnZXIoKS0+Y29va2llSmFyKCk7Cit9CisKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICAv
LyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKKyAg
ICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKK30KKwordm9p
ZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
JikKK3sKKyAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorfQorCit2b2lkIGdldEhv
c3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIFNo
YXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CisgICAg
aWYgKGphcikKKyAgICAgICAgamFyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMp
OworfQorCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3Ru
YW1lKQoreworICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6
c2hhcmVkKCk7CisgICAgaWYgKGphcikKKyAgICAgICAgamFyLT5kZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoaG9zdG5hbWUpOworfQorCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQoreworICAgIFNo
YXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CisgICAg
aWYgKGphcikKKyAgICAgICAgamFyLT5kZWxldGVBbGxDb29raWVzKCk7Cit9CisKK1NoYXJlZENv
b2tpZUphclF0KiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCkKK3sKKyAgICByZXR1cm4gc19z
aGFyZWRDb29raWVKYXJRdDsKK30KKworU2hhcmVkQ29va2llSmFyUXQqIFNoYXJlZENvb2tpZUph
clF0OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBjb29raWVTdG9yYWdlRGlyZWN0b3J5KQoreworICAg
IGlmICghc19zaGFyZWRDb29raWVKYXJRdCkKKyAgICAgICAgc19zaGFyZWRDb29raWVKYXJRdCA9
IG5ldyBTaGFyZWRDb29raWVKYXJRdChjb29raWVTdG9yYWdlRGlyZWN0b3J5KTsKKworICAgIHJl
dHVybiBzX3NoYXJlZENvb2tpZUphclF0OworfQorCit2b2lkIFNoYXJlZENvb2tpZUphclF0Ojpk
ZXN0cm95KCkKK3sKKyAgICBkZWxldGUgc19zaGFyZWRDb29raWVKYXJRdDsKKyAgICBzX3NoYXJl
ZENvb2tpZUphclF0ID0gMDsKK30KKwordm9pZCBTaGFyZWRDb29raWVKYXJRdDo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgUUxpc3Q8
UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBhbGxDb29raWVzKCk7CisgICAgZm9yZWFjaCAoY29u
c3QgUU5ldHdvcmtDb29raWUmIG5ldHdvcmtDb29raWUsIGNvb2tpZXMpCisgICAgICAgIGhvc3Ru
YW1lcy5hZGQobmV0d29ya0Nvb2tpZS5kb21haW4oKSk7Cit9CisKK3ZvaWQgU2hhcmVkQ29va2ll
SmFyUXQ6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQor
eworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBhbGxDb29raWVzKCk7CisgICAgUUxpc3Q8
UU5ldHdvcmtDb29raWU+OjpJdGVyYXRvciBpdCA9IGNvb2tpZXMuYmVnaW4oKTsKKyAgICBRTGlz
dDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGVuZCA9IGNvb2tpZXMuZW5kKCk7CisgICAgUVNx
bFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGlu
MVN0cmluZygiREVMRVRFIEZST00gY29va2llcyBXSEVSRSBjb29raWVJZD06Y29va2llSWR2YWx1
ZSIpKTsKKyAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAgIGlmIChpdC0+ZG9tYWluKCkg
PT0gUVN0cmluZyhob3N0bmFtZSkpIHsKKyAgICAgICAgICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShR
TGF0aW4xU3RyaW5nKCI6Y29va2llSWR2YWx1ZSIpLCBpdC0+ZG9tYWluKCkuYXBwZW5kKFFMYXRp
bjFTdHJpbmcoaXQtPm5hbWUoKSkpKTsKKyAgICAgICAgICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKKyAg
ICAgICAgICAgIGl0ID0gY29va2llcy5lcmFzZShpdCk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgaXQrKzsKKyAgICB9CisgICAgc2V0QWxsQ29va2llcyhjb29raWVzKTsKK30KKwordm9p
ZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQWxsQ29va2llcygpCit7CisgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBRU3FsUXVlcnkgc3FsUXVl
cnkobV9kYXRhYmFzZSk7CisgICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJERUxF
VEUgKiBGUk9NIGNvb2tpZXMiKSk7CisgICAgc3FsUXVlcnkuZXhlYygpOworICAgIHNldEFsbENv
b2tpZXMoUUxpc3Q8UU5ldHdvcmtDb29raWU+KCkpOworfQorCitTaGFyZWRDb29raWVKYXJRdDo6
U2hhcmVkQ29va2llSmFyUXQoY29uc3QgU3RyaW5nJiBjb29raWVTdG9yYWdlRGlyZWN0b3J5KQor
eworICAgIG1fZGF0YWJhc2UgPSBRU3FsRGF0YWJhc2U6OmFkZERhdGFiYXNlKFFMYXRpbjFTdHJp
bmcoIlFTUUxJVEUiKSk7CisgICAgY29uc3QgUVN0cmluZyBjb29raWVTdG9yYWdlUGF0aCA9IGNv
b2tpZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgY29uc3QgUVN0cmluZyBkYXRhQmFzZU5hbWUgPSBj
b29raWVTdG9yYWdlUGF0aCArIFFMYXRpbjFTdHJpbmcoIi9jb29raWVzLmRiIik7CisgICAgbV9k
YXRhYmFzZS5zZXREYXRhYmFzZU5hbWUoZGF0YUJhc2VOYW1lKTsKKyAgICBlbnN1cmVEYXRhYmFz
ZVRhYmxlKCk7CisgICAgbG9hZENvb2tpZXMoKTsKK30KKworU2hhcmVkQ29va2llSmFyUXQ6On5T
aGFyZWRDb29raWVKYXJRdCgpCit7CisgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworfQorCitib29s
IFNoYXJlZENvb2tpZUphclF0OjpzZXRDb29raWVzRnJvbVVybChjb25zdCBRTGlzdDxRTmV0d29y
a0Nvb2tpZT4mIGNvb2tpZUxpc3QsIGNvbnN0IFFVcmwmIHVybCkKK3sKKyAgICBpZiAoIVFOZXR3
b3JrQ29va2llSmFyOjpzZXRDb29raWVzRnJvbVVybChjb29raWVMaXN0LCB1cmwpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKKyAg
ICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIklOU0VSVCBPUiBSRVBMQUNFIElOVE8g
Y29va2llcyAoY29va2llSWQsIGNvb2tpZSkgVkFMVUVTICg6Y29va2llSWR2YWx1ZSwgOmNvb2tp
ZXZhbHVlKSIpKTsKKyAgICBRVmFyaWFudExpc3QgY29va2llc0lkczsKKyAgICBRVmFyaWFudExp
c3QgY29va2llc1ZhbHVlczsKKyAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya0Nvb2tpZSAmY29v
a2llLCBjb29raWVzRm9yVXJsKHVybCkpIHsKKyAgICAgICAgaWYgKGNvb2tpZS5pc1Nlc3Npb25D
b29raWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb29raWVzSWRzLmFwcGVu
ZChjb29raWUuZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoY29va2llLm5hbWUoKSkpKTsK
KyAgICAgICAgY29va2llc1ZhbHVlcy5hcHBlbmQoY29va2llLnRvUmF3Rm9ybSgpKTsKKyAgICB9
CisgICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRpbjFTdHJpbmcoIjpjb29raWVJZHZhbHVlIiks
IGNvb2tpZXNJZHMpOworICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29v
a2lldmFsdWUiKSwgY29va2llc1ZhbHVlcyk7CisgICAgc3FsUXVlcnkuZXhlY0JhdGNoKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmVuc3VyZURhdGFi
YXNlVGFibGUoKQoreworICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKCkpIHsKKyAgICAgICAgcVdh
cm5pbmcoIkNhbid0IG9wZW4gY29va2llIGRhdGFiYXNlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgbV9kYXRhYmFzZS5leGVjKFFMYXRpbjFTdHJpbmcoIlBSQUdNQSBzeW5jaHJvbm91
cz1PRkYiKSk7CisKKyAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3Fs
UXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBj
b29raWVzIChjb29raWVJZCBWQVJDSEFSIFBSSU1BUlkgS0VZLCBjb29raWUgQkxPQik7IikpOwor
ICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKK30KKwordm9pZCBTaGFyZWRDb29raWVKYXJRdDo6bG9hZENv
b2tpZXMoKQoreworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXM7CisgICAgUVNxbFF1ZXJ5IHNx
bFF1ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGluMVN0cmluZygi
U0VMRUNUIGNvb2tpZSBGUk9NIGNvb2tpZXMiKSk7CisgICAgc3FsUXVlcnkuZXhlYygpOworICAg
IHdoaWxlIChzcWxRdWVyeS5uZXh0KCkpCisgICAgICAgIGNvb2tpZXMuYXBwZW5kKFFOZXR3b3Jr
Q29va2llOjpwYXJzZUNvb2tpZXMoc3FsUXVlcnkudmFsdWUoMCkudG9CeXRlQXJyYXkoKSkpOwor
ICAgIHNldEFsbENvb2tpZXMoY29va2llcyk7Cit9CisKKyNpbmNsdWRlICJtb2NfQ29va2llSmFy
UXQuY3BwIgorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCShy
ZXZpc2lvbiAxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Q29va2llSmFyU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDkgKzIyLDcgQEAKICNpbmNs
dWRlICJDb29raWVKYXJTb3VwLmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogI2luY2x1ZGUgIkdPd25QdHJTb3VwLmgi
CiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCkBAIC0z
NCwxOSArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTb3VwQ29va2ll
SmFyKiBjb29raWVKYXJGb3JEb2N1bWVudChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitzdGF0
aWMgU291cENvb2tpZUphciogY29va2llSmFyRm9yQ29udGV4dChOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCkKIHsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBj
b25zdCBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUt
PmxvYWRlcigpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjb25z
dCBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IGxvYWRlci0+bmV0d29ya2luZ0NvbnRleHQo
KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBTT1VQ
X0NPT0tJRV9KQVIoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKGNvbnRleHQtPnNvdXBTZXNzaW9u
KCksIFNPVVBfVFlQRV9DT09LSUVfSkFSKSk7CiB9CiAKQEAgLTg2LDE0ICs3MywxNCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaHR0cE9ubHlDb29raWVFeGlzdHMoCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgU291cENvb2tpZUphciogamFyID0gY29va2ll
SmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvbnRl
eHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENvb2tpZUphcigpOwogICAg
IGlmICghamFyKQogICAgICAgICByZXR1cm47CiAKICAgICBHT3duUHRyPFNvdXBVUkk+IG9yaWdp
bihzb3VwX3VyaV9uZXcodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBHT3duUHRy
PFNvdXBVUkk+IGZpcnN0UGFydHkoc291cF91cmlfbmV3KGRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBHT3duUHRyPFNvdXBVUkk+
IGZpcnN0UGFydHkoc291cF91cmlfbmV3KGZpcnN0UGFydHkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSkpOwogCiAgICAgLy8gR2V0IGV4aXN0aW5nIGNvb2tpZXMgZm9yIHRoaXMgb3JpZ2luLgogICAg
IEdTTGlzdCogZXhpc3RpbmdDb29raWVzID0gc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlz
dChqYXIsIG9yaWdpbi5nZXQoKSwgVFJVRSk7CkBAIC0xMjAsOSArMTA3LDkgQEAgdm9pZCBzZXRD
b29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIHNvdXBfY29va2llc19mcmVlKGV4
aXN0aW5nQ29va2llcyk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgY29va2llc0ZvckRvY3VtZW50KGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBib29sIGZvckhUVFBIZWFk
ZXIpCitzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JDb250ZXh0KE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgZm9ySFRUUEhlYWRlcikKIHsKLSAgICBTb3Vw
Q29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAgU291
cENvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvb2tpZUphckZvckNvbnRleHQoY29udGV4dCkg
OiBzb3VwQ29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIApAQCAtMTMxLDI1ICsxMTgsMjUgQEAgc3RhdGljIFN0cmluZyBjb29raWVzRm9yRG9jdW1l
bnQoY29uc3QgRAogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGNvb2tpZXMuZ2V0KCkpOwog
fQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCkKK1N0cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIGNvb2tpZXNGb3JEb2N1bWVudChkb2N1bWVu
dCwgdXJsLCBmYWxzZSk7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JDb250ZXh0KGNvbnRleHQsIHVy
bCwgZmFsc2UpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIHVybCkKIHsKLSAgICByZXR1cm4gY29va2llc0ZvckRvY3VtZW50KGRvY3VtZW50LCB1cmws
IHRydWUpOworICAgIHJldHVybiBjb29raWVzRm9yQ29udGV4dChjb250ZXh0LCB1cmwsIHRydWUp
OwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jv
b2wgY29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0
dXJuICEhY29va2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIHJldHVybiAhIWNvb2tp
ZUphckZvckNvbnRleHQoZG9jdW1lbnQpOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdD
b29raWVzKQorYm9vbCBnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nv
b2tpZXMuY2xlYXIoKTsKLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1
bWVudChkb2N1bWVudCk7CisgICAgU291cENvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvb2tp
ZUphckZvckNvbnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTcwLDkgKzE1Nyw5IEBAIGJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBT
b3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAg
U291cENvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvb2tpZUphckZvckNvbnRleHQoY29udGV4
dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTkxLDkgKzE3OCw5IEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1
bWUKICAgICB9CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJp
bmc+JiBob3N0bmFtZXMpCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBTb3Vw
Q29va2llSmFyKiBjb29raWVKYXIgPSBzb3VwQ29va2llSmFyKCk7CisgICAgU291cENvb2tpZUph
ciogamFyID0gY29udGV4dCA/IGNvb2tpZUphckZvckNvbnRleHQoY29udGV4dCkgOiBzb3VwQ29v
a2llSmFyKCk7CiAgICAgR093blB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2Fs
bF9jb29raWVzKGNvb2tpZUphcikpOwogICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5n
ZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgewogICAgICAgICBHT3duUHRy
PFNvdXBDb29raWU+IGNvb2tpZShzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkp
OwpAQCAtMjAzLDEwICsxOTAsMTAgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNo
U2V0PFN0cgogICAgIH0KIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3Qg
U3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIENTdHJp
bmcgaG9zdE5hbWVTdHJpbmcgPSBob3N0bmFtZS51dGY4KCk7Ci0gICAgU291cENvb2tpZUphciog
Y29va2llSmFyID0gc291cENvb2tpZUphcigpOworICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNv
bnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENvb2tpZUphcigpOwog
ICAgIEdPd25QdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhj
b29raWVKYXIpKTsKICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07
IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKICAgICAgICAgU291cENvb2tpZSogY29va2ll
ID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwpAQCAtMjE2LDkgKzIwMyw5
IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICB9CiB9CiAK
LXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc291
cENvb2tpZUphcigpOworICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvbnRleHQgPyBjb29raWVK
YXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENvb2tpZUphcigpOwogICAgIEdPd25QdHI8R1NM
aXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpKTsKICAg
ICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0
X25leHQoaXRlbSkpIHsKICAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8
U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5oCShyZXZpc2lvbiAxMzM3MDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaWZuZGVmIENvb2tpZUphclNvdXBf
aAogI2RlZmluZSBDb29raWVKYXJTb3VwX2gKIAotI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2lu
Y2x1ZGUgPGxpYnNvdXAvc291cC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5j
cHAJKHJldmlzaW9uIDEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
d2luL0Nvb2tpZUphcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMCBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGUuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8V2luaW5ldC5oPgpAQCAtMzYs
NyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyBGSVhNRTog
RGVhbCB3aXRoIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLgogICAgIFN0cmluZyBz
dHIgPSB1cmwuc3RyaW5nKCk7CkBAIC00NCw3ICs0Myw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogLypkb2N1bWVudCovLCAKICAgICBJbnRlcm5ldFNldENvb2tpZShzdHIuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgdmFsLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCov
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwog
CkBAIC02Myw0MCArNjIsNDAgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9j
dW1lbgogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CiB9CiAKLVN0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3Jr
aW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBI
dHRwT25seSBjb29raWUKLSAgICByZXR1cm4gY29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICBy
ZXR1cm4gY29va2llc0ZvckRPTShjb250ZXh0LCB1cmwpOwogfQogCi1ib29sIGNvb2tpZXNFbmFi
bGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIGNvb2tpZXNFbmFibGVkKE5l
dHdvcmtpbmdDb250ZXh0KikKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRSYXdD
b29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdD
b29raWVzKQorYm9vbCBnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VS
TCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0
IGltcGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsg
Ly8gcmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBkZWxldGVD
b29raWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKIHsK
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFt
ZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCosIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5h
bWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFN0cmluZyYgaG9z
dG5hbWUpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBk
ZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4
dCopCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAJKHJldmlzaW9uIDEzMzcwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwzMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2Ug
U3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZUph
clF0LmgiCi0KLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQu
aCIKLSNpbmNsdWRlICJUaGlyZFBhcnR5Q29va2llc1F0LmgiCi0jaW5jbHVkZSA8UURhdGVUaW1l
PgotI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KLSNpbmNsdWRlIDxRTmV0d29ya0Nv
b2tpZT4KLSNpbmNsdWRlIDxRU3FsUXVlcnk+Ci0jaW5jbHVkZSA8UVN0cmluZ0xpc3Q+Ci0jaW5j
bHVkZSA8UVZhcmlhbnQ+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFNoYXJlZENvb2tpZUphclF0KiBzX3NoYXJlZENvb2tp
ZUphclF0ID0gMDsKLQotc3RhdGljIE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4
dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAg
aWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9
IGZyYW1lLT5sb2FkZXIoKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGxvYWRlci0+bmV0d29ya2luZ0NvbnRleHQoKTsKLX0KLQotdm9pZCBzZXRDb29r
aWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRl
eHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIFFO
ZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5j
b29raWVKYXIoKTsKLSAgICBpZiAoIWphcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVVybCB1
cmxGb3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50LT5maXJz
dFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJt
aXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IFFOZXR3b3JrQ29va2ll
OjpwYXJzZUNvb2tpZXMoUVN0cmluZyh2YWx1ZSkudG9MYXRpbjEoKSk7Ci0gICAgUUxpc3Q8UU5l
dHdvcmtDb29raWU+OjpJdGVyYXRvciBpdCA9IGNvb2tpZXMuYmVnaW4oKTsKLSAgICB3aGlsZSAo
aXQgIT0gY29va2llcy5lbmQoKSkgewotICAgICAgICBpZiAoaXQtPmlzSHR0cE9ubHkoKSkKLSAg
ICAgICAgICAgIGl0ID0gY29va2llcy5lcmFzZShpdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICsraXQ7Ci0gICAgfQotCi0gICAgamFyLT5zZXRDb29raWVzRnJvbVVybChjb29raWVzLCB1
cmxGb3JDb29raWVzKTsKLX0KLQotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQg
PSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQt
Pm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwotCi0gICAgUVVybCB1cmxGb3JD
b29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBhcnR5
Rm9yQ29va2llcygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKGNv
bnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0KLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2ll
c0ZvclVybCh1cmxGb3JDb29raWVzKTsKLSAgICBpZiAoY29va2llcy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFFTdHJpbmdMaXN0IHJlc3VsdENvb2tpZXM7Ci0g
ICAgZm9yZWFjaCAoY29uc3QgUU5ldHdvcmtDb29raWUmIG5ldHdvcmtDb29raWUsIGNvb2tpZXMp
IHsKLSAgICAgICAgaWYgKG5ldHdvcmtDb29raWUuaXNIdHRwT25seSgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHJlc3VsdENvb2tpZXMuYXBwZW5kKFFTdHJpbmc6OmZyb21MYXRp
bjEobmV0d29ya0Nvb2tpZS50b1Jhd0Zvcm0oUU5ldHdvcmtDb29raWU6Ok5hbWVBbmRWYWx1ZU9u
bHkpLmNvbnN0RGF0YSgpKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9p
bihRTGF0aW4xU3RyaW5nKCI7ICIpKTsKLX0KLQotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQotewot
ICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1l
bnQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFFO
ZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5j
b29raWVKYXIoKTsKLQotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5j
b29raWVzRm9yVXJsKFFVcmwodXJsKSk7Ci0gICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBRU3RyaW5nTGlzdCByZXN1bHRDb29raWVzOwot
ICAgIGZvcmVhY2ggKFFOZXR3b3JrQ29va2llIG5ldHdvcmtDb29raWUsIGNvb2tpZXMpCi0gICAg
ICAgIHJlc3VsdENvb2tpZXMuYXBwZW5kKFFTdHJpbmc6OmZyb21MYXRpbjEobmV0d29ya0Nvb2tp
ZS50b1Jhd0Zvcm0oUU5ldHdvcmtDb29raWU6Ok5hbWVBbmRWYWx1ZU9ubHkpLmNvbnN0RGF0YSgp
KSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikp
OwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsK
LSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3Vt
ZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7Ci19Ci0KLWJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKLXsKLSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAot
ICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVl
IHdoZW4gaW1wbGVtZW50ZWQKLX0KLQotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAotfQotCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQotewotICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRD
b29raWVKYXJRdDo6c2hhcmVkKCk7Ci0gICAgaWYgKGphcikKLSAgICAgICAgamFyLT5nZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQotewotICAgIFNoYXJlZENvb2tpZUphclF0
KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7Ci0gICAgaWYgKGphcikKLSAgICAg
ICAgamFyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpOwotfQotCi12b2lkIGRl
bGV0ZUFsbENvb2tpZXMoKQotewotICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRD
b29raWVKYXJRdDo6c2hhcmVkKCk7Ci0gICAgaWYgKGphcikKLSAgICAgICAgamFyLT5kZWxldGVB
bGxDb29raWVzKCk7Ci19Ci0KLVNoYXJlZENvb2tpZUphclF0KiBTaGFyZWRDb29raWVKYXJRdDo6
c2hhcmVkKCkKLXsKLSAgICByZXR1cm4gc19zaGFyZWRDb29raWVKYXJRdDsKLX0KLQotU2hhcmVk
Q29va2llSmFyUXQqIFNoYXJlZENvb2tpZUphclF0OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBjb29r
aWVTdG9yYWdlRGlyZWN0b3J5KQotewotICAgIGlmICghc19zaGFyZWRDb29raWVKYXJRdCkKLSAg
ICAgICAgc19zaGFyZWRDb29raWVKYXJRdCA9IG5ldyBTaGFyZWRDb29raWVKYXJRdChjb29raWVT
dG9yYWdlRGlyZWN0b3J5KTsKLQotICAgIHJldHVybiBzX3NoYXJlZENvb2tpZUphclF0OwotfQot
Ci12b2lkIFNoYXJlZENvb2tpZUphclF0OjpkZXN0cm95KCkKLXsKLSAgICBkZWxldGUgc19zaGFy
ZWRDb29raWVKYXJRdDsKLSAgICBzX3NoYXJlZENvb2tpZUphclF0ID0gMDsKLX0KLQotdm9pZCBT
aGFyZWRDb29raWVKYXJRdDo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+
JiBob3N0bmFtZXMpCi17Ci0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBhbGxD
b29raWVzKCk7Ci0gICAgZm9yZWFjaCAoY29uc3QgUU5ldHdvcmtDb29raWUmIG5ldHdvcmtDb29r
aWUsIGNvb2tpZXMpCi0gICAgICAgIGhvc3RuYW1lcy5hZGQobmV0d29ya0Nvb2tpZS5kb21haW4o
KSk7Ci19Ci0KLXZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQotewotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMg
PSBhbGxDb29raWVzKCk7Ci0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJdGVyYXRvciBpdCA9
IGNvb2tpZXMuYmVnaW4oKTsKLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGVu
ZCA9IGNvb2tpZXMuZW5kKCk7Ci0gICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOwot
ICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGluMVN0cmluZygiREVMRVRFIEZST00gY29va2llcyBX
SEVSRSBjb29raWVJZD06Y29va2llSWR2YWx1ZSIpKTsKLSAgICB3aGlsZSAoaXQgIT0gZW5kKSB7
Ci0gICAgICAgIGlmIChpdC0+ZG9tYWluKCkgPT0gUVN0cmluZyhob3N0bmFtZSkpIHsKLSAgICAg
ICAgICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29va2llSWR2YWx1ZSIp
LCBpdC0+ZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoaXQtPm5hbWUoKSkpKTsKLSAgICAg
ICAgICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKLSAgICAgICAgICAgIGl0ID0gY29va2llcy5lcmFzZShp
dCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaXQrKzsKLSAgICB9Ci0gICAgc2V0QWxs
Q29va2llcyhjb29raWVzKTsKLX0KLQotdm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQWxs
Q29va2llcygpCi17Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnku
cHJlcGFyZShRTGF0aW4xU3RyaW5nKCJERUxFVEUgKiBGUk9NIGNvb2tpZXMiKSk7Ci0gICAgc3Fs
UXVlcnkuZXhlYygpOwotICAgIHNldEFsbENvb2tpZXMoUUxpc3Q8UU5ldHdvcmtDb29raWU+KCkp
OwotfQotCi1TaGFyZWRDb29raWVKYXJRdDo6U2hhcmVkQ29va2llSmFyUXQoY29uc3QgU3RyaW5n
JiBjb29raWVTdG9yYWdlRGlyZWN0b3J5KQotewotICAgIG1fZGF0YWJhc2UgPSBRU3FsRGF0YWJh
c2U6OmFkZERhdGFiYXNlKFFMYXRpbjFTdHJpbmcoIlFTUUxJVEUiKSk7Ci0gICAgY29uc3QgUVN0
cmluZyBjb29raWVTdG9yYWdlUGF0aCA9IGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgY29u
c3QgUVN0cmluZyBkYXRhQmFzZU5hbWUgPSBjb29raWVTdG9yYWdlUGF0aCArIFFMYXRpbjFTdHJp
bmcoIi9jb29raWVzLmRiIik7Ci0gICAgbV9kYXRhYmFzZS5zZXREYXRhYmFzZU5hbWUoZGF0YUJh
c2VOYW1lKTsKLSAgICBlbnN1cmVEYXRhYmFzZVRhYmxlKCk7Ci0gICAgbG9hZENvb2tpZXMoKTsK
LX0KLQotU2hhcmVkQ29va2llSmFyUXQ6On5TaGFyZWRDb29raWVKYXJRdCgpCi17Ci0gICAgbV9k
YXRhYmFzZS5jbG9zZSgpOwotfQotCi1ib29sIFNoYXJlZENvb2tpZUphclF0OjpzZXRDb29raWVz
RnJvbVVybChjb25zdCBRTGlzdDxRTmV0d29ya0Nvb2tpZT4mIGNvb2tpZUxpc3QsIGNvbnN0IFFV
cmwmIHVybCkKLXsKLSAgICBpZiAoIVFOZXR3b3JrQ29va2llSmFyOjpzZXRDb29raWVzRnJvbVVy
bChjb29raWVMaXN0LCB1cmwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1f
ZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFFTcWxRdWVy
eSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKLSAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJp
bmcoIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gY29va2llcyAoY29va2llSWQsIGNvb2tpZSkgVkFM
VUVTICg6Y29va2llSWR2YWx1ZSwgOmNvb2tpZXZhbHVlKSIpKTsKLSAgICBRVmFyaWFudExpc3Qg
Y29va2llc0lkczsKLSAgICBRVmFyaWFudExpc3QgY29va2llc1ZhbHVlczsKLSAgICBmb3JlYWNo
IChjb25zdCBRTmV0d29ya0Nvb2tpZSAmY29va2llLCBjb29raWVzRm9yVXJsKHVybCkpIHsKLSAg
ICAgICAgaWYgKGNvb2tpZS5pc1Nlc3Npb25Db29raWUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBjb29raWVzSWRzLmFwcGVuZChjb29raWUuZG9tYWluKCkuYXBwZW5kKFFMYXRp
bjFTdHJpbmcoY29va2llLm5hbWUoKSkpKTsKLSAgICAgICAgY29va2llc1ZhbHVlcy5hcHBlbmQo
Y29va2llLnRvUmF3Rm9ybSgpKTsKLSAgICB9Ci0gICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRp
bjFTdHJpbmcoIjpjb29raWVJZHZhbHVlIiksIGNvb2tpZXNJZHMpOwotICAgIHNxbFF1ZXJ5LmJp
bmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29va2lldmFsdWUiKSwgY29va2llc1ZhbHVlcyk7Ci0g
ICAgc3FsUXVlcnkuZXhlY0JhdGNoKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2hh
cmVkQ29va2llSmFyUXQ6OmVuc3VyZURhdGFiYXNlVGFibGUoKQotewotICAgIGlmICghbV9kYXRh
YmFzZS5vcGVuKCkpIHsKLSAgICAgICAgcVdhcm5pbmcoIkNhbid0IG9wZW4gY29va2llIGRhdGFi
YXNlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9kYXRhYmFzZS5leGVjKFFMYXRp
bjFTdHJpbmcoIlBSQUdNQSBzeW5jaHJvbm91cz1PRkYiKSk7Ci0KLSAgICBRU3FsUXVlcnkgc3Fs
UXVlcnkobV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJD
UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBjb29raWVzIChjb29raWVJZCBWQVJDSEFSIFBSSU1B
UlkgS0VZLCBjb29raWUgQkxPQik7IikpOwotICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKLX0KLQotdm9p
ZCBTaGFyZWRDb29raWVKYXJRdDo6bG9hZENvb2tpZXMoKQotewotICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+
IGNvb2tpZXM7Ci0gICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOwotICAgIHNxbFF1
ZXJ5LnByZXBhcmUoUUxhdGluMVN0cmluZygiU0VMRUNUIGNvb2tpZSBGUk9NIGNvb2tpZXMiKSk7
Ci0gICAgc3FsUXVlcnkuZXhlYygpOwotICAgIHdoaWxlIChzcWxRdWVyeS5uZXh0KCkpCi0gICAg
ICAgIGNvb2tpZXMuYXBwZW5kKFFOZXR3b3JrQ29va2llOjpwYXJzZUNvb2tpZXMoc3FsUXVlcnku
dmFsdWUoMCkudG9CeXRlQXJyYXkoKSkpOwotICAgIHNldEFsbENvb2tpZXMoY29va2llcyk7Ci19
Ci0KLSNpbmNsdWRlICJtb2NfQ29va2llSmFyUXQuY3BwIgotCi19Ci0KLS8vIHZpbTogdHM9NCBz
dz00IGV0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5o
CShyZXZpc2lvbiAxMzM3MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tB
UElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlICJXS1By
b3RlY3Rpb25TcGFjZVR5cGVzLmgiCiAjaW5jbHVkZSAiV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5o
IgogI2luY2x1ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29va2ll
SmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DcmVkZW50aWFsLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2Uu
aD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173072</attachid>
            <date>2012-11-08 10:54:31 -0800</date>
            <delta_ts>2012-11-08 11:16:15 -0800</delta_ts>
            <desc>second attempt</desc>
            <filename>CookieJar.txt</filename>
            <type>text/plain</type>
            <size>117407</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMzOTE1KQorKysg
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzg1
Nyw2ICszODU3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVQb2xpY3kuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1l
dGFkYXRhLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmggXAor
CVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ29va2llSmFyLmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFj
Y2Vzc0NvbnRyb2wuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlLmNwcCBcCkBAIC00MjQ3LDcgKzQyNDksNiBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q29va2llc1N0cmF0ZWd5LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0N1cnNvci5jcHAgXApAQCAtNDcxNCw2ICs0NzE1LDcgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Byb3h5U2VydmVy
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZp
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5v
dGlmaWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29r
aWVKYXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3Bh
Y2VIYXNoLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNw
YWNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3Bh
Y2UuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCShyZXZp
c2lvbiAxMzM5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX0lO
Q0xVREVfRElSRUNUT1JJRVMKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRp
bmcvYmxhY2tiZXJyeS9FZGl0b3JCbGFja0JlcnJ5LmNwcAogICAgIGVkaXRpbmcvYmxhY2tiZXJy
eS9TbWFydFJlcGxhY2VCbGFja0JlcnJ5LmNwcAorICAgIGxvYWRlci9ibGFja2JlcnJ5L0Nvb2tp
ZUphckJsYWNrQmVycnkuY3BwCiAgICAgcGFnZS9ibGFja2JlcnJ5L0FjY2Vzc2liaWxpdHlPYmpl
Y3RCbGFja0JlcnJ5LmNwcAogICAgIHBhZ2UvYmxhY2tiZXJyeS9EcmFnQ29udHJvbGxlckJsYWNr
QmVycnkuY3BwCiAgICAgcGFnZS9ibGFja2JlcnJ5L0V2ZW50SGFuZGxlckJsYWNrQmVycnkuY3Bw
CkBAIC0xNDgsNyArMTQ5LDYgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2Js
YWNrYmVycnkvQ29udGV4dE1lbnVCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVy
cnkvQ29udGV4dE1lbnVJdGVtQmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5
L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCiAgICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9DdXJzb3JC
bGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0RhdGFCbGFja0JlcnJ5
LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0ltYWdlQmxhY2tCZXJyeS5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMzOTE1KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGxvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudC5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5jcHAgXAorICAgIGxvYWRlci9Db29raWVKYXIuY3BwIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmln
aW5BY2Nlc3NDb250cm9sLmNwcCBcCiAgICAgbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVz
dWx0Q2FjaGUuY3BwIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3Bw
IFwKQEAgLTE5NDksNiArMTk1MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5oIFwKICAgICBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaCBcCisgICAgbG9hZGVyL0Nvb2tp
ZUphci5oIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmggXAogICAgIGxv
YWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmggXAogICAgIGxvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oIFwKQEAgLTIyMzcsNiArMjIzOSw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvTUlNRVNuaWZmaW5nLmggXAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JrU3RhdGVOb3RpZmllci5oIFwKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2ll
SmFyLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmggXAogICAgIHBs
YXRmb3JtL25ldHdvcmsvUHJveHlTZXJ2ZXIuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9R
dE1JTUVUeXBlU25pZmZlci5oIFwKQEAgLTIyNDksNiArMjI1Miw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIFwKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
cXQvTmV0d29ya1N0YXRlTm90aWZpZXJQcml2YXRlLmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsv
cXQvQ29va2llSmFyUXQuaCBcCiAgICAgcGxhdGZvcm0vUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBc
CiAgICAgcGxhdGZvcm0vUGxhdGZvcm1NZW1vcnlJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgcGxh
dGZvcm0vUGxhdGZvcm1Ub3VjaEV2ZW50LmggXApAQCAtMjI1Niw3ICsyMjYwLDYgQEAgSEVBREVS
UyArPSBcCiAgICAgcGxhdGZvcm0vUG9wdXBNZW51LmggXAogICAgIHBsYXRmb3JtL1JlZmVycmVy
UG9saWN5LmggXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggXAotICAgIHBsYXRmb3Jt
L3F0L0Nvb2tpZUphclF0LmggXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmggXAog
ICAgIHBsYXRmb3JtL3F0L1FTdHlsZUZhY2FkZS5oIFwKICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVFTdHlsZS5oIFwKQEAgLTI4MDMsNiArMjgwNiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIFwKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL0ROU1Jlc29sdmVRdWV1ZS5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
TUlNRVNuaWZmaW5nLmNwcCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5j
cHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvQ3JlZGVudGlhbFN0b3JhZ2VRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAgXAogICAgIHBsYXRm
b3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwIFwKQEAgLTI4MTYsNyArMjgyMCw2
IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcCBcCiAgICAg
cGxhdGZvcm0vcXQvQ29udGV4dE1lbnVJdGVtUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Db250
ZXh0TWVudVF0LmNwcCBcCi0gICAgcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwIFwKICAgICBw
bGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAgXApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQkocmV2aXNpb24gMTMzOTE1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50
LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgnLAorICAg
ICAgICAgICAgJ2xvYWRlci9Db29raWVKYXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Nyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0RvY3Vt
ZW50TG9hZFRpbWluZy5oJywKICAgICAgICAgICAgICdsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaCcs
CkBAIC0yNzMsNyArMjc0LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ29va2llLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL0Nvb2tpZUphci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ3Vyc29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RhdGVDb21wb25l
bnRzLmgnLApAQCAtMzEyLDYgKzMxMiw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZv
cm1Nb3VzZUV2ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9QbGF0Zm9ybUNvb2tpZUphci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oJywKQEAgLTI5NTUs
NiArMjk1Niw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5o
JywKICAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuY3BwJywKICAgICAgICAgICAg
ICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaCcsCisgICAgICAgICAgICAnbG9hZGVyL0Nvb2tpZUph
ci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3Bw
JywKICAgICAgICAgICAgICdsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgnLAogICAg
ICAgICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCcsCkBA
IC0zMDYyLDYgKzMwNjQsNyBAQAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jZi9SZXNvdXJjZUxvYWRlckNGTmV0LmNwcCcs
CiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJhd1Jlc291cmNlQ2hyb21pdW0u
Y3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vUmVzb3VyY2VMb2Fk
ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9TdWJyZXNvdXJj
ZUxvYWRlckNocm9taXVtLmNwcCcsCkBAIC01NDY2LDcgKzU0NjksNiBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21h
Yy9Db250ZXh0TWVudUl0ZW1NYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9Db250
ZXh0TWVudU1hYy5tbScsCi0gICAgICAgICAgICAncGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbScs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0N1cnNvck1hYy5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMv
RHJhZ0ltYWdlTWFjLm1tJywKQEAgLTU1ODQsNyArNTU4Niw2IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvY2hyb21pdW0vRE5TQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3
b3JrL2Nocm9taXVtL1Jlc291cmNlRXJyb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0
d29yay9jaHJvbWl1bS9SZXNvdXJjZUhhbmRsZS5jcHAnLApAQCAtNTYxMiw2ICs1NjEzLDcgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVD
dXJsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVudGljYXRp
b25NYWMubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1h
Yy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llU3RvcmFnZU1h
Yy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3Jh
Z2VNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3Ry
ZWFtTWFjLm1tJywKQEAgLTU2MjIsNiArNTYyNCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VSZXNwb25zZU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZv
cm0vbmV0d29yay9tYWMvV2ViQ29yZVVSTFJlc3BvbnNlLm1tJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9uZXR3b3JrL3F0L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9uZXR3b3JrL3F0L0NyZWRlbnRpYWxTdG9yYWdlUXQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9uZXR3b3JrL3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUHJpdmF0ZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUXQuY3BwJywK
QEAgLTU2NzIsNyArNTY3NSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvQ2xpcGJvYXJk
UXQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvQ29udGV4dE1lbnVJdGVtUXQuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9x
dC9DdXJzb3JRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAnLApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEz
MzkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzQxNSw2ICsyNzQxNSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ29va2llSmFyLmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENv
b2tpZUphci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxsb2FkZXJcQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CkBAIC0yODI4NywxMCArMjgyOTUsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxDb29raWVKYXIuaCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29va2llc1N0
cmF0ZWd5LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMzI1MTgsNiArMzI1MjIsMTAgQEAKIAkJ
CQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXG5ldHdvcmtcUGxhdGZvcm1Db29raWVKYXIuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcUHJvdGVjdGlv
blNwYWNlLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMzkxNSkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzI3MCw4ICszMjcwLDYgQEAKIAkJOTM1MDBGMzIxM0ZERTNCRTAwOTlF
QzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzUwMEYzMTEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxl
ckltcERldGFpbHMuaCAqLzsgfTsKIAkJOTM1MjA3QkUwOUJENDEwQTAwRjIwMzhEIC8qIExvY2Fs
aXplZFN0cmluZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzNTIwN0JEMDlCRDQxMEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM1MjA4NDUwOUJE
NDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM1MjA4NDQwOUJENDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1t
ICovOyB9OwotCQk5MzUyMDg3NzA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MjA4NzYwOUJENDUz
NDAwRjIwMzhEIC8qIENvb2tpZUphci5tbSAqLzsgfTsKLQkJOTM1MjA4ODIwOUJENDVFOTAwRjIw
MzhEIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTM1MjA4ODEwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzNTM2NzZCMDlBRUQ4
OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MzY3NkEwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZp
ZXdNYWMubW0gKi87IH07CiAJCTkzNUM0NzYzMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzVDNDc2MjA5QUM0Q0U2MDBBNkFBQjQgLyogTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cy5oICovOyB9OwogCQk5MzVDNDc2ODA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZv
cm1LZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzVDNDc2NjA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYw
NDYsNiArNjA0NCwxMCBAQAogCQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNv
bHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTM5ODY2MTE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi87IH07CiAJCUUx
Mzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUg
LyogU3R5bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyog
Q29va2llU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1t
ICovOyB9OworCQlFMTQyNEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29raWVKYXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0Qzg5
MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyB9OworCQlFMTQyNEM5
MDE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDOEYxNjRCNDYwQjAwRjMyRDQwIC8qIENv
b2tpZUphck1hYy5tbSAqLzsgfTsKKwkJRTE0MjRDOTMxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tp
ZUphci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTQyNEM5MTE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCAqLzsgfTsKKwkJRTE0MjRD
OTQxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDOTIxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tp
ZUphci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUUxNEYxQzQ0MTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NEYxQzQyMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
LmNwcCAqLzsgfTsKIAkJRTE0RjFDNDUxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNEYxQzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRTE1QTM2RDcxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNUEzNkQ2MTEwNDU3MjAw
MEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi87IH07CkBAIC0xMDQ5NCw4ICsxMDQ5Niw2IEBACiAJ
CTkzNTAwRjMxMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOU1Njcm9sbGVySW1wRGV0YWlscy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzUyMDdCRDA5QkQ0MTBBMDBGMjAzOEQgLyogTG9j
YWxpemVkU3RyaW5ncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbGl6
ZWRTdHJpbmdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNTIwODQ0MDlCRDQz
QjkwMEYyMDM4RCAvKiBMYW5ndWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IExhbmd1YWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MzUy
MDg3NjA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2llSmFyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5MzUyMDg4MTA5QkQ0NUU5MDBGMjAzOEQgLyogQ29va2llSmFyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvb2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzUzNjc2QTA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbFZpZXdNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNUM0NzYyMDlBQzRDRTYwMEE2QUFCNCAv
KiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM1QzQ3NjYwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNDQ2LDYgKzEzNDQ2
LDEwIEBACiAJCUUxMzk4NjYyMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tpZVN0
b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llU3RvcmFnZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTNGMDFGMDEyNzBFMTkwMDBERkJBNzEg
LyogQ29va2llU3RvcmFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IENvb2tpZVN0b3JhZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUNvb2tpZUphci5oOyBwYXRoID0gbmV0
d29yay9QbGF0Zm9ybUNvb2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2llSmFyTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMTQyNEM5MTE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvb2tpZUphci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNDI0QzkyMTY0QjUyQzgwMEYzMkQ0MCAvKiBD
b29raWVKYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llSmFyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNEYxQzQyMTRCNURBQzYwMEVBOTAwOSAv
KiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTRGMUM0MzE0QjVEQUM2MDBFQTkwMDkgLyog
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxNUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTE5TTmFtZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NzExLDYgKzE1NzE1LDcgQEAKIAkJCQk1MTRDNzY0
NDBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMuaCAqLywKIAkJCQk1MTRDNzY0
NTBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMubW0gKi8sCiAJCQkJMUE3RkE2
NDcwRERBM0NCQTAwMjhGOEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVyTWFjLmNwcCAqLywKKwkJ
CQlFMTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovLAogCQkJCTUx
NEM3NjQ2MENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZUVycm9yTWFjLm1tICovLAogCQkJCTUx
NEM3NjQ3MENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZU1hYy5tbSAqLywKIAkJCQk1
MTRDNzY0OTBDRTkyMzRFMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0TWFjLm1tICovLApAQCAt
MTU3MzMsNyArMTU3MzgsNiBAQAogCQkJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlw
Ym9hcmRNYWMubW0gKi8sCiAJCQkJMDYwMjdDQjIwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRleHRN
ZW51SXRlbU1hYy5tbSAqLywKIAkJCQk5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4
dE1lbnVNYWMubW0gKi8sCi0JCQkJOTM1MjA4NzYwOUJENDUzNDAwRjIwMzhEIC8qIENvb2tpZUph
ci5tbSAqLywKIAkJCQlGNTg3ODRGMDAyREUzNzU5MDFFQTQxMjIgLyogQ3Vyc29yTWFjLm1tICov
LAogCQkJCTVEOEM0REJEMTQyODIyMkMwMDI2Q0U3MiAvKiBEaXNwbGF5U2xlZXBEaXNhYmxlci5j
cHAgKi8sCiAJCQkJNUQ4QzREQkUxNDI4MjIyQzAwMjZDRTcyIC8qIERpc3BsYXlTbGVlcERpc2Fi
bGVyLmggKi8sCkBAIC0yMDY5Myw2ICsyMDY5Nyw4IEBACiAJCQkJRTFDNDE2MTYwRjY1NjMxODAw
OTJEMkZCIC8qIENyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgKi8sCiAJCQkJNEZDODUzNDkx
NjQ0MjcxQjAwRDFDMjc1IC8qIENhY2hlZE1ldGFkYXRhLmNwcCAqLywKIAkJCQk0RkM4NTM0QTE2
NDQyNzFCMDBEMUMyNzUgLyogQ2FjaGVkTWV0YWRhdGEuaCAqLywKKwkJCQlFMTQyNEM5MTE2NEI1
MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCAqLywKKwkJCQlFMTQyNEM5MjE2NEI1MkM4MDBG
MzJENDAgLyogQ29va2llSmFyLmggKi8sCiAJCQkJRTFDNDE2MTEwRjY1NjJGRDAwOTJEMkZCIC8q
IENyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oICovLAogCQkJCUUxQzQxNUREMEY2NTVEN0MwMDky
RDJGQiAvKiBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCAqLywKIAkJCQlFMUM0
MTVEOTBGNjU1RDZGMDA5MkQyRkIgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5o
ICovLApAQCAtMjA4NTcsNyArMjA4NjMsNiBAQAogCQkJCTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3
QSAvKiBDb250ZXh0TWVudS5oICovLAogCQkJCTA2MDI3Q0FDMEIxQ0JGQzAwMDg4NEIyRCAvKiBD
b250ZXh0TWVudUl0ZW0uaCAqLywKIAkJCQlEOEI2MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29v
a2llLmggKi8sCi0JCQkJOTM1MjA4ODEwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oICov
LAogCQkJCTMzOUI1QjYyMTMxREFBMzIwMEY0OEQwMiAvKiBDb29raWVzU3RyYXRlZ3kuaCAqLywK
IAkJCQkyRTQzNDY1NjBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICov
LAogCQkJCTJFNDM0NjU3MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oICov
LApAQCAtMjA5MjAsNiArMjA5MjUsNyBAQAogCQkJCTk4RUIxRjk0MTMxM0ZFMDUwMEQwRTFFQSAv
KiBOb3RJbXBsZW1lbnRlZC5oICovLAogCQkJCTRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQ
YXN0ZWJvYXJkLmggKi8sCiAJCQkJQzVGNzY1QjQxNEUxRDQxNDAwNkM4OTlCIC8qIFBhc3RlYm9h
cmRTdHJhdGVneS5oICovLAorCQkJCUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9y
bUNvb2tpZUphci5oICovLAogCQkJCUJDNUM3NjI4MTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9y
bUV2ZW50LmNwcCAqLywKIAkJCQlCQzVDNzYyOTE0OTdGRTE0MDBCQzQ3NzUgLyogUGxhdGZvcm1F
dmVudC5oICovLAogCQkJCUE3MjNGNzdBMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9y
dE1hY3Jvcy5oICovLApAQCAtMjI2MjQsNyArMjI2MzAsNiBAQAogCQkJCTdBREU3MjI2MTBDQkJC
OUIwMDZCM0IzQSAvKiBDb250ZXh0TWVudVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RDMxNjAyOTEyQjAyNjc2MDBDMUEzNTkgLyogQ29udm9sdmVyTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRDhCNjE1MkYxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJOTM1MjA4ODIwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzM5QjVCNjMxMzFEQUEzMjAwRjQ4RDAyIC8qIENvb2tpZXNTdHJhdGVneS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzNEMDIxMkQxMzFEQjM3QjAwNDA5MUE4IC8qIENvb2tpZVN0b3Jh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFRTY4NDY0MTJEMjZFMzgwMEU3OTQxNSAvKiBDb29r
aWVTdG9yYWdlQ0ZOZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2ODQsNiArMjU2ODksOCBAQAog
CQkJCTNGRkZGOUE5MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzQzM4QkZGMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDMzhDMDMxNjQ0NzNERDAwMDkx
RUIyIC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxNDI0
QzhBMTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTE0MjRDOTQxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0yNjIwMiw3ICsyNjIwOSw2IEBACiAJCQkJMDYwMjdDQjMwQjFDQzAzRDAwODg0QjJE
IC8qIENvbnRleHRNZW51SXRlbU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzQjZBMEVBMEIw
QkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZE
MzE2MDI4MTJCMDI2NzYwMEMxQTM1OSAvKiBDb252b2x2ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTkzNTIwODc3MDlCRDQ1MzQwMEYyMDM4RCAvKiBDb29raWVKYXIubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3RUU2ODQ2MjEyRDI2RTM4MDBFNzk0MTUgLyogQ29va2llSmFyQ0ZOZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NjMxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0
b3JhZ2VDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJB
NzEgLyogQ29va2llU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMjg3NzAsNiArMjg3
NzYsOCBAQAogCQkJCTkzQzM4QkZFMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0ZUZp
eGVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0MzOEMwNDE2NDQ3M0REMDAwOTFFQjIg
LyogU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTRGQzg1MzRD
MTY0NDI3MjMwMEQxQzI3NSAvKiBDYWNoZWRNZXRhZGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlFMTQyNEM5MDE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTE0MjRDOTMxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ29va2llSmFyLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKKworI2lmIFBMQVRGT1JNKENIUk9N
SVVNKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQorI2Vycm9yIENocm9taXVtIGFuZCBCbGFja2Jl
cnJ5IGN1cnJlbnRseSB1c2UgYSBmb3JrIG9mIHRoaXMgZmlsZSBiZWNhdXNlIG9mIGxheWVyaW5n
IHZpb2xhdGlvbnMKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBOZXR3
b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
KQoreworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVy
biAwOworICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7CisgICAgaWYg
KCFsb2FkZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtp
bmdDb250ZXh0KCk7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBjb29raWVzRm9yRE9NKG5ldHdvcmtp
bmdDb250ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHVy
bCk7Cit9CisKK3ZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCit7CisgICAgc2V0Q29va2llc0Zyb21E
T00obmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCitib29sIGNvb2tpZXNFbmFibGVkKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gY29va2llc0VuYWJsZWQobmV0
d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpKTsKK30KKworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQor
eworICAgIHJldHVybiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShuZXR3b3JraW5nQ29u
dGV4dChkb2N1bWVudCksIHVybCk7Cit9CisKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMp
Cit7CisgICAgcmV0dXJuIGdldFJhd0Nvb2tpZXMobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQp
LCB1cmwsIGNvb2tpZXMpOworfQorCit2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQorewor
ICAgIGRlbGV0ZUNvb2tpZShuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIHVybCwgY29va2ll
TmFtZSk7Cit9CisKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+
JiBob3N0bmFtZXMpCit7CisgICAgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoMCwgaG9zdG5hbWVz
KTsKK30KKwordm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKK3sKKyAgICBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoMCwgaG9zdG5hbWUpOworfQor
Cit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQoreworICAgIGRlbGV0ZUFsbENvb2tpZXMoMCk7Cit9
CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVK
YXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzM3MDUpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oOjEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvb2tpZUphcl9oCisjZGVmaW5lIENvb2tpZUphcl9o
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgS1VSTDsKK3N0
cnVjdCBDb29raWU7CisKKy8vIFRoZXNlIHR3byBmdW5jdGlvbnMgaW1wbGVtZW50IGRvY3VtZW50
LmNvb2tpZSBBUEksIHdpdGggc3BlY2lhbCBydWxlcyBmb3IgSHR0cE9ubHkgY29va2llcy4KK1N0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwordm9pZCBzZXRDb29r
aWVzKERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworCisvLyBUaGVzZSBt
ZXRob2RzIHVzZSBjdXJyZW50IGNvb2tpZSBzdG9yYWdlLCB0aHVzIHRha2luZyBwcml2YXRlIGJy
b3dzaW5nIG1vZGUgaW50byBhY2NvdW50LgorYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCopOworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYpOworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Cit2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKworLy8gVGhlc2UgZnVuY3Rp
b25zIGFsd2F5cyBhY2Nlc3MgZGVmYXVsdCBjb29raWUgc3RvcmFnZSwgbm90IHRha2luZyBwcml2
YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50Lgordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7Cit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygp
OworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuaAkocmV2aXNp
b24gMTMzNzA1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDYsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwxMyArMzksMTMgQEAgc3RydWN0IENv
b2tpZTsKIAogLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgZG9jdW1lbnQuY29va2ll
IEFQSSwgd2l0aCBzcGVjaWFsIHJ1bGVzIGZvciBIdHRwT25seSBjb29raWVzLgogU3RyaW5nIGNv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci12b2lkIHNldENvb2tpZXMoRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Cit2b2lkIHNldENvb2tpZXMoRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpOwogCiAvLyBU
aGVzZSBtZXRob2RzIHVzZSBjdXJyZW50IGNvb2tpZSBzdG9yYWdlLCB0aHVzIHRha2luZyBwcml2
YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50LgogYm9vbCBjb29raWVzRW5hYmxlZChjb25z
dCBEb2N1bWVudCopOwogU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0
IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwogYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci12b2lkIGRlbGV0ZUNvb2tpZShj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKK3ZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSk7CiAKIC8vIFRoZXNlIGZ1bmN0aW9ucyBhbHdheXMgYWNjZXNzIGRlZmF1bHQgY29va2ll
IHN0b3JhZ2UsIG5vdCB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4K
IHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tC
ZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2JsYWNrYmVycnkv
Q29va2llSmFyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEzMzcwNSkJKGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcDoxMzM3MDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogQ29weXJpZ2h0IChDKSAyMDA5IFRv
cmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLTIwMTEuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5o
IgorCisjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudEJsYWNrQmVycnkuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIGNvb2tpZXMoRG9jdW1l
bnQgY29uc3QqIGRvY3VtZW50LCBLVVJMIGNvbnN0JiB1cmwpCit7CisgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBh
Z2UoKSA6IDA7CisKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIGlmICghKGZyYW1lICYmIGZyYW1lLT5sb2FkZXIoKSAmJiBmcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKCFzdGF0aWNfY2Fz
dDxGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgp
KS0+Y29va2llc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgQVNT
RVJUKGRvY3VtZW50ICYmIHVybCA9PSBkb2N1bWVudC0+Y29va2llVVJMKCkpOworICAgIC8vICdI
dHRwT25seScgY29va2llcyBzaG91bGQgbm8gYmUgYWNjZXNzaWJsZSBmcm9tIHNjcmlwdHMsIHNv
IHdlIGZpbHRlciB0aGVtIG91dCBoZXJlCisgICAgcmV0dXJuIGNvb2tpZU1hbmFnZXIoKS5nZXRD
b29raWUodXJsLCBOb0h0dHBPbmx5Q29va2llKTsKK30KKwordm9pZCBzZXRDb29raWVzKERvY3Vt
ZW50KiBkb2N1bWVudCwgS1VSTCBjb25zdCYgdXJsLCBTdHJpbmcgY29uc3QmIHZhbHVlKQorewor
ICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBm
cmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOworCisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIShmcmFtZSAmJiBmcmFtZS0+bG9hZGVyKCkgJiYgZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc3RhdGljX2Nhc3Q8
RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSkt
PmNvb2tpZXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChkb2N1bWVu
dCAmJiB1cmwgPT0gZG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKKyAgICBjb29raWVNYW5hZ2VyKCku
c2V0Q29va2llcyh1cmwsIHZhbHVlLCBOb0h0dHBPbmx5Q29va2llKTsKK30KKworYm9vbCBjb29r
aWVzRW5hYmxlZChEb2N1bWVudCBjb25zdCopCit7CisgICAgLy8gRklYTUUuIEN1cnJlbnRseSBj
b29raWUgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBubyBzZXR0aW5nIG9uIHByb3BlcnR5IHBhZ2Uu
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMp
Cit7CisgICAgVmVjdG9yPFBhcnNlZENvb2tpZSo+IHJlc3VsdDsKKyAgICBjb29raWVNYW5hZ2Vy
KCkuZ2V0UmF3Q29va2llcyhyZXN1bHQsIHVybCwgV2l0aEh0dHBPbmx5Q29va2llcyk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyBpKyspCisgICAgICAgIHJlc3Vs
dFtpXS0+YXBwZW5kV2ViQ29yZUNvb2tpZShyYXdDb29raWVzKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3sKKyAgICAvLyBDb29raWVzIGFy
ZSBub3QgYm91bmQgdG8gdGhlIGRvY3VtZW50LiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8g
cGFzcworICAgIC8vIGluIHRoZSBkb2N1bWVudCBvYmplY3QgdG8gZmluZCB0aGUgdGFyZ2V0ZWQg
Y29va2llcyBpbiBjb29raWUgbWFuYWdlci4KKyAgICBjb29raWVNYW5hZ2VyKCkucmVtb3ZlQ29v
a2llV2l0aE5hbWUodXJsLCBjb29raWVOYW1lKTsKK30KKworU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJs
KQoreworICAgIEFTU0VSVChkb2N1bWVudCk7CisKKyAgICBpZiAoIShkb2N1bWVudC0+ZnJhbWUo
KSAmJiBkb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkgJiYgZG9jdW1lbnQtPmZyYW1lKCktPmxv
YWRlcigpLT5jbGllbnQoKSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmICgh
c3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZG9jdW1lbnQtPmZyYW1l
KCktPmxvYWRlcigpLT5jbGllbnQoKSktPmNvb2tpZXNFbmFibGVkKCkpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIHJldHVybiBjb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llKHVybCwg
V2l0aEh0dHBPbmx5Q29va2llcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9ibGFja2JlcnJ5L0Nvb2tpZUph
ckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2Js
YWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogVW5mb3JrLiBUaGlz
IGZpbGUgaXMgZm9ya2VkIGJlY2F1c2UgYWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgTmV0d29ya2lu
Z0NvbnRleHQgdG8gYWNjZXNzIGNvb2tpZSBqYXIsIG5vdCBEb2N1bWVudCBvciBGcmFtZS4KKwog
U3RyaW5nIGNvb2tpZXMoRG9jdW1lbnQgY29uc3QqIGRvY3VtZW50LCBLVVJMIGNvbnN0JiB1cmwp
CiB7CiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDEzMzcwNSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
aHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHA6MTMzNzA1KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29raWVKYXIu
aCIKKworI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBzZXRD
b29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQoreworICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwgdXJs
LCB2YWx1ZSk7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMo
ZG9jdW1lbnQsIHVybCk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1
cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVu
dCwgdXJsKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoZG9jdW1l
bnQpOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIHJldHVy
biBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7
Cit9CisKK3ZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgcmV0dXJuIFBsYXRm
b3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOworfQor
Cit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVz
KQoreworICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCit9CisKK3ZvaWQgZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgLy8gRklY
TUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK30KKwordm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3sK
KyAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9D
b29raWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogVW5mb3Jr
LiBUaGlzIGZpbGUgaXMgZm9ya2VkIGJlY2F1c2UgYWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgTmV0
d29ya2luZ0NvbnRleHQgdG8gYWNjZXNzIGNvb2tpZSBqYXIsIG5vdCBEb2N1bWVudCBvciBGcmFt
ZS4KKwogdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2ll
cyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
b29raWVKYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVK
YXIuaAkocmV2aXNpb24gMTMzOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2ll
SmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBDb29raWVKYXJfaAotI2RlZmluZSBDb29raWVKYXJfaAotCi0jaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEtVUkw7Ci1zdHJ1Y3QgQ29va2llOwot
Ci0vLyBUaGVzZSB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBkb2N1bWVudC5jb29raWUgQVBJLCB3
aXRoIHNwZWNpYWwgcnVsZXMgZm9yIEh0dHBPbmx5IGNvb2tpZXMuCi1TdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCos
IGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKLQotLy8gVGhlc2UgbWV0aG9kcyB1c2UgY3Vy
cmVudCBjb29raWUgc3RvcmFnZSwgdGh1cyB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2RlIGlu
dG8gYWNjb3VudC4KLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLVN0cmlu
ZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmKTsKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBW
ZWN0b3I8Q29va2llPiYpOwotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0KLS8vIFRoZXNlIGZ1bmN0aW9ucyBhbHdheXMgYWNj
ZXNzIGRlZmF1bHQgY29va2llIHN0b3JhZ2UsIG5vdCB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBt
b2RlIGludG8gYWNjb3VudC4KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxT
dHJpbmc+JiBob3N0bmFtZXMpOwotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3Qg
U3RyaW5nJiBob3N0bmFtZSk7Ci12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKLQotfQotCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxh
Y2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMzOTE1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmls
ZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLTIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotCi0jaW5j
bHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwTG9hZERlZmVycmVy
LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU3RyaW5nIGNvb2tpZXMoRG9jdW1lbnQgY29uc3Qq
IGRvY3VtZW50LCBLVVJMIGNvbnN0JiB1cmwpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7
Ci0KLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmICgh
KGZyYW1lICYmIGZyYW1lLT5sb2FkZXIoKSAmJiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKSkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKCFzdGF0aWNfY2FzdDxGcmFtZUxv
YWRlckNsaWVudEJsYWNrQmVycnkqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+Y29va2ll
c0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgQVNTRVJUKGRvY3Vt
ZW50ICYmIHVybCA9PSBkb2N1bWVudC0+Y29va2llVVJMKCkpOwotICAgIC8vICdIdHRwT25seScg
Y29va2llcyBzaG91bGQgbm8gYmUgYWNjZXNzaWJsZSBmcm9tIHNjcmlwdHMsIHNvIHdlIGZpbHRl
ciB0aGVtIG91dCBoZXJlCi0gICAgcmV0dXJuIGNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWUodXJs
LCBOb0h0dHBPbmx5Q29va2llKTsKLX0KLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1
bWVudCwgS1VSTCBjb25zdCYgdXJsLCBTdHJpbmcgY29uc3QmIHZhbHVlKQotewotICAgIEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSA/IGZy
YW1lLT5wYWdlKCkgOiAwOwotCi0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIShmcmFtZSAmJiBmcmFtZS0+bG9hZGVyKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc3RhdGljX2Nhc3Q8RnJhbWVMb2Fk
ZXJDbGllbnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPmNvb2tpZXNF
bmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChkb2N1bWVudCAmJiB1cmwg
PT0gZG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKLSAgICBjb29raWVNYW5hZ2VyKCkuc2V0Q29va2ll
cyh1cmwsIHZhbHVlLCBOb0h0dHBPbmx5Q29va2llKTsKLX0KLQotYm9vbCBjb29raWVzRW5hYmxl
ZChEb2N1bWVudCBjb25zdCopCi17Ci0gICAgLy8gRklYTUUuIEN1cnJlbnRseSBjb29raWUgaXMg
ZW5hYmxlZCBieSBkZWZhdWx0LCBubyBzZXR0aW5nIG9uIHByb3BlcnR5IHBhZ2UuCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAg
VmVjdG9yPFBhcnNlZENvb2tpZSo+IHJlc3VsdDsKLSAgICBjb29raWVNYW5hZ2VyKCkuZ2V0UmF3
Q29va2llcyhyZXN1bHQsIHVybCwgV2l0aEh0dHBPbmx5Q29va2llcyk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJlc3VsdFtpXS0+YXBw
ZW5kV2ViQ29yZUNvb2tpZShyYXdDb29raWVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICAvLyBDb29raWVzIGFyZSBub3QgYm91
bmQgdG8gdGhlIGRvY3VtZW50LiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8gcGFzcwotICAg
IC8vIGluIHRoZSBkb2N1bWVudCBvYmplY3QgdG8gZmluZCB0aGUgdGFyZ2V0ZWQgY29va2llcyBp
biBjb29raWUgbWFuYWdlci4KLSAgICBjb29raWVNYW5hZ2VyKCkucmVtb3ZlQ29va2llV2l0aE5h
bWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQotewotICAg
IEFTU0VSVChkb2N1bWVudCk7Ci0KLSAgICBpZiAoIShkb2N1bWVudC0+ZnJhbWUoKSAmJiBkb2N1
bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkgJiYgZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5j
bGllbnQoKSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmICghc3RhdGljX2Nh
c3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRl
cigpLT5jbGllbnQoKSktPmNvb2tpZXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLQotICAgIHJldHVybiBjb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llKHVybCwgV2l0aEh0dHBP
bmx5Q29va2llcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkocmV2aXNpb24gMTMzOTE1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAt
MSwxOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCwgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJDb29raWVKYXIuaCIKLQotI2lmICFVU0UoQ0ZORVRXT1JLKQotCi0jaW1w
b3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkNvb2tpZS5oIgotI2ltcG9ydCAiQ29v
a2llU3RvcmFnZS5oIgotI2ltcG9ydCAiQ29va2llU3RvcmFnZUNGTmV0LmgiCi0jaW1wb3J0ICJE
b2N1bWVudC5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2llcyhO
U0FycmF5ICp1bmZpbHRlcmVkQ29va2llcykKLXsKLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW3Vu
ZmlsdGVyZWRDb29raWVzIGNvdW50XTsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGZp
bHRlcmVkQ29va2llcyhBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OmNvdW50XSk7Ci0KLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVt1
bmZpbHRlcmVkQ29va2llcyBvYmplY3RBdEluZGV4OmldOwotCi0gICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0b3Jl
IGFuIGVtcHR5IGNvb2tpZSwKLSAgICAgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29v
a2llOiA9Ii4gV2UgaGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29va2llcygpIHRvIHByZXZlbnQK
LSAgICAgICAgLy8gdGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBhdm9pZCBzZW5kaW5nIGNvb2tp
ZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKLSAgICAgICAgLy8gdGhlcmUncyBu
byBoYXJtIHRvIGRvaW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNoIGEgY29va2llIGlzIG5ldmVy
IHZhbGlkLgotICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBpZiAoW2Nvb2tpZSBpc0hUVFBPbmx5XSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgYWRkT2JqZWN0
OmNvb2tpZV07Ci0gICAgfQotCi0gICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKLX0KLQotU3Ry
aW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRU
UENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsK
LSAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVz
OmZpbHRlckNvb2tpZXMoY29va2llcykuZ2V0KCldIG9iamVjdEZvcktleTpAIkNvb2tpZSJdOwot
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19
Ci0KLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0K
LSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOwotICAgIHJldHVybiBbW05TSFRUUENvb2tpZSBy
ZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6Y29va2llc10gb2JqZWN0Rm9yS2V5OkAiQ29v
a2llIl07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwg
TlNIVFRQQ29va2llU3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCi0gICAgLy8g
d2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KLSAgICBpZiAoY29va2llU3RyLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+Ci0gICAgLy8gY29va2ll
c1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBh
IHZhbHVlCi0gICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZVN0ci5jb250YWlucygnPScp
ID8gY29va2llU3RyIDogY29va2llU3RyICsgIj0iOwotCi0gICAgTlNVUkwgKmNvb2tpZVVSTCA9
IHVybDsKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29raWVzID0gZmlsdGVyQ29v
a2llcyhbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHM6W05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcgZm9yS2V5OkAiU2V0LUNv
b2tpZSJdIGZvclVSTDpjb29raWVVUkxdKTsKLSAgICBBU1NFUlQoW2ZpbHRlcmVkQ29va2llcy5n
ZXQoKSBjb3VudF0gPD0gMSk7Ci0KLSAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRD
RkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2ll
VVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0KLSAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50
KikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nhc3Q8TlNIVFRQQ29v
a2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKS5nZXQoKSkpOwotICAgIHJldHVybiBjb29raWVBY2NlcHRQb2xpY3kg
PT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIHx8IGNvb2tpZUFjY2VwdFBvbGljeSA9
PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKLQot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tI
VFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwp
OwotICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07Ci0gICAgcmF3Q29va2ll
cy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQQ29v
a2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgTlNUaW1lSW50ZXJ2YWwg
ZXhwaXJlcyA9IFtbY29va2llIGV4cGlyZXNEYXRlXSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdICog
MTAwMDsKLSAgICAgICAgcmF3Q29va2llcy51bmNoZWNrZWRBcHBlbmQoQ29va2llKFtjb29raWUg
bmFtZV0sIFtjb29raWUgdmFsdWVdLCBbY29va2llIGRvbWFpbl0sIFtjb29raWUgcGF0aF0sIGV4
cGlyZXMsCi0gICAgICAgICAgICBbY29va2llIGlzSFRUUE9ubHldLCBbY29va2llIGlzU2VjdXJl
XSwgW2Nvb2tpZSBpc1Nlc3Npb25Pbmx5XSkpOwotICAgIH0KLQotICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUp
Ci17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNVUkwgKmNvb2tp
ZVVSTCA9IHVybDsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7Ci0gICAgTlNBcnJheSAqY29v
a2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llVVJM
KTsKLQotICAgIE5TU3RyaW5nICpjb29raWVOYW1lU3RyaW5nID0gY29va2llTmFtZTsKLQotICAg
IE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07Ci0gICAgZm9yIChOU1VJbnRlZ2Vy
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9
IChOU0hUVFBDb29raWUgKilbY29va2llcyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBpZiAo
W1tjb29raWUgbmFtZV0gaXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5hbWVTdHJpbmddKQotICAgICAg
ICAgICAgd2tEZWxldGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7Ci0g
ICAgfQotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQ
Q29va2llcyhkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKTsKLSAgICAKLSAgICBm
b3IgKE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpCi0gICAgICAgIGhvc3RuYW1lcy5h
ZGQoW2Nvb2tpZSBkb21haW5dKTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3Ru
YW1lKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENv
b2tpZVN0b3JhZ2UoKTsKLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llcyhjb29r
aWVTdG9yYWdlLmdldCgpKTsKLSAgICBpZiAoIWNvb2tpZXMpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBmb3IgKE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpIHsKLSAgICAgICAg
aWYgKGhvc3RuYW1lID09IFN0cmluZyhbY29va2llIGRvbWFpbl0pKQotICAgICAgICAgICAgd2tE
ZWxldGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7Ci0gICAgfQotICAg
IAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXZvaWQgZGVsZXRlQWxsQ29v
a2llcygpCi17Ci0gICAgd2tEZWxldGVBbGxIVFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpLmdldCgpKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gIVVTRShDRk5FVFdPUkspCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2llSmFyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNv
b2tpZUphci5oCShyZXZpc2lvbiAxMzM3MDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0Nvb2tpZUphci5oOjEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UGxhdGZvcm1Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvb2tpZUphcl9oCisjZGVmaW5lIENvb2tpZUphcl9o
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgS1VSTDsKK3N0
cnVjdCBDb29raWU7CisKKy8vIFRoZXNlIHR3byBmdW5jdGlvbnMgaW1wbGVtZW50IGRvY3VtZW50
LmNvb2tpZSBBUEksIHdpdGggc3BlY2lhbCBydWxlcyBmb3IgSHR0cE9ubHkgY29va2llcy4KK1N0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwordm9pZCBzZXRDb29r
aWVzKERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworCisvLyBUaGVzZSBt
ZXRob2RzIHVzZSBjdXJyZW50IGNvb2tpZSBzdG9yYWdlLCB0aHVzIHRha2luZyBwcml2YXRlIGJy
b3dzaW5nIG1vZGUgaW50byBhY2NvdW50LgorYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCopOworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYpOworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Cit2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKworLy8gVGhlc2UgZnVuY3Rp
b25zIGFsd2F5cyBhY2Nlc3MgZGVmYXVsdCBjb29raWUgc3RvcmFnZSwgbm90IHRha2luZyBwcml2
YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50Lgordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7Cit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygp
OworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Q
bGF0Zm9ybUNvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaAkocmV2aXNpb24gMTMzNzA1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQ29v
a2llSmFyX2gKLSNkZWZpbmUgQ29va2llSmFyX2gKKyNpZm5kZWYgUGxhdGZvcm1Db29raWVKYXJf
aAorI2RlZmluZSBQbGF0Zm9ybUNvb2tpZUphcl9oCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0zMywyNCArMzMsMjAgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKIGNsYXNzIEtVUkw7CitjbGFzcyBOZXR3
b3JraW5nQ29udGV4dDsKIHN0cnVjdCBDb29raWU7CiAKLS8vIFRoZXNlIHR3byBmdW5jdGlvbnMg
aW1wbGVtZW50IGRvY3VtZW50LmNvb2tpZSBBUEksIHdpdGggc3BlY2lhbCBydWxlcyBmb3IgSHR0
cE9ubHkgY29va2llcy4KLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYpOwotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYpOwotCi0vLyBUaGVzZSBtZXRob2RzIHVzZSBjdXJyZW50IGNvb2tpZSBzdG9yYWdlLCB0aHVz
IHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50LgotYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotYm9vbCBnZXRSYXdDb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci12b2lkIGRl
bGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsK
LQotLy8gVGhlc2UgZnVuY3Rpb25zIGFsd2F5cyBhY2Nlc3MgZGVmYXVsdCBjb29raWUgc3RvcmFn
ZSwgbm90IHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50Lgotdm9pZCBn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7Ci12b2lk
IGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKLXZvaWQg
ZGVsZXRlQWxsQ29va2llcygpOworLy8gSWYgbmV0d29ya2luZyBjb250ZXh0IGlzIG51bGwsIGRl
ZmF1bHQgY29va2llIHN0b3JhZ2UgaXMgdXNlZC4KK1N0cmluZyBjb29raWVzRm9yRE9NKE5ldHdv
cmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYpOwordm9p
ZCBzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZpcnN0
UGFydHksIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKK2Jvb2wgY29va2llc0VuYWJsZWQo
TmV0d29ya2luZ0NvbnRleHQqKTsKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmKTsKK2Jvb2wgZ2V0UmF3Q29va2llcyhO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwordm9pZCBk
ZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
Jik7Cit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgSGFz
aFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwordm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKK3ZvaWQgZGVsZXRl
QWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCopOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3BwCShy
ZXZpc2lvbiAxMzM5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nv
b2tpZUphckNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjQsMTMgKzI0LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNv
b2tpZUphci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAKICNpZiBVU0UoQ0ZO
RVRXT1JLKQogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llU3RvcmFnZUNG
TmV0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgpAQCAtOTUsMTgg
Kzk0LDE4IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmlsdGVyQ29va2kKICAgICBy
ZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIHNldENv
b2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJz
dFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgLy8g
PHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVzIGFuIGVt
cHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KICAgICBpZiAo
dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9y
YWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3Jh
Z2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1
cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0Q0YsIHVybC5jcmVhdGVD
RlVSTCgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVzQ0Yo
QWRvcHRDRiwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkuY3JlYXRlQ0ZVUkwoKSk7
CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFkb3B0Q0Ys
IGZpcnN0UGFydHkuY3JlYXRlQ0ZVUkwoKSk7CiAKICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KICAgICAvLyBjb29r
aWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0
IGEgdmFsdWUKQEAgLTEyMyw5ICsxMjIsOSBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zCiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29va2llU3Rv
cmFnZS5nZXQoKSwgZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpLmdldCgpLCB1cmxDRi5n
ZXQoKSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5nZXQoKSk7CiB9CiAKLVN0cmluZyBjb29raWVz
KGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBj
b29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiwgY29u
c3QgS1VSTCYgdXJsKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
b29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsK
ICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAt
MTM3LDkgKzEzNiw5IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4K
ICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNGLmdl
dCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmlu
ZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQg
PyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3Jh
Z2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IApAQCAtMTUxLDE4ICsxNTAsMTkgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbgogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVh
ZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIGNvb2tpZXNFbmFibGVkKE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0KQogewogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kg
cG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3Vt
ZW50RG9tYWluOwotICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCisgICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7Cisg
ICAgaWYgKGNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHBvbGljeSA9IENGSFRUUENvb2tpZVN0b3Jh
Z2VHZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgcmV0dXJu
IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9j
dW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lB
bHdheXM7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tpZXMo
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tp
ZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTkzLDkgKzE5Myw5IEBAIGJvb2wgZ2V0UmF3Q29va2ll
cyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxl
dGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
bmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9y
YWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3Jh
Z2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1
cm47CiAKQEAgLTIxNCw5ICsyMTQsOSBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0CiAgICAgfQogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0g
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBkZWZh
dWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9y
YWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3Rv
cmFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzIsOSArMjMyLDkgQEAgdm9pZCBnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIH0KIH0KIAotdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlID0gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZI
VFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBp
ZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjUxLDkgKzI1MSw5IEBA
IHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICB9CiB9CiAKLXZv
aWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
IGNvb2tpZVN0b3JhZ2UgPSBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgp
OwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVt
L0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTMzOTE1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ29va2llSmFyLmgiCi0KLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMo
ZG9jdW1lbnQsIHVybCwgdmFsdWUpOwotfQotCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBw
b3J0Ojpjb29raWVzKGRvY3VtZW50LCB1cmwpOwotfQotCi1TdHJpbmcgY29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwp
Ci17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoZG9jdW1lbnQsIHVybCk7Ci19Ci0KLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50KQotewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNF
bmFibGVkKGRvY3VtZW50KTsKLX0KLQotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykK
LXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmws
IHJhd0Nvb2tpZXMpOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAg
IHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29r
aWVOYW1lKTsKLX0KLQotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKLXsKLSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAotfQot
Ci12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQot
ewotICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCi19Ci0KLXZvaWQgZGVsZXRlQWxs
Q29va2llcygpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAkocmV2aXNpb24gMTMzOTE1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNSwxMCArMTUsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUph
ci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CkBAIC0yOCw1MCArMjcsNTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2llSmFyOwogCi12b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQordm9pZCBzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCosIGNv
bnN0IEtVUkwmLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAg
Y29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNv
b2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYg
dXJsKQogewogICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLVN0
cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1
bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgLy8gRklY
TUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llLgogICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVy
bC5zdHJpbmcoKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8q
ZG9jdW1lbnQqLykKK2Jvb2wgY29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqKQogewog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nv
b2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJh
d0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdD
b29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGlt
cGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0
IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxT
dHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtp
bmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICAvLyBGSVhN
RTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9p
ZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KikKIHsKICAgICAvLyBGSVhNRTog
Tm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvQ29va2llSmFyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQkocmV2aXNpb24gMTMzNzA1KQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tOjEzMzcwNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDb29raWVKYXIuaCIKKworI2lmICFVU0UoQ0ZORVRX
T1JLKQorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkNvb2tpZS5oIgor
I2ltcG9ydCAiQ29va2llU3RvcmFnZS5oIgorI2ltcG9ydCAiQ29va2llU3RvcmFnZUNGTmV0Lmgi
CisjaW1wb3J0ICJEb2N1bWVudC5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmls
dGVyQ29va2llcyhOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcykKK3sKKyAgICBOU1VJbnRlZ2Vy
IGNvdW50ID0gW3VuZmlsdGVyZWRDb29raWVzIGNvdW50XTsKKyAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk+IGZpbHRlcmVkQ29va2llcyhBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5OmNvdW50XSk7CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRU
UENvb2tpZSAqKVt1bmZpbHRlcmVkQ29va2llcyBvYmplY3RBdEluZGV4OmldOworCisgICAgICAg
IC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9yYWdl
IHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKKyAgICAgICAgLy8gd2hpY2ggd291bGQgYmUg
c2VudCBhcyAiQ29va2llOiA9Ii4gV2UgaGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29va2llcygp
IHRvIHByZXZlbnQKKyAgICAgICAgLy8gdGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBhdm9pZCBz
ZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKKyAgICAgICAg
Ly8gdGhlcmUncyBubyBoYXJtIHRvIGRvaW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNoIGEgY29v
a2llIGlzIG5ldmVyIHZhbGlkLgorICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0p
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoW2Nvb2tpZSBpc0hUVFBPbmx5
XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFtmaWx0ZXJlZENvb2tpZXMuZ2V0
KCkgYWRkT2JqZWN0OmNvb2tpZV07CisgICAgfQorCisgICAgcmV0dXJuIGZpbHRlcmVkQ29va2ll
czsKK30KKworU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwp
Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJheSAqY29v
a2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5n
ZXQoKSwgdXJsKTsKKyAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxk
c1dpdGhDb29raWVzOmZpbHRlckNvb2tpZXMoY29va2llcykuZ2V0KCldIG9iamVjdEZvcktleTpA
IkNvb2tpZSJdOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CisKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOworICAgIHJldHVybiBbW05T
SFRUUENvb2tpZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6Y29va2llc10gb2JqZWN0
Rm9yS2V5OkAiQ29va2llIl07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKK3sKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4
Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29r
aWUsCisgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KKyAgICBpZiAo
Y29va2llU3RyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gPGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+Cisg
ICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tp
ZXMgd2l0aG91dCBhIHZhbHVlCisgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZVN0ci5j
b250YWlucygnPScpID8gY29va2llU3RyIDogY29va2llU3RyICsgIj0iOworCisgICAgTlNVUkwg
KmNvb2tpZVVSTCA9IHVybDsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29raWVz
ID0gZmlsdGVyQ29va2llcyhbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJG
aWVsZHM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcgZm9y
S2V5OkAiU2V0LUNvb2tpZSJdIGZvclVSTDpjb29raWVVUkxdKTsKKyAgICBBU1NFUlQoW2ZpbHRl
cmVkQ29va2llcy5nZXQoKSBjb3VudF0gPD0gMSk7CisKKyAgICB3a1NldEhUVFBDb29raWVzRm9y
VVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5n
ZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitib29sIGNvb2tpZXNFbmFibGVkKGNv
bnN0IERvY3VtZW50KikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAg
ICBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nh
c3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSkpOworICAgIHJldHVybiBjb29raWVB
Y2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIHx8IGNvb2tpZUFj
Y2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVu
dERvbWFpbjsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIHJhd0Nvb2tpZXMuY2xl
YXIoKTsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5ICpj
b29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgp
LmdldCgpLCB1cmwpOworICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07Cisg
ICAgcmF3Q29va2llcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOworICAgIGZvciAoTlNVSW50ZWdl
ciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUg
PSAoTlNIVFRQQ29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgTlNU
aW1lSW50ZXJ2YWwgZXhwaXJlcyA9IFtbY29va2llIGV4cGlyZXNEYXRlXSB0aW1lSW50ZXJ2YWxT
aW5jZTE5NzBdICogMTAwMDsKKyAgICAgICAgcmF3Q29va2llcy51bmNoZWNrZWRBcHBlbmQoQ29v
a2llKFtjb29raWUgbmFtZV0sIFtjb29raWUgdmFsdWVdLCBbY29va2llIGRvbWFpbl0sIFtjb29r
aWUgcGF0aF0sIGV4cGlyZXMsCisgICAgICAgICAgICBbY29va2llIGlzSFRUUE9ubHldLCBbY29v
a2llIGlzU2VjdXJlXSwgW2Nvb2tpZSBpc1Nlc3Npb25Pbmx5XSkpOworICAgIH0KKworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgZGVs
ZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IGNvb2tpZU5hbWUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAg
TlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAg
TlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQo
KSwgY29va2llVVJMKTsKKworICAgIE5TU3RyaW5nICpjb29raWVOYW1lU3RyaW5nID0gY29va2ll
TmFtZTsKKworICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07CisgICAgZm9y
IChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0hUVFBDb29r
aWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbY29va2llcyBvYmplY3RBdEluZGV4OmldOwor
ICAgICAgICBpZiAoW1tjb29raWUgbmFtZV0gaXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5hbWVTdHJp
bmddKQorICAgICAgICAgICAgd2tEZWxldGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCks
IGNvb2tpZSk7CisgICAgfQorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKwor
dm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykK
K3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5ICpjb29r
aWVzID0gd2tIVFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKTsK
KyAgICAKKyAgICBmb3IgKE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpCisgICAgICAg
IGhvc3RuYW1lcy5hZGQoW2Nvb2tpZSBkb21haW5dKTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworfQorCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwor
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQ
Q29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKKyAgICBpZiAoIWNvb2tpZXMpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBmb3IgKE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMp
IHsKKyAgICAgICAgaWYgKGhvc3RuYW1lID09IFN0cmluZyhbY29va2llIGRvbWFpbl0pKQorICAg
ICAgICAgICAgd2tEZWxldGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7
CisgICAgfQorICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQg
ZGVsZXRlQWxsQ29va2llcygpCit7CisgICAgd2tEZWxldGVBbGxIVFRQQ29va2llcyhkZWZhdWx0
Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKTsKK30KKworfQorCisjZW5kaWYgLy8gIVVTRShD
Rk5FVFdPUkspCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29r
aWVKYXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvQ29va2llSmFyTWFjLm1tCShyZXZpc2lvbiAxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkNvb2tp
ZUphci5oIgorI2ltcG9ydCAiUGxhdGZvcm1Db29raWVKYXIuaCIKIAogI2lmICFVU0UoQ0ZORVRX
T1JLKQogCkBAIC0zMiw3ICszMiw3IEBACiAjaW1wb3J0ICJDb29raWUuaCIKICNpbXBvcnQgIkNv
b2tpZVN0b3JhZ2UuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2ltcG9ydCAi
RG9jdW1lbnQuaCIKKyNpbXBvcnQgIktVUkwuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsMjkgKzYxLDMxIEBAIHN0YXRp
YyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2llcygKICAgICByZXR1cm4gZmlsdGVyZWRD
b29raWVzOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
IHVybCkKK1N0cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBLVVJMJiwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKIAotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7CisgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAg
TlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQo
KSwgdXJsKTsKICAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxkc1dp
dGhDb29raWVzOmZpbHRlckNvb2tpZXMoY29va2llcykuZ2V0KCldIG9iamVjdEZvcktleTpAIkNv
b2tpZSJdOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1cm4gU3Ry
aW5nKCk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsKQogewog
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIE5TQXJyYXkgKmNvb2tpZXMg
PSB3a0hUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCks
IHVybCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3Jh
Z2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNG
b3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJsKTsKICAgICByZXR1cm4gW1tOU0hUVFBDb29r
aWUgcmVxdWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVzOmNvb2tpZXNdIG9iamVjdEZvcktleTpA
IkNvb2tpZSJdOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1cm4g
U3RyaW5nKCk7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCit2b2lkIHNldENvb2tpZXNGcm9t
RE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQogewogICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTAwLDI4ICsxMDIsMzEgQEAgdm9pZCBzZXRDb29r
aWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIFJldGFpblB0cjxOU0FycmF5PiBmaWx0
ZXJlZENvb2tpZXMgPSBmaWx0ZXJDb29raWVzKFtOU0hUVFBDb29raWUgY29va2llc1dpdGhSZXNw
b25zZUhlYWRlckZpZWxkczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OmNvb2tp
ZVN0cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl0gZm9yVVJMOmNvb2tpZVVSTF0pOwogICAgIEFT
U0VSVChbZmlsdGVyZWRDb29raWVzLmdldCgpIGNvdW50XSA8PSAxKTsKIAotICAgIHdrU2V0SFRU
UENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVy
ZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFn
ZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKKyAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3Jh
Z2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBmaXJzdFBhcnR5KTsK
IAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLWJvb2wgY29va2llc0VuYWJs
ZWQoY29uc3QgRG9jdW1lbnQqKQorYm9vbCBjb29raWVzRW5hYmxlZChOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBO
U0hUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nhc3Q8
TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSkpOworICAgIFJldGFpblB0cjxDRkhUVFBD
b29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBD
b29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIE5TSFRU
UENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgPSBzdGF0aWNfY2FzdDxOU0hU
VFBDb29raWVBY2NlcHRQb2xpY3k+KHdrR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShjb29raWVT
dG9yYWdlLmdldCgpKSk7CiAgICAgcmV0dXJuIGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBD
b29raWVBY2NlcHRQb2xpY3lBbHdheXMgfHwgY29va2llQWNjZXB0UG9saWN5ID09IE5TSFRUUENv
b2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4m
IHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAg
cmF3Q29va2llcy5jbGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAot
ICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBD
b29raWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0
b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgTlNBcnJheSAqY29v
a2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJsKTsKICAg
ICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOwogICAgIHJhd0Nvb2tpZXMucmVz
ZXJ2ZUNhcGFjaXR5KGNvdW50KTsKICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CkBAIC0xMzUsMTIgKzE0MCwxMiBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqLCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2ll
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5h
bWUpCit2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCiAgICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKLSAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6
IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgTlNBcnJheSAqY29va2llcyA9IHdr
SFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llVVJMKTsKIAogICAg
IE5TU3RyaW5nICpjb29raWVOYW1lU3RyaW5nID0gY29va2llTmFtZTsKQEAgLTE1NSwxMSArMTYw
LDEyIEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMp
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgTlNBcnJheSAqY29v
a2llcyA9IHdrSFRUUENvb2tpZXMoZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7
CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBj
b250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29r
aWVTdG9yYWdlKCk7CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMoY29va2ll
U3RvcmFnZS5nZXQoKSk7CiAgICAgCiAgICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBj
b29raWVzKQogICAgICAgICBob3N0bmFtZXMuYWRkKFtjb29raWUgZG9tYWluXSk7CkBAIC0xNjcs
MTEgKzE3MywxMSBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIFJldGFpblB0cjxD
RkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVs
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29v
a2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKICAgICBpZiAoIWNvb2tpZXMpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE4NCw5ICsxOTAsMTAgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVs
ZXRlQWxsQ29va2llcygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgd2tEZWxldGVBbGxIVFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQQ29v
a2llU3RvcmFnZSgpLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgp
IDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICB3a0RlbGV0ZUFsbEhUVFBDb29r
aWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0LmNwcAkocmV2aXNpb24gMTMz
OTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHA6MTMz
OTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDb29raWVKYXJRdC5oIgorCisjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAiQ29v
a2llSmFyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5ldHdv
cmtpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgorI2luY2x1
ZGUgPFFEYXRlVGltZT4KKyNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CisjaW5jbHVk
ZSA8UU5ldHdvcmtDb29raWU+CisjaW5jbHVkZSA8UVNxbFF1ZXJ5PgorI2luY2x1ZGUgPFFTdHJp
bmdMaXN0PgorI2luY2x1ZGUgPFFWYXJpYW50PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTaGFyZWRDb29raWVKYXJRdCog
c19zaGFyZWRDb29raWVKYXJRdCA9IDA7CisKK3N0YXRpYyBOZXR3b3JraW5nQ29udGV4dCogbmV0
d29ya2luZ0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIGlmICghZG9j
dW1lbnQpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lTG9h
ZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Cit9CisK
K3ZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5l
dHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybjsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vz
c01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisgICAgaWYgKCFqYXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOworICAgIFFVcmwgZmlyc3RQYXJ0eVVybChk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29v
a2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBR
TmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvTGF0aW4xKCkpOwor
ICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgaXQgPSBjb29raWVzLmJlZ2luKCk7
CisgICAgd2hpbGUgKGl0ICE9IGNvb2tpZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKGl0LT5pc0h0
dHBPbmx5KCkpCisgICAgICAgICAgICBpdCA9IGNvb2tpZXMuZXJhc2UoaXQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICArK2l0OworICAgIH0KKworICAgIGphci0+c2V0Q29va2llc0Zyb21V
cmwoY29va2llcywgdXJsRm9yQ29va2llcyk7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBq
YXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKworICAg
IFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOworICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVu
dC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9s
aWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMg
PSBqYXItPmNvb2tpZXNGb3JVcmwodXJsRm9yQ29va2llcyk7CisgICAgaWYgKGNvb2tpZXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBRU3RyaW5nTGlzdCByZXN1
bHRDb29raWVzOworICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrQ29va2llJiBuZXR3b3JrQ29v
a2llLCBjb29raWVzKSB7CisgICAgICAgIGlmIChuZXR3b3JrQ29va2llLmlzSHR0cE9ubHkoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXN1bHRDb29raWVzLmFwcGVuZChRU3Ry
aW5nOjpmcm9tTGF0aW4xKG5ldHdvcmtDb29raWUudG9SYXdGb3JtKFFOZXR3b3JrQ29va2llOjpO
YW1lQW5kVmFsdWVPbmx5KS5jb25zdERhdGEoKSkpOworICAgIH0KKworICAgIHJldHVybiByZXN1
bHRDb29raWVzLmpvaW4oUUxhdGluMVN0cmluZygiOyAiKSk7Cit9CisKK1N0cmluZyBjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwgJnVybCkKK3sKKyAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdD
b250ZXh0KGRvY3VtZW50KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vz
c01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29v
a2llcyA9IGphci0+Y29va2llc0ZvclVybChRVXJsKHVybCkpOworICAgIGlmIChjb29raWVzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUVN0cmluZ0xpc3QgcmVz
dWx0Q29va2llczsKKyAgICBmb3JlYWNoIChRTmV0d29ya0Nvb2tpZSBuZXR3b3JrQ29va2llLCBj
b29raWVzKQorICAgICAgICByZXN1bHRDb29raWVzLmFwcGVuZChRU3RyaW5nOjpmcm9tTGF0aW4x
KG5ldHdvcmtDb29raWUudG9SYXdGb3JtKFFOZXR3b3JrQ29va2llOjpOYW1lQW5kVmFsdWVPbmx5
KS5jb25zdERhdGEoKSkpOworCisgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4x
U3RyaW5nKCI7ICIpKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQpCit7CisgICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUph
cigpOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCit7CisgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgcmV0dXJuIGZhbHNlOyAv
LyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCit9CisKK3ZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gRklY
TUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK30KKwordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBTaGFyZWRDb29raWVKYXJRdCog
amFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIGlmIChqYXIpCisgICAgICAg
IGphci0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKK30KKwordm9pZCBkZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBTaGFy
ZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIGlm
IChqYXIpCisgICAgICAgIGphci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsK
K30KKwordm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICBTaGFyZWRDb29raWVKYXJRdCog
amFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIGlmIChqYXIpCisgICAgICAg
IGphci0+ZGVsZXRlQWxsQ29va2llcygpOworfQorCitTaGFyZWRDb29raWVKYXJRdCogU2hhcmVk
Q29va2llSmFyUXQ6OnNoYXJlZCgpCit7CisgICAgcmV0dXJuIHNfc2hhcmVkQ29va2llSmFyUXQ7
Cit9CisKK1NoYXJlZENvb2tpZUphclF0KiBTaGFyZWRDb29raWVKYXJRdDo6Y3JlYXRlKGNvbnN0
IFN0cmluZyYgY29va2llU3RvcmFnZURpcmVjdG9yeSkKK3sKKyAgICBpZiAoIXNfc2hhcmVkQ29v
a2llSmFyUXQpCisgICAgICAgIHNfc2hhcmVkQ29va2llSmFyUXQgPSBuZXcgU2hhcmVkQ29va2ll
SmFyUXQoY29va2llU3RvcmFnZURpcmVjdG9yeSk7CisKKyAgICByZXR1cm4gc19zaGFyZWRDb29r
aWVKYXJRdDsKK30KKwordm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVzdHJveSgpCit7CisgICAg
ZGVsZXRlIHNfc2hhcmVkQ29va2llSmFyUXQ7CisgICAgc19zaGFyZWRDb29raWVKYXJRdCA9IDA7
Cit9CisKK3ZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhh
c2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBj
b29raWVzID0gYWxsQ29va2llcygpOworICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrQ29va2ll
JiBuZXR3b3JrQ29va2llLCBjb29raWVzKQorICAgICAgICBob3N0bmFtZXMuYWRkKG5ldHdvcmtD
b29raWUuZG9tYWluKCkpOworfQorCitib29sIFNoYXJlZENvb2tpZUphclF0OjpkZWxldGVDb29r
aWUoY29uc3QgUU5ldHdvcmtDb29raWUmIGNvb2tpZSkKK3sKKyAgICBpZiAoIVFOZXR3b3JrQ29v
a2llSmFyOjpkZWxldGVDb29raWUoY29va2llKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3FsUXVlcnkucHJlcGFyZShR
TGF0aW4xU3RyaW5nKCJERUxFVEUgRlJPTSBjb29raWVzIFdIRVJFIGNvb2tpZUlkPTpjb29raWVJ
ZHZhbHVlIikpOworICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29va2ll
SWR2YWx1ZSIpLCBjb29raWUuZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoY29va2llLm5h
bWUoKSkpKTsKKyAgICBzcWxRdWVyeS5leGVjKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0
cmluZyYgaG9zdG5hbWUpCit7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGFsbENvb2tp
ZXMoKTsKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGl0ID0gY29va2llcy5i
ZWdpbigpOworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgZW5kID0gY29va2ll
cy5lbmQoKTsKKyAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3FsUXVl
cnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJERUxFVEUgRlJPTSBjb29raWVzIFdIRVJFIGNvb2tp
ZUlkPTpjb29raWVJZHZhbHVlIikpOworICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKKyAgICAgICAg
aWYgKGl0LT5kb21haW4oKSA9PSBRU3RyaW5nKGhvc3RuYW1lKSkgeworICAgICAgICAgICAgc3Fs
UXVlcnkuYmluZFZhbHVlKFFMYXRpbjFTdHJpbmcoIjpjb29raWVJZHZhbHVlIiksIGl0LT5kb21h
aW4oKS5hcHBlbmQoUUxhdGluMVN0cmluZyhpdC0+bmFtZSgpKSkpOworICAgICAgICAgICAgc3Fs
UXVlcnkuZXhlYygpOworICAgICAgICAgICAgaXQgPSBjb29raWVzLmVyYXNlKGl0KTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBpdCsrOworICAgIH0KKyAgICBzZXRBbGxDb29raWVzKGNv
b2tpZXMpOworfQorCit2b2lkIFNoYXJlZENvb2tpZUphclF0OjpkZWxldGVBbGxDb29raWVzKCkK
K3sKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKKyAgICBzcWxRdWVyeS5wcmVwYXJlKFFM
YXRpbjFTdHJpbmcoIkRFTEVURSAqIEZST00gY29va2llcyIpKTsKKyAgICBzcWxRdWVyeS5leGVj
KCk7CisgICAgc2V0QWxsQ29va2llcyhRTGlzdDxRTmV0d29ya0Nvb2tpZT4oKSk7Cit9CisKK1No
YXJlZENvb2tpZUphclF0OjpTaGFyZWRDb29raWVKYXJRdChjb25zdCBTdHJpbmcmIGNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnkpCit7CisgICAgbV9kYXRhYmFzZSA9IFFTcWxEYXRhYmFzZTo6YWRkRGF0
YWJhc2UoUUxhdGluMVN0cmluZygiUVNRTElURSIpKTsKKyAgICBjb25zdCBRU3RyaW5nIGNvb2tp
ZVN0b3JhZ2VQYXRoID0gY29va2llU3RvcmFnZURpcmVjdG9yeTsKKyAgICBjb25zdCBRU3RyaW5n
IGRhdGFCYXNlTmFtZSA9IGNvb2tpZVN0b3JhZ2VQYXRoICsgUUxhdGluMVN0cmluZygiL2Nvb2tp
ZXMuZGIiKTsKKyAgICBtX2RhdGFiYXNlLnNldERhdGFiYXNlTmFtZShkYXRhQmFzZU5hbWUpOwor
ICAgIGVuc3VyZURhdGFiYXNlVGFibGUoKTsKKyAgICBsb2FkQ29va2llcygpOworfQorCitTaGFy
ZWRDb29raWVKYXJRdDo6flNoYXJlZENvb2tpZUphclF0KCkKK3sKKyAgICBtX2RhdGFiYXNlLmNs
b3NlKCk7Cit9CisKK2Jvb2wgU2hhcmVkQ29va2llSmFyUXQ6OnNldENvb2tpZXNGcm9tVXJsKGNv
bnN0IFFMaXN0PFFOZXR3b3JrQ29va2llPiYgY29va2llTGlzdCwgY29uc3QgUVVybCYgdXJsKQor
eworICAgIGlmICghUU5ldHdvcmtDb29raWVKYXI6OnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZUxp
c3QsIHVybCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5
KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGluMVN0cmluZygiSU5TRVJU
IE9SIFJFUExBQ0UgSU5UTyBjb29raWVzIChjb29raWVJZCwgY29va2llKSBWQUxVRVMgKDpjb29r
aWVJZHZhbHVlLCA6Y29va2lldmFsdWUpIikpOworICAgIFFWYXJpYW50TGlzdCBjb29raWVzSWRz
OworICAgIFFWYXJpYW50TGlzdCBjb29raWVzVmFsdWVzOworICAgIGZvcmVhY2ggKGNvbnN0IFFO
ZXR3b3JrQ29va2llICZjb29raWUsIGNvb2tpZXNGb3JVcmwodXJsKSkgeworICAgICAgICBpZiAo
Y29va2llLmlzU2Vzc2lvbkNvb2tpZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGNvb2tpZXNJZHMuYXBwZW5kKGNvb2tpZS5kb21haW4oKS5hcHBlbmQoUUxhdGluMVN0cmluZyhj
b29raWUubmFtZSgpKSkpOworICAgICAgICBjb29raWVzVmFsdWVzLmFwcGVuZChjb29raWUudG9S
YXdGb3JtKCkpOworICAgIH0KKyAgICBzcWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0cmluZygi
OmNvb2tpZUlkdmFsdWUiKSwgY29va2llc0lkcyk7CisgICAgc3FsUXVlcnkuYmluZFZhbHVlKFFM
YXRpbjFTdHJpbmcoIjpjb29raWV2YWx1ZSIpLCBjb29raWVzVmFsdWVzKTsKKyAgICBzcWxRdWVy
eS5leGVjQmF0Y2goKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaGFyZWRDb29raWVK
YXJRdDo6ZW5zdXJlRGF0YWJhc2VUYWJsZSgpCit7CisgICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4o
KSkgeworICAgICAgICBxV2FybmluZygiQ2FuJ3Qgb3BlbiBjb29raWUgZGF0YWJhc2UiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2RhdGFiYXNlLmV4ZWMoUUxhdGluMVN0cmluZygi
UFJBR01BIHN5bmNocm9ub3VzPU9GRiIpKTsKKworICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2Rh
dGFiYXNlKTsKKyAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIGNvb2tpZXMgKGNvb2tpZUlkIFZBUkNIQVIgUFJJTUFSWSBLRVksIGNv
b2tpZSBCTE9CKTsiKSk7CisgICAgc3FsUXVlcnkuZXhlYygpOworfQorCit2b2lkIFNoYXJlZENv
b2tpZUphclF0Ojpsb2FkQ29va2llcygpCit7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llczsK
KyAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3FsUXVlcnkucHJlcGFy
ZShRTGF0aW4xU3RyaW5nKCJTRUxFQ1QgY29va2llIEZST00gY29va2llcyIpKTsKKyAgICBzcWxR
dWVyeS5leGVjKCk7CisgICAgd2hpbGUgKHNxbFF1ZXJ5Lm5leHQoKSkKKyAgICAgICAgY29va2ll
cy5hcHBlbmQoUU5ldHdvcmtDb29raWU6OnBhcnNlQ29va2llcyhzcWxRdWVyeS52YWx1ZSgwKS50
b0J5dGVBcnJheSgpKSk7CisgICAgc2V0QWxsQ29va2llcyhjb29raWVzKTsKK30KKworI2luY2x1
ZGUgIm1vY19Db29raWVKYXJRdC5jcHAiCisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFy
UXQuY3BwCShyZXZpc2lvbiAxMzM5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDcgQEAK
ICNpbmNsdWRlICJDb29raWVKYXJRdC5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVk
ZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIu
aCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNp
bmNsdWRlICJUaGlyZFBhcnR5Q29va2llc1F0LmgiCkBAIC00OSwzMCArNDYsMTQgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIHNfc2hhcmVkQ29va2ll
SmFyUXQgPSAwOwogCi1zdGF0aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250ZXh0
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBGcmFtZUxvYWRlciogbG9hZGVyID0g
ZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpOwotfQotCi12b2lkIHNldENvb2tp
ZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4
dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAgUU5l
dHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNv
b2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29udGV4
dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29raWVKYXJR
dDo6c2hhcmVkKCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIFFVcmwg
dXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgUVVybCBmaXJzdFBhcnR5VXJsKGZpcnN0UGFydHkp
OwogICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMoY29udGV4dCwgdXJsRm9y
Q29va2llcywgZmlyc3RQYXJ0eVVybCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtODgsMTUgKzY5
LDE0IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBqYXIt
PnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZXMsIHVybEZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcg
Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmlu
ZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNv
bnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3Jr
Q29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIo
KS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CisgICAgaWYgKCFq
YXIpCisgICAgICAgIHJldHVybjsKIAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAg
IFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Cisg
ICAgUVVybCBmaXJzdFBhcnR5VXJsKGZpcnN0UGFydHkpOwogICAgIGlmICghdGhpcmRQYXJ0eUNv
b2tpZVBvbGljeVBlcm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMTE0LDEyICs5NCwxMSBAQCBTdHJpbmcg
Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsCiAgICAgcmV0dXJuIHJlc3VsdENvb2tp
ZXMuam9pbihRTGF0aW4xU3RyaW5nKCI7ICIpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJs
KQorU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBLVVJMICZ1cmwpCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQor
ICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29ya0Fj
Y2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7
CisgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBRTmV0d29ya0Nv
b2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFy
KCk7CiAKICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0Zv
clVybChRVXJsKHVybCkpOwogICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkKQEAgLTEzMiw0MyAr
MTExLDQxIEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAgICBy
ZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1ib29s
IGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgY29va2llc0Vu
YWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRl
eHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIg
PSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCkg
OiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CisgICAgcmV0dXJuICEhamFyOwogfQogCi1i
b29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENv
b2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklY
TUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0
dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVs
ZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2
b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lk
IGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0g
U2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIg
PSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCkg
OiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKICAgICAgICAgamFy
LT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOwogfQogCi12b2lkIGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUpCiB7Ci0gICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUph
clF0OjpzaGFyZWQoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dCA/IGNv
bnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpIDogU2hhcmVkQ29va2ll
SmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3Zv
aWQgZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBT
aGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAg
IFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29ya0FjY2Vz
c01hbmFnZXIoKS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAg
ICAgaWYgKGphcikKICAgICAgICAgamFyLT5kZWxldGVBbGxDb29raWVzKCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUph
clNvdXAuY3BwCShyZXZpc2lvbiAxMzM5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDkgKzIy
LDcgQEAKICNpbmNsdWRlICJDb29raWVKYXJTb3VwLmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogI2luY2x1ZGUgIkdP
d25QdHJTb3VwLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250
ZXh0LmgiCkBAIC0zNCwxOSArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyBTb3VwQ29va2llSmFyKiBjb29raWVKYXJGb3JEb2N1bWVudChjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQpCitzdGF0aWMgU291cENvb2tpZUphciogY29va2llSmFyRm9yQ29udGV4dChOZXR3b3Jr
aW5nQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1
cm4gMDsKLSAgICBjb25zdCBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBGcmFtZUxvYWRlciogbG9h
ZGVyID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBjb25zdCBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IGxvYWRlci0+bmV0d29y
a2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiBTT1VQX0NPT0tJRV9KQVIoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKGNvbnRleHQt
PnNvdXBTZXNzaW9uKCksIFNPVVBfVFlQRV9DT09LSUVfSkFSKSk7CiB9CiAKQEAgLTg2LDE0ICs3
MywxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaHR0cE9ubHlDb29raWVFeGlzdHMoCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIHNldENvb2tpZXNGcm9tRE9N
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgU291cENvb2tpZUphciog
amFyID0gY29va2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIFNvdXBDb29raWVKYXIq
IGphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENvb2tp
ZUphcigpOwogICAgIGlmICghamFyKQogICAgICAgICByZXR1cm47CiAKICAgICBHT3duUHRyPFNv
dXBVUkk+IG9yaWdpbihzb3VwX3VyaV9uZXcodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsK
LSAgICBHT3duUHRyPFNvdXBVUkk+IGZpcnN0UGFydHkoc291cF91cmlfbmV3KGRvY3VtZW50LT5m
aXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBHT3du
UHRyPFNvdXBVUkk+IGZpcnN0UGFydHkoc291cF91cmlfbmV3KGZpcnN0UGFydHkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSkpOwogCiAgICAgLy8gR2V0IGV4aXN0aW5nIGNvb2tpZXMgZm9yIHRoaXMg
b3JpZ2luLgogICAgIEdTTGlzdCogZXhpc3RpbmdDb29raWVzID0gc291cF9jb29raWVfamFyX2dl
dF9jb29raWVfbGlzdChqYXIsIG9yaWdpbi5nZXQoKSwgVFJVRSk7CkBAIC0xMjAsOSArMTA3LDkg
QEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIHNvdXBfY29v
a2llc19mcmVlKGV4aXN0aW5nQ29va2llcyk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgY29va2llc0Zv
ckRvY3VtZW50KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBib29s
IGZvckhUVFBIZWFkZXIpCitzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JDb250ZXh0KE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgZm9ySFRUUEhlYWRlcikK
IHsKLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVu
dCk7CisgICAgU291cENvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvb2tpZUphckZvckNvbnRl
eHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIApAQCAtMTMxLDI1ICsxMTgsMjUgQEAgc3RhdGljIFN0cmluZyBjb29r
aWVzRm9yRG9jdW1lbnQoY29uc3QgRAogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGNvb2tp
ZXMuZ2V0KCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIHJldHVybiBj
b29raWVzRm9yRG9jdW1lbnQoZG9jdW1lbnQsIHVybCwgZmFsc2UpOworICAgIHJldHVybiBjb29r
aWVzRm9yQ29udGV4dChjb250ZXh0LCB1cmwsIGZhbHNlKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsKQorU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIGNvb2tpZXNG
b3JEb2N1bWVudChkb2N1bWVudCwgdXJsLCB0cnVlKTsKKyAgICByZXR1cm4gY29va2llc0ZvckNv
bnRleHQoY29udGV4dCwgdXJsLCB0cnVlKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIGNvb2tpZXNFbmFibGVkKE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiAhIWNvb2tpZUphckZvckRvY3VtZW50KGRvY3Vt
ZW50KTsKKyAgICByZXR1cm4gISFjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpOwogfQogCi1i
b29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRSYXdDb29raWVzKE5ldHdv
cmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBTb3VwQ29va2llSmFy
KiBqYXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAgU291cENvb2tpZUph
ciogamFyID0gY29udGV4dCA/IGNvb2tpZUphckZvckNvbnRleHQoY29udGV4dCkgOiBzb3VwQ29v
a2llSmFyKCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTcw
LDkgKzE1Nyw5IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgZGVsZXRl
Q29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JE
b2N1bWVudChkb2N1bWVudCk7CisgICAgU291cENvb2tpZUphciogamFyID0gY29udGV4dCA/IGNv
b2tpZUphckZvckNvbnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgaWYgKCFq
YXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTkxLDkgKzE3OCw5IEBAIHZvaWQgZGVsZXRlQ29v
a2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWUKICAgICB9CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmluZz4m
IGhvc3RuYW1lcykKIHsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBzb3VwQ29va2ll
SmFyKCk7CisgICAgU291cENvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvb2tpZUphckZvckNv
bnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgR093blB0cjxHU0xpc3Q+IGNv
b2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOwogICAgIGZvciAo
R1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChp
dGVtKSkgewogICAgICAgICBHT3duUHRyPFNvdXBDb29raWU+IGNvb2tpZShzdGF0aWNfY2FzdDxT
b3VwQ29va2llKj4oaXRlbS0+ZGF0YSkpOwpAQCAtMjAzLDEwICsxOTAsMTAgQEAgdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIH0KIH0KIAotdm9pZCBkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQogewogICAgIENTdHJpbmcgaG9zdE5hbWVTdHJpbmcgPSBob3N0bmFtZS51dGY4
KCk7Ci0gICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc291cENvb2tpZUphcigpOworICAg
IFNvdXBDb29raWVKYXIqIGphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRl
eHQpIDogc291cENvb2tpZUphcigpOwogICAgIEdPd25QdHI8R1NMaXN0PiBjb29raWVzKHNvdXBf
Y29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpKTsKICAgICBmb3IgKEdTTGlzdCogaXRl
bSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKICAg
ICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0t
PmRhdGEpOwpAQCAtMjE2LDkgKzIwMyw5IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KGNvbnN0IFN0cmkKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIGRl
bGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgU291cENv
b2tpZUphciogY29va2llSmFyID0gc291cENvb2tpZUphcigpOworICAgIFNvdXBDb29raWVKYXIq
IGphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENvb2tp
ZUphcigpOwogICAgIEdPd25QdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxf
Y29va2llcyhjb29raWVKYXIpKTsKICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0
KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKICAgICAgICAgU291cENvb2tp
ZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFy
U291cC5oCShyZXZpc2lvbiAxMzM5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvQ29va2llSmFyU291cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBA
CiAjaWZuZGVmIENvb2tpZUphclNvdXBfaAogI2RlZmluZSBDb29raWVKYXJTb3VwX2gKIAotI2lu
Y2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9D
b29raWVKYXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAJKHJldmlzaW9uIDEzMzkxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDExICsyNCwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogCiAjaW5j
bHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5j
bHVkZSA8V2luaW5ldC5oPgpAQCAtMzYsMTYgKzM1LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29y
a2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQogewotICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggZG9jdW1lbnQtPmZpcnN0UGFydHlG
b3JDb29raWVzKCkuCisgICAgLy8gRklYTUU6IERlYWwgd2l0aCBmaXJzdFBhcnR5IGFyZ3VtZW50
LgogICAgIFN0cmluZyBzdHIgPSB1cmwuc3RyaW5nKCk7CiAgICAgU3RyaW5nIHZhbCA9IHZhbHVl
OwogICAgIEludGVybmV0U2V0Q29va2llKHN0ci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpLCAwLCB2YWwuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLVN0cmlu
ZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkK
K1N0cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNv
bnN0IEtVUkwmIHVybCkKIHsKKyAgICAvLyBGSVhNRTogRGVhbCB3aXRoIGZpcnN0UGFydHkgYXJn
dW1lbnQuCisKICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogCiAgICAgRFdPUkQgY291
bnQgPSAwOwpAQCAtNjMsNDAgKzY0LDQwIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50
KiAvKmRvY3VtZW4KICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwogfQogCi1TdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgLy8gRklYTUU6IGlu
Y2x1ZGUgSHR0cE9ubHkgY29va2llCi0gICAgcmV0dXJuIGNvb2tpZXMoZG9jdW1lbnQsIHVybCk7
CisgICAgcmV0dXJuIGNvb2tpZXNGb3JET00oY29udGV4dCwgdXJsKTsKIH0KIAotYm9vbCBjb29r
aWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBjb29raWVzRW5h
YmxlZChOZXR3b3JraW5nQ29udGV4dCopCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
Z2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2ll
PiYgcmF3Q29va2llcykKK2Jvb2wgZ2V0UmF3Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCosIGNv
bnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTog
Tm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4g
ZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVD
b29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQg
ZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBIYXNoU2V0PFN0cmluZz4m
IGhvc3RuYW1lcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9p
ZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJp
bmcmIGhvc3RuYW1lKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAK
LXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2lu
Z0NvbnRleHQqKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCShyZXZpc2lvbiAx
MzM5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
R2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJD
b29raWVKYXJRdC5oIgotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ29va2llSmFy
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIk5ldHdvcmtpbmdD
b250ZXh0LmgiCi0jaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgotI2luY2x1ZGUgPFFE
YXRlVGltZT4KLSNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+Ci0jaW5jbHVkZSA8UU5l
dHdvcmtDb29raWU+Ci0jaW5jbHVkZSA8UVNxbFF1ZXJ5PgotI2luY2x1ZGUgPFFTdHJpbmdMaXN0
PgotI2luY2x1ZGUgPFFWYXJpYW50PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBTaGFyZWRDb29raWVKYXJRdCogc19zaGFy
ZWRDb29raWVKYXJRdCA9IDA7Ci0KLXN0YXRpYyBOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2lu
Z0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGlmICghZG9jdW1lbnQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgp
OwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lTG9hZGVyKiBs
b2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Ci19Ci0KLXZvaWQg
c2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtp
bmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsK
LSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFn
ZXIoKS0+Y29va2llSmFyKCk7Ci0gICAgaWYgKCFqYXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVu
dC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9s
aWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBRTmV0d29y
a0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvTGF0aW4xKCkpOwotICAgIFFM
aXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgaXQgPSBjb29raWVzLmJlZ2luKCk7Ci0gICAg
d2hpbGUgKGl0ICE9IGNvb2tpZXMuZW5kKCkpIHsKLSAgICAgICAgaWYgKGl0LT5pc0h0dHBPbmx5
KCkpCi0gICAgICAgICAgICBpdCA9IGNvb2tpZXMuZXJhc2UoaXQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICArK2l0OwotICAgIH0KLQotICAgIGphci0+c2V0Q29va2llc0Zyb21VcmwoY29v
a2llcywgdXJsRm9yQ29va2llcyk7Ci19Ci0KLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQotewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBj
b250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKLQotICAgIFFVcmwg
dXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVy
bWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBqYXIt
PmNvb2tpZXNGb3JVcmwodXJsRm9yQ29va2llcyk7Ci0gICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBRU3RyaW5nTGlzdCByZXN1bHRDb29r
aWVzOwotICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrQ29va2llJiBuZXR3b3JrQ29va2llLCBj
b29raWVzKSB7Ci0gICAgICAgIGlmIChuZXR3b3JrQ29va2llLmlzSHR0cE9ubHkoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXN1bHRDb29raWVzLmFwcGVuZChRU3RyaW5nOjpm
cm9tTGF0aW4xKG5ldHdvcmtDb29raWUudG9SYXdGb3JtKFFOZXR3b3JrQ29va2llOjpOYW1lQW5k
VmFsdWVPbmx5KS5jb25zdERhdGEoKSkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHRDb29r
aWVzLmpvaW4oUUxhdGluMVN0cmluZygiOyAiKSk7Ci19Ci0KLVN0cmluZyBjb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVy
bCkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0
KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFn
ZXIoKS0+Y29va2llSmFyKCk7Ci0KLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9
IGphci0+Y29va2llc0ZvclVybChRVXJsKHVybCkpOwotICAgIGlmIChjb29raWVzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgUVN0cmluZ0xpc3QgcmVzdWx0Q29v
a2llczsKLSAgICBmb3JlYWNoIChRTmV0d29ya0Nvb2tpZSBuZXR3b3JrQ29va2llLCBjb29raWVz
KQotICAgICAgICByZXN1bHRDb29raWVzLmFwcGVuZChRU3RyaW5nOjpmcm9tTGF0aW4xKG5ldHdv
cmtDb29raWUudG9SYXdGb3JtKFFOZXR3b3JrQ29va2llOjpOYW1lQW5kVmFsdWVPbmx5KS5jb25z
dERhdGEoKSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3RyaW5n
KCI7ICIpKTsKLX0KLQotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4
dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwot
fQotCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVj
dG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKLSAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1
cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCi19Ci0KLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IE5v
dCB5ZXQgaW1wbGVtZW50ZWQKLX0KLQotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0g
U2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwotICAgIGlmIChqYXIpCi0gICAgICAgIGphci0+
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKLX0KLQotdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKLXsKLSAgICBTaGFyZWRDb29r
aWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwotICAgIGlmIChqYXIp
Ci0gICAgICAgIGphci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKLX0KLQot
dm9pZCBkZWxldGVBbGxDb29raWVzKCkKLXsKLSAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0g
U2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwotICAgIGlmIChqYXIpCi0gICAgICAgIGphci0+
ZGVsZXRlQWxsQ29va2llcygpOwotfQotCi1TaGFyZWRDb29raWVKYXJRdCogU2hhcmVkQ29va2ll
SmFyUXQ6OnNoYXJlZCgpCi17Ci0gICAgcmV0dXJuIHNfc2hhcmVkQ29va2llSmFyUXQ7Ci19Ci0K
LVNoYXJlZENvb2tpZUphclF0KiBTaGFyZWRDb29raWVKYXJRdDo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgY29va2llU3RvcmFnZURpcmVjdG9yeSkKLXsKLSAgICBpZiAoIXNfc2hhcmVkQ29va2llSmFy
UXQpCi0gICAgICAgIHNfc2hhcmVkQ29va2llSmFyUXQgPSBuZXcgU2hhcmVkQ29va2llSmFyUXQo
Y29va2llU3RvcmFnZURpcmVjdG9yeSk7Ci0KLSAgICByZXR1cm4gc19zaGFyZWRDb29raWVKYXJR
dDsKLX0KLQotdm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVzdHJveSgpCi17Ci0gICAgZGVsZXRl
IHNfc2hhcmVkQ29va2llSmFyUXQ7Ci0gICAgc19zaGFyZWRDb29raWVKYXJRdCA9IDA7Ci19Ci0K
LXZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8
U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVz
ID0gYWxsQ29va2llcygpOwotICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrQ29va2llJiBuZXR3
b3JrQ29va2llLCBjb29raWVzKQotICAgICAgICBob3N0bmFtZXMuYWRkKG5ldHdvcmtDb29raWUu
ZG9tYWluKCkpOwotfQotCi1ib29sIFNoYXJlZENvb2tpZUphclF0OjpkZWxldGVDb29raWUoY29u
c3QgUU5ldHdvcmtDb29raWUmIGNvb2tpZSkKLXsKLSAgICBpZiAoIVFOZXR3b3JrQ29va2llSmFy
OjpkZWxldGVDb29raWUoY29va2llKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBRU3Fs
UXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4x
U3RyaW5nKCJERUxFVEUgRlJPTSBjb29raWVzIFdIRVJFIGNvb2tpZUlkPTpjb29raWVJZHZhbHVl
IikpOwotICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29va2llSWR2YWx1
ZSIpLCBjb29raWUuZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoY29va2llLm5hbWUoKSkp
KTsKLSAgICBzcWxRdWVyeS5leGVjKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBT
aGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUpCi17Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGFsbENvb2tpZXMoKTsK
LSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGl0ID0gY29va2llcy5iZWdpbigp
OwotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgZW5kID0gY29va2llcy5lbmQo
KTsKLSAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnkucHJl
cGFyZShRTGF0aW4xU3RyaW5nKCJERUxFVEUgRlJPTSBjb29raWVzIFdIRVJFIGNvb2tpZUlkPTpj
b29raWVJZHZhbHVlIikpOwotICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKLSAgICAgICAgaWYgKGl0
LT5kb21haW4oKSA9PSBRU3RyaW5nKGhvc3RuYW1lKSkgewotICAgICAgICAgICAgc3FsUXVlcnku
YmluZFZhbHVlKFFMYXRpbjFTdHJpbmcoIjpjb29raWVJZHZhbHVlIiksIGl0LT5kb21haW4oKS5h
cHBlbmQoUUxhdGluMVN0cmluZyhpdC0+bmFtZSgpKSkpOwotICAgICAgICAgICAgc3FsUXVlcnku
ZXhlYygpOwotICAgICAgICAgICAgaXQgPSBjb29raWVzLmVyYXNlKGl0KTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBpdCsrOwotICAgIH0KLSAgICBzZXRBbGxDb29raWVzKGNvb2tpZXMp
OwotfQotCi12b2lkIFNoYXJlZENvb2tpZUphclF0OjpkZWxldGVBbGxDb29raWVzKCkKLXsKLSAg
ICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFTcWxR
dWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKLSAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFT
dHJpbmcoIkRFTEVURSAqIEZST00gY29va2llcyIpKTsKLSAgICBzcWxRdWVyeS5leGVjKCk7Ci0g
ICAgc2V0QWxsQ29va2llcyhRTGlzdDxRTmV0d29ya0Nvb2tpZT4oKSk7Ci19Ci0KLVNoYXJlZENv
b2tpZUphclF0OjpTaGFyZWRDb29raWVKYXJRdChjb25zdCBTdHJpbmcmIGNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnkpCi17Ci0gICAgbV9kYXRhYmFzZSA9IFFTcWxEYXRhYmFzZTo6YWRkRGF0YWJhc2Uo
UUxhdGluMVN0cmluZygiUVNRTElURSIpKTsKLSAgICBjb25zdCBRU3RyaW5nIGNvb2tpZVN0b3Jh
Z2VQYXRoID0gY29va2llU3RvcmFnZURpcmVjdG9yeTsKLSAgICBjb25zdCBRU3RyaW5nIGRhdGFC
YXNlTmFtZSA9IGNvb2tpZVN0b3JhZ2VQYXRoICsgUUxhdGluMVN0cmluZygiL2Nvb2tpZXMuZGIi
KTsKLSAgICBtX2RhdGFiYXNlLnNldERhdGFiYXNlTmFtZShkYXRhQmFzZU5hbWUpOwotICAgIGVu
c3VyZURhdGFiYXNlVGFibGUoKTsKLSAgICBsb2FkQ29va2llcygpOwotfQotCi1TaGFyZWRDb29r
aWVKYXJRdDo6flNoYXJlZENvb2tpZUphclF0KCkKLXsKLSAgICBtX2RhdGFiYXNlLmNsb3NlKCk7
Ci19Ci0KLWJvb2wgU2hhcmVkQ29va2llSmFyUXQ6OnNldENvb2tpZXNGcm9tVXJsKGNvbnN0IFFM
aXN0PFFOZXR3b3JrQ29va2llPiYgY29va2llTGlzdCwgY29uc3QgUVVybCYgdXJsKQotewotICAg
IGlmICghUU5ldHdvcmtDb29raWVKYXI6OnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZUxpc3QsIHVy
bCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0
YWJhc2UpOwotICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGluMVN0cmluZygiSU5TRVJUIE9SIFJF
UExBQ0UgSU5UTyBjb29raWVzIChjb29raWVJZCwgY29va2llKSBWQUxVRVMgKDpjb29raWVJZHZh
bHVlLCA6Y29va2lldmFsdWUpIikpOwotICAgIFFWYXJpYW50TGlzdCBjb29raWVzSWRzOwotICAg
IFFWYXJpYW50TGlzdCBjb29raWVzVmFsdWVzOwotICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3Jr
Q29va2llICZjb29raWUsIGNvb2tpZXNGb3JVcmwodXJsKSkgewotICAgICAgICBpZiAoY29va2ll
LmlzU2Vzc2lvbkNvb2tpZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvb2tp
ZXNJZHMuYXBwZW5kKGNvb2tpZS5kb21haW4oKS5hcHBlbmQoUUxhdGluMVN0cmluZyhjb29raWUu
bmFtZSgpKSkpOwotICAgICAgICBjb29raWVzVmFsdWVzLmFwcGVuZChjb29raWUudG9SYXdGb3Jt
KCkpOwotICAgIH0KLSAgICBzcWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0cmluZygiOmNvb2tp
ZUlkdmFsdWUiKSwgY29va2llc0lkcyk7Ci0gICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRpbjFT
dHJpbmcoIjpjb29raWV2YWx1ZSIpLCBjb29raWVzVmFsdWVzKTsKLSAgICBzcWxRdWVyeS5leGVj
QmF0Y2goKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTaGFyZWRDb29raWVKYXJRdDo6
ZW5zdXJlRGF0YWJhc2VUYWJsZSgpCi17Ci0gICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oKSkgewot
ICAgICAgICBxV2FybmluZygiQ2FuJ3Qgb3BlbiBjb29raWUgZGF0YWJhc2UiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBtX2RhdGFiYXNlLmV4ZWMoUUxhdGluMVN0cmluZygiUFJBR01B
IHN5bmNocm9ub3VzPU9GRiIpKTsKLQotICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNl
KTsKLSAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIkNSRUFURSBUQUJMRSBJRiBO
T1QgRVhJU1RTIGNvb2tpZXMgKGNvb2tpZUlkIFZBUkNIQVIgUFJJTUFSWSBLRVksIGNvb2tpZSBC
TE9CKTsiKSk7Ci0gICAgc3FsUXVlcnkuZXhlYygpOwotfQotCi12b2lkIFNoYXJlZENvb2tpZUph
clF0Ojpsb2FkQ29va2llcygpCi17Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llczsKLSAgICBR
U3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnkucHJlcGFyZShRTGF0
aW4xU3RyaW5nKCJTRUxFQ1QgY29va2llIEZST00gY29va2llcyIpKTsKLSAgICBzcWxRdWVyeS5l
eGVjKCk7Ci0gICAgd2hpbGUgKHNxbFF1ZXJ5Lm5leHQoKSkKLSAgICAgICAgY29va2llcy5hcHBl
bmQoUU5ldHdvcmtDb29raWU6OnBhcnNlQ29va2llcyhzcWxRdWVyeS52YWx1ZSgwKS50b0J5dGVB
cnJheSgpKSk7Ci0gICAgc2V0QWxsQ29va2llcyhjb29raWVzKTsKLX0KLQotI2luY2x1ZGUgIm1v
Y19Db29raWVKYXJRdC5jcHAiCi0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHJldmlzaW9uIDEzMzkx
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgIldLUHJvdGVjdGlvblNwYWNlVHlw
ZXMuaCIKICNpbmNsdWRlICJXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV0tT
aGFyZWRBUElDYXN0LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db29raWVKYXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlw
ZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25TcGFjZS5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173078</attachid>
            <date>2012-11-08 11:16:15 -0800</date>
            <delta_ts>2012-11-08 11:42:35 -0800</delta_ts>
            <desc>third attempt</desc>
            <filename>CookieJar.txt</filename>
            <type>text/plain</type>
            <size>117462</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMzOTIyKQorKysg
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzg1
Nyw2ICszODU3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVQb2xpY3kuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1l
dGFkYXRhLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmggXAor
CVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ29va2llSmFyLmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFj
Y2Vzc0NvbnRyb2wuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlLmNwcCBcCkBAIC00MjQ3LDcgKzQyNDksNiBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q29va2llc1N0cmF0ZWd5LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0N1cnNvci5jcHAgXApAQCAtNDcxNSw2ICs0NzE2LDcgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Byb3h5U2VydmVy
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZp
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5v
dGlmaWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29r
aWVKYXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3Bh
Y2VIYXNoLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNw
YWNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3Bh
Y2UuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCShyZXZp
c2lvbiAxMzM5MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX0lO
Q0xVREVfRElSRUNUT1JJRVMKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRp
bmcvYmxhY2tiZXJyeS9FZGl0b3JCbGFja0JlcnJ5LmNwcAogICAgIGVkaXRpbmcvYmxhY2tiZXJy
eS9TbWFydFJlcGxhY2VCbGFja0JlcnJ5LmNwcAorICAgIGxvYWRlci9ibGFja2JlcnJ5L0Nvb2tp
ZUphckJsYWNrQmVycnkuY3BwCiAgICAgcGFnZS9ibGFja2JlcnJ5L0FjY2Vzc2liaWxpdHlPYmpl
Y3RCbGFja0JlcnJ5LmNwcAogICAgIHBhZ2UvYmxhY2tiZXJyeS9EcmFnQ29udHJvbGxlckJsYWNr
QmVycnkuY3BwCiAgICAgcGFnZS9ibGFja2JlcnJ5L0V2ZW50SGFuZGxlckJsYWNrQmVycnkuY3Bw
CkBAIC0xNDgsNyArMTQ5LDYgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2Js
YWNrYmVycnkvQ29udGV4dE1lbnVCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVy
cnkvQ29udGV4dE1lbnVJdGVtQmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5
L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCiAgICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9DdXJzb3JC
bGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0RhdGFCbGFja0JlcnJ5
LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0ltYWdlQmxhY2tCZXJyeS5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMzOTIyKQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGxvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudC5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5jcHAgXAorICAgIGxvYWRlci9Db29raWVKYXIuY3BwIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmln
aW5BY2Nlc3NDb250cm9sLmNwcCBcCiAgICAgbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVz
dWx0Q2FjaGUuY3BwIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3Bw
IFwKQEAgLTE5NDksNiArMTk1MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5oIFwKICAgICBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaCBcCisgICAgbG9hZGVyL0Nvb2tp
ZUphci5oIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmggXAogICAgIGxv
YWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmggXAogICAgIGxvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oIFwKQEAgLTIyMzgsNiArMjI0MCw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvTUlNRVNuaWZmaW5nLmggXAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JrU3RhdGVOb3RpZmllci5oIFwKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2ll
SmFyLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmggXAogICAgIHBs
YXRmb3JtL25ldHdvcmsvUHJveHlTZXJ2ZXIuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9R
dE1JTUVUeXBlU25pZmZlci5oIFwKQEAgLTIyNTAsNiArMjI1Myw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIFwKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
cXQvTmV0d29ya1N0YXRlTm90aWZpZXJQcml2YXRlLmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsv
cXQvQ29va2llSmFyUXQuaCBcCiAgICAgcGxhdGZvcm0vUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBc
CiAgICAgcGxhdGZvcm0vUGxhdGZvcm1NZW1vcnlJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgcGxh
dGZvcm0vUGxhdGZvcm1Ub3VjaEV2ZW50LmggXApAQCAtMjI1Nyw3ICsyMjYxLDYgQEAgSEVBREVS
UyArPSBcCiAgICAgcGxhdGZvcm0vUG9wdXBNZW51LmggXAogICAgIHBsYXRmb3JtL1JlZmVycmVy
UG9saWN5LmggXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggXAotICAgIHBsYXRmb3Jt
L3F0L0Nvb2tpZUphclF0LmggXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmggXAog
ICAgIHBsYXRmb3JtL3F0L1FTdHlsZUZhY2FkZS5oIFwKICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVFTdHlsZS5oIFwKQEAgLTI4MDQsNiArMjgwNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIFwKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL0ROU1Jlc29sdmVRdWV1ZS5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
TUlNRVNuaWZmaW5nLmNwcCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5j
cHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvQ3JlZGVudGlhbFN0b3JhZ2VRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAgXAogICAgIHBsYXRm
b3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwIFwKQEAgLTI4MTcsNyArMjgyMSw2
IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcCBcCiAgICAg
cGxhdGZvcm0vcXQvQ29udGV4dE1lbnVJdGVtUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Db250
ZXh0TWVudVF0LmNwcCBcCi0gICAgcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwIFwKICAgICBw
bGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAgXApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQkocmV2aXNpb24gMTMzOTIyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50
LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgnLAorICAg
ICAgICAgICAgJ2xvYWRlci9Db29raWVKYXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Nyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0RvY3Vt
ZW50TG9hZFRpbWluZy5oJywKICAgICAgICAgICAgICdsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaCcs
CkBAIC0yNzMsNyArMjc0LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ29va2llLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL0Nvb2tpZUphci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ3Vyc29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RhdGVDb21wb25l
bnRzLmgnLApAQCAtMzEyLDYgKzMxMiw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZv
cm1Nb3VzZUV2ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9QbGF0Zm9ybUNvb2tpZUphci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oJywKQEAgLTI5NTUs
NiArMjk1Niw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5o
JywKICAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuY3BwJywKICAgICAgICAgICAg
ICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaCcsCisgICAgICAgICAgICAnbG9hZGVyL0Nvb2tpZUph
ci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3Bw
JywKICAgICAgICAgICAgICdsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgnLAogICAg
ICAgICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCcsCkBA
IC0zMDYyLDYgKzMwNjQsNyBAQAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jZi9SZXNvdXJjZUxvYWRlckNGTmV0LmNwcCcs
CiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJhd1Jlc291cmNlQ2hyb21pdW0u
Y3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vUmVzb3VyY2VMb2Fk
ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9TdWJyZXNvdXJj
ZUxvYWRlckNocm9taXVtLmNwcCcsCkBAIC01NDY2LDcgKzU0NjksNiBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21h
Yy9Db250ZXh0TWVudUl0ZW1NYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9Db250
ZXh0TWVudU1hYy5tbScsCi0gICAgICAgICAgICAncGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbScs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0N1cnNvck1hYy5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMv
RHJhZ0ltYWdlTWFjLm1tJywKQEAgLTU1ODQsNyArNTU4Niw2IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvY2hyb21pdW0vRE5TQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3
b3JrL2Nocm9taXVtL1Jlc291cmNlRXJyb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0
d29yay9jaHJvbWl1bS9SZXNvdXJjZUhhbmRsZS5jcHAnLApAQCAtNTYxMiw2ICs1NjEzLDcgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVD
dXJsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVudGljYXRp
b25NYWMubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1h
Yy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llU3RvcmFnZU1h
Yy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3Jh
Z2VNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3Ry
ZWFtTWFjLm1tJywKQEAgLTU2MjIsNiArNTYyNCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VSZXNwb25zZU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZv
cm0vbmV0d29yay9tYWMvV2ViQ29yZVVSTFJlc3BvbnNlLm1tJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9uZXR3b3JrL3F0L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9uZXR3b3JrL3F0L0NyZWRlbnRpYWxTdG9yYWdlUXQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9uZXR3b3JrL3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUHJpdmF0ZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUXQuY3BwJywK
QEAgLTU2NzIsNyArNTY3NSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvQ2xpcGJvYXJk
UXQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvQ29udGV4dE1lbnVJdGVtUXQuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9x
dC9DdXJzb3JRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAnLApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEz
MzkyMikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzQxNSw2ICsyNzQxNSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ29va2llSmFyLmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENv
b2tpZUphci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxsb2FkZXJcQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CkBAIC0yODI4NywxMCArMjgyOTUsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxDb29raWVKYXIuaCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29va2llc1N0
cmF0ZWd5LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMzI1MTgsNiArMzI1MjIsMTAgQEAKIAkJ
CQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXG5ldHdvcmtcUGxhdGZvcm1Db29raWVKYXIuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcUHJvdGVjdGlv
blNwYWNlLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMzkyMikK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzI3MSw4ICszMjcxLDYgQEAKIAkJOTM1MDBGMzIxM0ZERTNCRTAwOTlF
QzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzUwMEYzMTEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxl
ckltcERldGFpbHMuaCAqLzsgfTsKIAkJOTM1MjA3QkUwOUJENDEwQTAwRjIwMzhEIC8qIExvY2Fs
aXplZFN0cmluZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzNTIwN0JEMDlCRDQxMEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM1MjA4NDUwOUJE
NDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM1MjA4NDQwOUJENDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1t
ICovOyB9OwotCQk5MzUyMDg3NzA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MjA4NzYwOUJENDUz
NDAwRjIwMzhEIC8qIENvb2tpZUphci5tbSAqLzsgfTsKLQkJOTM1MjA4ODIwOUJENDVFOTAwRjIw
MzhEIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTM1MjA4ODEwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzNTM2NzZCMDlBRUQ4
OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MzY3NkEwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZp
ZXdNYWMubW0gKi87IH07CiAJCTkzNUM0NzYzMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzVDNDc2MjA5QUM0Q0U2MDBBNkFBQjQgLyogTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cy5oICovOyB9OwogCQk5MzVDNDc2ODA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZv
cm1LZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzVDNDc2NjA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYw
NDcsNiArNjA0NSwxMCBAQAogCQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNv
bHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTM5ODY2MTE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi87IH07CiAJCUUx
Mzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUg
LyogU3R5bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyog
Q29va2llU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1t
ICovOyB9OworCQlFMTQyNEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29raWVKYXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0Qzg5
MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyB9OworCQlFMTQyNEM5
MDE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDOEYxNjRCNDYwQjAwRjMyRDQwIC8qIENv
b2tpZUphck1hYy5tbSAqLzsgfTsKKwkJRTE0MjRDOTMxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tp
ZUphci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTQyNEM5MTE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCAqLzsgfTsKKwkJRTE0MjRD
OTQxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDOTIxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tp
ZUphci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUUxNEYxQzQ0MTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NEYxQzQyMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
LmNwcCAqLzsgfTsKIAkJRTE0RjFDNDUxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNEYxQzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRTE1QTM2RDcxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNUEzNkQ2MTEwNDU3MjAw
MEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi87IH07CkBAIC0xMDQ5Niw4ICsxMDQ5OCw2IEBACiAJ
CTkzNTAwRjMxMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOU1Njcm9sbGVySW1wRGV0YWlscy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzUyMDdCRDA5QkQ0MTBBMDBGMjAzOEQgLyogTG9j
YWxpemVkU3RyaW5ncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbGl6
ZWRTdHJpbmdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNTIwODQ0MDlCRDQz
QjkwMEYyMDM4RCAvKiBMYW5ndWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IExhbmd1YWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MzUy
MDg3NjA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2llSmFyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5MzUyMDg4MTA5QkQ0NUU5MDBGMjAzOEQgLyogQ29va2llSmFyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvb2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzUzNjc2QTA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbFZpZXdNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNUM0NzYyMDlBQzRDRTYwMEE2QUFCNCAv
KiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM1QzQ3NjYwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNDQ4LDYgKzEzNDQ4
LDEwIEBACiAJCUUxMzk4NjYyMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tpZVN0
b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llU3RvcmFnZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTNGMDFGMDEyNzBFMTkwMDBERkJBNzEg
LyogQ29va2llU3RvcmFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IENvb2tpZVN0b3JhZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUNvb2tpZUphci5oOyBwYXRoID0gbmV0
d29yay9QbGF0Zm9ybUNvb2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2llSmFyTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMTQyNEM5MTE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvb2tpZUphci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNDI0QzkyMTY0QjUyQzgwMEYzMkQ0MCAvKiBD
b29raWVKYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llSmFyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNEYxQzQyMTRCNURBQzYwMEVBOTAwOSAv
KiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTRGMUM0MzE0QjVEQUM2MDBFQTkwMDkgLyog
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxNUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTE5TTmFtZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NzEzLDYgKzE1NzE3LDcgQEAKIAkJCQk1MTRDNzY0
NDBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMuaCAqLywKIAkJCQk1MTRDNzY0
NTBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMubW0gKi8sCiAJCQkJMUE3RkE2
NDcwRERBM0NCQTAwMjhGOEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVyTWFjLmNwcCAqLywKKwkJ
CQlFMTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovLAogCQkJCTUx
NEM3NjQ2MENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZUVycm9yTWFjLm1tICovLAogCQkJCTUx
NEM3NjQ3MENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZU1hYy5tbSAqLywKIAkJCQk1
MTRDNzY0OTBDRTkyMzRFMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0TWFjLm1tICovLApAQCAt
MTU3MzUsNyArMTU3NDAsNiBAQAogCQkJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlw
Ym9hcmRNYWMubW0gKi8sCiAJCQkJMDYwMjdDQjIwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRleHRN
ZW51SXRlbU1hYy5tbSAqLywKIAkJCQk5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4
dE1lbnVNYWMubW0gKi8sCi0JCQkJOTM1MjA4NzYwOUJENDUzNDAwRjIwMzhEIC8qIENvb2tpZUph
ci5tbSAqLywKIAkJCQlGNTg3ODRGMDAyREUzNzU5MDFFQTQxMjIgLyogQ3Vyc29yTWFjLm1tICov
LAogCQkJCTVEOEM0REJEMTQyODIyMkMwMDI2Q0U3MiAvKiBEaXNwbGF5U2xlZXBEaXNhYmxlci5j
cHAgKi8sCiAJCQkJNUQ4QzREQkUxNDI4MjIyQzAwMjZDRTcyIC8qIERpc3BsYXlTbGVlcERpc2Fi
bGVyLmggKi8sCkBAIC0yMDY5Niw2ICsyMDcwMCw4IEBACiAJCQkJRTFDNDE2MTYwRjY1NjMxODAw
OTJEMkZCIC8qIENyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgKi8sCiAJCQkJNEZDODUzNDkx
NjQ0MjcxQjAwRDFDMjc1IC8qIENhY2hlZE1ldGFkYXRhLmNwcCAqLywKIAkJCQk0RkM4NTM0QTE2
NDQyNzFCMDBEMUMyNzUgLyogQ2FjaGVkTWV0YWRhdGEuaCAqLywKKwkJCQlFMTQyNEM5MTE2NEI1
MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCAqLywKKwkJCQlFMTQyNEM5MjE2NEI1MkM4MDBG
MzJENDAgLyogQ29va2llSmFyLmggKi8sCiAJCQkJRTFDNDE2MTEwRjY1NjJGRDAwOTJEMkZCIC8q
IENyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oICovLAogCQkJCUUxQzQxNUREMEY2NTVEN0MwMDky
RDJGQiAvKiBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCAqLywKIAkJCQlFMUM0
MTVEOTBGNjU1RDZGMDA5MkQyRkIgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5o
ICovLApAQCAtMjA4NjAsNyArMjA4NjYsNiBAQAogCQkJCTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3
QSAvKiBDb250ZXh0TWVudS5oICovLAogCQkJCTA2MDI3Q0FDMEIxQ0JGQzAwMDg4NEIyRCAvKiBD
b250ZXh0TWVudUl0ZW0uaCAqLywKIAkJCQlEOEI2MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29v
a2llLmggKi8sCi0JCQkJOTM1MjA4ODEwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oICov
LAogCQkJCTMzOUI1QjYyMTMxREFBMzIwMEY0OEQwMiAvKiBDb29raWVzU3RyYXRlZ3kuaCAqLywK
IAkJCQkyRTQzNDY1NjBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICov
LAogCQkJCTJFNDM0NjU3MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oICov
LApAQCAtMjA5MjMsNiArMjA5MjgsNyBAQAogCQkJCTk4RUIxRjk0MTMxM0ZFMDUwMEQwRTFFQSAv
KiBOb3RJbXBsZW1lbnRlZC5oICovLAogCQkJCTRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQ
YXN0ZWJvYXJkLmggKi8sCiAJCQkJQzVGNzY1QjQxNEUxRDQxNDAwNkM4OTlCIC8qIFBhc3RlYm9h
cmRTdHJhdGVneS5oICovLAorCQkJCUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9y
bUNvb2tpZUphci5oICovLAogCQkJCUJDNUM3NjI4MTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9y
bUV2ZW50LmNwcCAqLywKIAkJCQlCQzVDNzYyOTE0OTdGRTE0MDBCQzQ3NzUgLyogUGxhdGZvcm1F
dmVudC5oICovLAogCQkJCUE3MjNGNzdBMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9y
dE1hY3Jvcy5oICovLApAQCAtMjI2MjcsNyArMjI2MzMsNiBAQAogCQkJCTdBREU3MjI2MTBDQkJC
OUIwMDZCM0IzQSAvKiBDb250ZXh0TWVudVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RDMxNjAyOTEyQjAyNjc2MDBDMUEzNTkgLyogQ29udm9sdmVyTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRDhCNjE1MkYxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJOTM1MjA4ODIwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzM5QjVCNjMxMzFEQUEzMjAwRjQ4RDAyIC8qIENvb2tpZXNTdHJhdGVneS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzNEMDIxMkQxMzFEQjM3QjAwNDA5MUE4IC8qIENvb2tpZVN0b3Jh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFRTY4NDY0MTJEMjZFMzgwMEU3OTQxNSAvKiBDb29r
aWVTdG9yYWdlQ0ZOZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2ODcsNiArMjU2OTIsOCBAQAog
CQkJCTNGRkZGOUE5MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzQzM4QkZGMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDMzhDMDMxNjQ0NzNERDAwMDkx
RUIyIC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxNDI0
QzhBMTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTE0MjRDOTQxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxMURDQjExNjRDMzlBODAwRDQ5QkMxIC8qIFdpZHRoQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwpAQCAtMjYyMDYsNyArMjYyMTMsNiBAQAogCQkJCTA2MDI3Q0IzMEIxQ0MwM0QwMDg4NEIyRCAv
KiBDb250ZXh0TWVudUl0ZW1NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0I2QTBFQTBCMEJD
QTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGRDMx
NjAyODEyQjAyNjc2MDBDMUEzNTkgLyogQ29udm9sdmVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk5MzUyMDg3NzA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0VFNjg0NjIxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZUphckNGTmV0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdFRTY4NDYzMTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9y
YWdlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEzRjAxRjExMjcwRTE5MDAwREZCQTcx
IC8qIENvb2tpZVN0b3JhZ2VNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTI4Nzc0LDYgKzI4Nzgw
LDggQEAKIAkJCQk5M0MzOEJGRTE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhl
ZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNDMzhDMDQxNjQ0NzNERDAwMDkxRUIyIC8q
IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk0RkM4NTM0QzE2
NDQyNzIzMDBEMUMyNzUgLyogQ2FjaGVkTWV0YWRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RTE0MjRDOTAxNjRCNDYwQjAwRjMyRDQwIC8qIENvb2tpZUphck1hYy5tbSBpbiBTb3VyY2VzICov
LAorCQkJCUUxNDI0QzkzMTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNvb2tpZUphci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCisKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNlcnJvciBDaHJvbWl1bSBhbmQgQmxhY2tiZXJy
eSBjdXJyZW50bHkgdXNlIGEgZm9yayBvZiB0aGlzIGZpbGUgYmVjYXVzZSBvZiBsYXllcmluZyB2
aW9sYXRpb25zCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgTmV0d29y
a2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkK
K3sKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZSogZnJh
bWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOworICAgIGlmICgh
bG9hZGVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5n
Q29udGV4dCgpOworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gY29va2llc0ZvckRPTShuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmwp
OworfQorCit2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQoreworICAgIHNldENvb2tpZXNGcm9tRE9N
KG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29r
aWVzKCksIHVybCwgY29va2llU3RyaW5nKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGNvb2tpZXNFbmFibGVkKG5ldHdv
cmtpbmdDb250ZXh0KGRvY3VtZW50KSk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK3sK
KyAgICByZXR1cm4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUobmV0d29ya2luZ0NvbnRl
eHQoZG9jdW1lbnQpLCB1cmwpOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBjb29raWVzKQor
eworICAgIHJldHVybiBnZXRSYXdDb29raWVzKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwg
dXJsLCBjb29raWVzKTsKK30KKwordm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3sKKyAg
ICBkZWxldGVDb29raWUobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZU5h
bWUpOworfQorCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYg
aG9zdG5hbWVzKQoreworICAgIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKDAsIGhvc3RuYW1lcyk7
Cit9CisKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5h
bWUpCit7CisgICAgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKDAsIGhvc3RuYW1lKTsKK30KKwor
dm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICBkZWxldGVBbGxDb29raWVzKDApOworfQor
Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFy
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Db29raWVKYXIuaAkocmV2aXNpb24gMTMzNzA1KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaDoxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ29va2llSmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29raWVKYXJfaAorI2RlZmluZSBDb29raWVKYXJfaAor
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEtVUkw7CitzdHJ1
Y3QgQ29va2llOworCisvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBkb2N1bWVudC5j
b29raWUgQVBJLCB3aXRoIHNwZWNpYWwgcnVsZXMgZm9yIEh0dHBPbmx5IGNvb2tpZXMuCitTdHJp
bmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKK3ZvaWQgc2V0Q29va2ll
cyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKworLy8gVGhlc2UgbWV0
aG9kcyB1c2UgY3VycmVudCBjb29raWUgc3RvcmFnZSwgdGh1cyB0YWtpbmcgcHJpdmF0ZSBicm93
c2luZyBtb2RlIGludG8gYWNjb3VudC4KK2Jvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1l
bnQqKTsKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmKTsKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwordm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisKKy8vIFRoZXNlIGZ1bmN0aW9u
cyBhbHdheXMgYWNjZXNzIGRlZmF1bHQgY29va2llIHN0b3JhZ2UsIG5vdCB0YWtpbmcgcHJpdmF0
ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4KK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwordm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7Cit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsK
KworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmgJKHJldmlzaW9u
IDEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA2LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksMTMgKzM5LDEzIEBAIHN0cnVjdCBDb29r
aWU7CiAKIC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgaW1wbGVtZW50IGRvY3VtZW50LmNvb2tpZSBB
UEksIHdpdGggc3BlY2lhbCBydWxlcyBmb3IgSHR0cE9ubHkgY29va2llcy4KIFN0cmluZyBjb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotdm9pZCBzZXRDb29raWVzKERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwordm9pZCBzZXRDb29raWVzKERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKTsKIAogLy8gVGhl
c2UgbWV0aG9kcyB1c2UgY3VycmVudCBjb29raWUgc3RvcmFnZSwgdGh1cyB0YWtpbmcgcHJpdmF0
ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4KIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3Qg
RG9jdW1lbnQqKTsKIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmKTsKIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotdm9pZCBkZWxldGVDb29raWUoY29u
c3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Cit2b2lkIGRlbGV0ZUNv
b2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5h
bWUpOwogCiAvLyBUaGVzZSBmdW5jdGlvbnMgYWx3YXlzIGFjY2VzcyBkZWZhdWx0IGNvb2tpZSBz
dG9yYWdlLCBub3QgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQuCiB2
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVy
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9ibGFja2JlcnJ5L0Nv
b2tpZUphckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMzM3MDUpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHA6MTMzNzA1KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3Jj
aCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC0yMDExLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIK
KworI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnRCbGFja0JlcnJ5LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cExvYWRE
ZWZlcnJlci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmluZyBjb29raWVzKERvY3VtZW50
IGNvbnN0KiBkb2N1bWVudCwgS1VSTCBjb25zdCYgdXJsKQoreworICAgIEZyYW1lKiBmcmFtZSA9
IGRvY3VtZW50LT5mcmFtZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdl
KCkgOiAwOworCisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICBpZiAoIShmcmFtZSAmJiBmcmFtZS0+bG9hZGVyKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmICghc3RhdGljX2Nhc3Q8
RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSkt
PmNvb2tpZXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIEFTU0VS
VChkb2N1bWVudCAmJiB1cmwgPT0gZG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKKyAgICAvLyAnSHR0
cE9ubHknIGNvb2tpZXMgc2hvdWxkIG5vIGJlIGFjY2Vzc2libGUgZnJvbSBzY3JpcHRzLCBzbyB3
ZSBmaWx0ZXIgdGhlbSBvdXQgaGVyZQorICAgIHJldHVybiBjb29raWVNYW5hZ2VyKCkuZ2V0Q29v
a2llKHVybCwgTm9IdHRwT25seUNvb2tpZSk7Cit9CisKK3ZvaWQgc2V0Q29va2llcyhEb2N1bWVu
dCogZG9jdW1lbnQsIEtVUkwgY29uc3QmIHVybCwgU3RyaW5nIGNvbnN0JiB2YWx1ZSkKK3sKKyAg
ICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBQYWdlKiBwYWdlID0gZnJh
bWUgPyBmcmFtZS0+cGFnZSgpIDogMDsKKworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCEoZnJhbWUgJiYgZnJhbWUtPmxvYWRlcigpICYmIGZyYW1lLT5sb2FkZXIo
KS0+Y2xpZW50KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXN0YXRpY19jYXN0PEZy
YW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5j
b29raWVzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoZG9jdW1lbnQg
JiYgdXJsID09IGRvY3VtZW50LT5jb29raWVVUkwoKSk7CisgICAgY29va2llTWFuYWdlcigpLnNl
dENvb2tpZXModXJsLCB2YWx1ZSwgTm9IdHRwT25seUNvb2tpZSk7Cit9CisKK2Jvb2wgY29va2ll
c0VuYWJsZWQoRG9jdW1lbnQgY29uc3QqKQoreworICAgIC8vIEZJWE1FLiBDdXJyZW50bHkgY29v
a2llIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgbm8gc2V0dGluZyBvbiBwcm9wZXJ0eSBwYWdlLgor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQor
eworICAgIFZlY3RvcjxQYXJzZWRDb29raWUqPiByZXN1bHQ7CisgICAgY29va2llTWFuYWdlcigp
LmdldFJhd0Nvb2tpZXMocmVzdWx0LCB1cmwsIFdpdGhIdHRwT25seUNvb2tpZXMpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgaSsrKQorICAgICAgICByZXN1bHRb
aV0tPmFwcGVuZFdlYkNvcmVDb29raWUocmF3Q29va2llcyk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgLy8gQ29va2llcyBhcmUg
bm90IGJvdW5kIHRvIHRoZSBkb2N1bWVudC4gVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIHRvIHBh
c3MKKyAgICAvLyBpbiB0aGUgZG9jdW1lbnQgb2JqZWN0IHRvIGZpbmQgdGhlIHRhcmdldGVkIGNv
b2tpZXMgaW4gY29va2llIG1hbmFnZXIuCisgICAgY29va2llTWFuYWdlcigpLnJlbW92ZUNvb2tp
ZVdpdGhOYW1lKHVybCwgY29va2llTmFtZSk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkK
K3sKKyAgICBBU1NFUlQoZG9jdW1lbnQpOworCisgICAgaWYgKCEoZG9jdW1lbnQtPmZyYW1lKCkg
JiYgZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpICYmIGRvY3VtZW50LT5mcmFtZSgpLT5sb2Fk
ZXIoKS0+Y2xpZW50KCkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAoIXN0
YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KGRvY3VtZW50LT5mcmFtZSgp
LT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5jb29raWVzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICByZXR1cm4gY29va2llTWFuYWdlcigpLmdldENvb2tpZSh1cmwsIFdp
dGhIdHRwT25seUNvb2tpZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJC
bGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9ibGFj
a2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICsz
NSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFVuZm9yay4gVGhpcyBm
aWxlIGlzIGZvcmtlZCBiZWNhdXNlIGFsbCBvdGhlciBwbGF0Zm9ybXMgdXNlIE5ldHdvcmtpbmdD
b250ZXh0IHRvIGFjY2VzcyBjb29raWUgamFyLCBub3QgRG9jdW1lbnQgb3IgRnJhbWUuCisKIFN0
cmluZyBjb29raWVzKERvY3VtZW50IGNvbnN0KiBkb2N1bWVudCwgS1VSTCBjb25zdCYgdXJsKQog
ewogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiAxMzM3MDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hy
b21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwOjEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29va2llSmFyLmgi
CisKKyNpbmNsdWRlICJDb29raWUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgc2V0Q29v
a2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoZG9jdW1lbnQsIHVybCwg
dmFsdWUpOworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGRv
Y3VtZW50LCB1cmwpOworfQorCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJu
IFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQs
IHVybCk7Cit9CisKK2Jvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
KQoreworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50
KTsKK30KKworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOwor
fQorCit2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQoreworICAgIHJldHVybiBQbGF0Zm9y
bVN1cHBvcnQ6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29raWVOYW1lKTsKK30KKwor
dm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykK
K3sKKyAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorfQorCit2b2lkIGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQoreworICAgIC8vIEZJWE1F
OiBOb3QgeWV0IGltcGxlbWVudGVkCit9CisKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygpCit7Cisg
ICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9t
aXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29v
a2llSmFyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFVuZm9yay4g
VGhpcyBmaWxlIGlzIGZvcmtlZCBiZWNhdXNlIGFsbCBvdGhlciBwbGF0Zm9ybXMgdXNlIE5ldHdv
cmtpbmdDb250ZXh0IHRvIGFjY2VzcyBjb29raWUgamFyLCBub3QgRG9jdW1lbnQgb3IgRnJhbWUu
CisKIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMo
ZG9jdW1lbnQsIHVybCwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29v
a2llSmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFy
LmgJKHJldmlzaW9uIDEzMzkyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUph
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgQ29va2llSmFyX2gKLSNkZWZpbmUgQ29va2llSmFyX2gKLQotI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBLVVJMOwotc3RydWN0IENvb2tpZTsKLQot
Ly8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgZG9jdW1lbnQuY29va2llIEFQSSwgd2l0
aCBzcGVjaWFsIHJ1bGVzIGZvciBIdHRwT25seSBjb29raWVzLgotU3RyaW5nIGNvb2tpZXMoY29u
c3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgdXNlIGN1cnJl
bnQgY29va2llIHN0b3JhZ2UsIHRodXMgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRv
IGFjY291bnQuCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci1TdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
Jik7Ci1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVj
dG9yPENvb2tpZT4mKTsKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYpOwotCi0vLyBUaGVzZSBmdW5jdGlvbnMgYWx3YXlzIGFjY2Vz
cyBkZWZhdWx0IGNvb2tpZSBzdG9yYWdlLCBub3QgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9k
ZSBpbnRvIGFjY291bnQuCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKTsKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0
cmluZyYgaG9zdG5hbWUpOwotdm9pZCBkZWxldGVBbGxDb29raWVzKCk7Ci0KLX0KLQotI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNr
QmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVy
cnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEzMzkyMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KLSAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC0yMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKLQotI2luY2x1
ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRC
bGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cExvYWREZWZlcnJlci5o
IgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmluZyBjb29raWVzKERvY3VtZW50IGNvbnN0KiBk
b2N1bWVudCwgS1VSTCBjb25zdCYgdXJsKQotewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOwot
Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoIShm
cmFtZSAmJiBmcmFtZS0+bG9hZGVyKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSkpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmICghc3RhdGljX2Nhc3Q8RnJhbWVMb2Fk
ZXJDbGllbnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPmNvb2tpZXNF
bmFibGVkKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIEFTU0VSVChkb2N1bWVu
dCAmJiB1cmwgPT0gZG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKLSAgICAvLyAnSHR0cE9ubHknIGNv
b2tpZXMgc2hvdWxkIG5vIGJlIGFjY2Vzc2libGUgZnJvbSBzY3JpcHRzLCBzbyB3ZSBmaWx0ZXIg
dGhlbSBvdXQgaGVyZQotICAgIHJldHVybiBjb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llKHVybCwg
Tm9IdHRwT25seUNvb2tpZSk7Ci19Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1l
bnQsIEtVUkwgY29uc3QmIHVybCwgU3RyaW5nIGNvbnN0JiB2YWx1ZSkKLXsKLSAgICBGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWUgPyBmcmFt
ZS0+cGFnZSgpIDogMDsKLQotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCEoZnJhbWUgJiYgZnJhbWUtPmxvYWRlcigpICYmIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXN0YXRpY19jYXN0PEZyYW1lTG9hZGVy
Q2xpZW50QmxhY2tCZXJyeSo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5jb29raWVzRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZG9jdW1lbnQgJiYgdXJsID09
IGRvY3VtZW50LT5jb29raWVVUkwoKSk7Ci0gICAgY29va2llTWFuYWdlcigpLnNldENvb2tpZXMo
dXJsLCB2YWx1ZSwgTm9IdHRwT25seUNvb2tpZSk7Ci19Ci0KLWJvb2wgY29va2llc0VuYWJsZWQo
RG9jdW1lbnQgY29uc3QqKQotewotICAgIC8vIEZJWE1FLiBDdXJyZW50bHkgY29va2llIGlzIGVu
YWJsZWQgYnkgZGVmYXVsdCwgbm8gc2V0dGluZyBvbiBwcm9wZXJ0eSBwYWdlLgotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIFZl
Y3RvcjxQYXJzZWRDb29raWUqPiByZXN1bHQ7Ci0gICAgY29va2llTWFuYWdlcigpLmdldFJhd0Nv
b2tpZXMocmVzdWx0LCB1cmwsIFdpdGhIdHRwT25seUNvb2tpZXMpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgaSsrKQotICAgICAgICByZXN1bHRbaV0tPmFwcGVu
ZFdlYkNvcmVDb29raWUocmF3Q29va2llcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgLy8gQ29va2llcyBhcmUgbm90IGJvdW5k
IHRvIHRoZSBkb2N1bWVudC4gVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIHRvIHBhc3MKLSAgICAv
LyBpbiB0aGUgZG9jdW1lbnQgb2JqZWN0IHRvIGZpbmQgdGhlIHRhcmdldGVkIGNvb2tpZXMgaW4g
Y29va2llIG1hbmFnZXIuCi0gICAgY29va2llTWFuYWdlcigpLnJlbW92ZUNvb2tpZVdpdGhOYW1l
KHVybCwgY29va2llTmFtZSk7Ci19Ci0KLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkKLXsKLSAgICBB
U1NFUlQoZG9jdW1lbnQpOwotCi0gICAgaWYgKCEoZG9jdW1lbnQtPmZyYW1lKCkgJiYgZG9jdW1l
bnQtPmZyYW1lKCktPmxvYWRlcigpICYmIGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xp
ZW50KCkpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoIXN0YXRpY19jYXN0
PEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIo
KS0+Y2xpZW50KCkpLT5jb29raWVzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0KLSAgICByZXR1cm4gY29va2llTWFuYWdlcigpLmdldENvb2tpZSh1cmwsIFdpdGhIdHRwT25s
eUNvb2tpZXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0JKHJldmlzaW9uIDEzMzkyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
MTk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDgsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiQ29va2llSmFyLmgiCi0KLSNpZiAhVVNFKENGTkVUV09SSykKLQotI2ltcG9y
dCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0ICJDb29raWUuaCIKLSNpbXBvcnQgIkNvb2tp
ZVN0b3JhZ2UuaCIKLSNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2ltcG9ydCAiRG9j
dW1lbnQuaCIKLSNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1zdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoTlNB
cnJheSAqdW5maWx0ZXJlZENvb2tpZXMpCi17Ci0gICAgTlNVSW50ZWdlciBjb3VudCA9IFt1bmZp
bHRlcmVkQ29va2llcyBjb3VudF07Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBmaWx0
ZXJlZENvb2tpZXMoQWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBh
Y2l0eTpjb3VudF0pOwotCi0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbdW5m
aWx0ZXJlZENvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKLQotICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3RvcmFnZSB3b3VsZCBzdG9yZSBh
biBlbXB0eSBjb29raWUsCi0gICAgICAgIC8vIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tp
ZTogPSIuIFdlIGhhdmUgYSB3b3JrYXJvdW5kIGluIHNldENvb2tpZXMoKSB0byBwcmV2ZW50Ci0g
ICAgICAgIC8vIHRoYXQsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gYXZvaWQgc2VuZGluZyBjb29raWVz
IHRoYXQgd2VyZSBwcmV2aW91c2x5IHN0b3JlZCwgYW5kCi0gICAgICAgIC8vIHRoZXJlJ3Mgbm8g
aGFybSB0byBkb2luZyB0aGlzIGNoZWNrIGJlY2F1c2Ugc3VjaCBhIGNvb2tpZSBpcyBuZXZlciB2
YWxpZC4KLSAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5ndGhdKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgaWYgKFtjb29raWUgaXNIVFRQT25seV0pCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBbZmlsdGVyZWRDb29raWVzLmdldCgpIGFkZE9iamVjdDpj
b29raWVdOwotICAgIH0KLQotICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7Ci19Ci0KLVN0cmlu
ZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQotewotICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBD
b29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7Ci0g
ICAgcmV0dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpm
aWx0ZXJDb29raWVzKGNvb2tpZXMpLmdldCgpXSBvYmplY3RGb3JLZXk6QCJDb29raWUiXTsKLQot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQot
Ci1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiB1cmwpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0g
ICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsKLSAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVx
dWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVzOmNvb2tpZXNdIG9iamVjdEZvcktleTpAIkNvb2tp
ZSJdOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gU3RyaW5n
KCk7Ci19Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IE9uIDEwLjUsIE5T
SFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29va2llLAotICAgIC8vIHdo
aWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCi0gICAgaWYgKGNvb2tpZVN0ci5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgotICAgIC8vIGNvb2tpZXNX
aXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVzIHdpdGhvdXQgYSB2
YWx1ZQotICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVTdHIuY29udGFpbnMoJz0nKSA/
IGNvb2tpZVN0ciA6IGNvb2tpZVN0ciArICI9IjsKLQotICAgIE5TVVJMICpjb29raWVVUkwgPSB1
cmw7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGZpbHRlckNvb2tp
ZXMoW05TSFRUUENvb2tpZSBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOltOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6Y29va2llU3RyaW5nIGZvcktleTpAIlNldC1Db29r
aWUiXSBmb3JVUkw6Y29va2llVVJMXSk7Ci0gICAgQVNTRVJUKFtmaWx0ZXJlZENvb2tpZXMuZ2V0
KCkgY291bnRdIDw9IDEpOwotCi0gICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVS
TCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotCi0gICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLX0KLQotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCop
Ci17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNIVFRQQ29va2ll
QWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IHN0YXRpY19jYXN0PE5TSFRUUENvb2tp
ZUFjY2VwdFBvbGljeT4od2tHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGN1cnJlbnRDRkhUVFBD
b29raWVTdG9yYWdlKCkuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29va2llQWNjZXB0UG9saWN5ID09
IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyB8fCBjb29raWVBY2NlcHRQb2xpY3kgPT0g
TlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47Ci0KLSAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykKLXsKLSAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRU
UENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsK
LSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOwotICAgIHJhd0Nvb2tpZXMu
cmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tp
ZSAqKVtjb29raWVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIE5TVGltZUludGVydmFsIGV4
cGlyZXMgPSBbW2Nvb2tpZSBleHBpcmVzRGF0ZV0gdGltZUludGVydmFsU2luY2UxOTcwXSAqIDEw
MDA7Ci0gICAgICAgIHJhd0Nvb2tpZXMudW5jaGVja2VkQXBwZW5kKENvb2tpZShbY29va2llIG5h
bWVdLCBbY29va2llIHZhbHVlXSwgW2Nvb2tpZSBkb21haW5dLCBbY29va2llIHBhdGhdLCBleHBp
cmVzLAotICAgICAgICAgICAgW2Nvb2tpZSBpc0hUVFBPbmx5XSwgW2Nvb2tpZSBpc1NlY3VyZV0s
IFtjb29raWUgaXNTZXNzaW9uT25seV0pKTsKLSAgICB9Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQot
ewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TVVJMICpjb29raWVV
UkwgPSB1cmw7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0
b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIE5TQXJyYXkgKmNvb2tp
ZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZVVSTCk7
Ci0KLSAgICBOU1N0cmluZyAqY29va2llTmFtZVN0cmluZyA9IGNvb2tpZU5hbWU7Ci0KLSAgICBO
U1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOwotICAgIGZvciAoTlNVSW50ZWdlciBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAo
TlNIVFRQQ29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgaWYgKFtb
Y29va2llIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpjb29raWVOYW1lU3RyaW5nXSkKLSAgICAgICAg
ICAgIHdrRGVsZXRlSFRUUENvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWUpOwotICAg
IH0KLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXZvaWQgZ2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCi17Ci0gICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENv
b2tpZXMoZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Ci0gICAgCi0gICAgZm9y
IChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKQotICAgICAgICBob3N0bmFtZXMuYWRk
KFtjb29raWUgZG9tYWluXSk7Ci0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LX0KLQotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGRlZmF1bHRDRkhUVFBDb29r
aWVTdG9yYWdlKCk7Ci0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMoY29va2ll
U3RvcmFnZS5nZXQoKSk7Ci0gICAgaWYgKCFjb29raWVzKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKSB7Ci0gICAgICAgIGlm
IChob3N0bmFtZSA9PSBTdHJpbmcoW2Nvb2tpZSBkb21haW5dKSkKLSAgICAgICAgICAgIHdrRGVs
ZXRlSFRUUENvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWUpOwotICAgIH0KLSAgICAK
LSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi12b2lkIGRlbGV0ZUFsbENvb2tp
ZXMoKQotewotICAgIHdrRGVsZXRlQWxsSFRUUENvb2tpZXMoZGVmYXVsdENGSFRUUENvb2tpZVN0
b3JhZ2UoKS5nZXQoKSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vICFVU0UoQ0ZORVRXT1JLKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29r
aWVKYXIuaAkocmV2aXNpb24gMTMzNzA1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
b29raWVKYXIuaDoxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Bs
YXRmb3JtQ29va2llSmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29raWVKYXJfaAorI2RlZmluZSBDb29raWVKYXJfaAor
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEtVUkw7CitzdHJ1
Y3QgQ29va2llOworCisvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBkb2N1bWVudC5j
b29raWUgQVBJLCB3aXRoIHNwZWNpYWwgcnVsZXMgZm9yIEh0dHBPbmx5IGNvb2tpZXMuCitTdHJp
bmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKK3ZvaWQgc2V0Q29va2ll
cyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKworLy8gVGhlc2UgbWV0
aG9kcyB1c2UgY3VycmVudCBjb29raWUgc3RvcmFnZSwgdGh1cyB0YWtpbmcgcHJpdmF0ZSBicm93
c2luZyBtb2RlIGludG8gYWNjb3VudC4KK2Jvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1l
bnQqKTsKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmKTsKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwordm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisKKy8vIFRoZXNlIGZ1bmN0aW9u
cyBhbHdheXMgYWNjZXNzIGRlZmF1bHQgY29va2llIHN0b3JhZ2UsIG5vdCB0YWtpbmcgcHJpdmF0
ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4KK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwordm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7Cit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsK
KworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxh
dGZvcm1Db29raWVKYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1BsYXRmb3JtQ29va2llSmFyLmgJKHJldmlzaW9uIDEzMzcwNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIENvb2tp
ZUphcl9oCi0jZGVmaW5lIENvb2tpZUphcl9oCisjaWZuZGVmIFBsYXRmb3JtQ29va2llSmFyX2gK
KyNkZWZpbmUgUGxhdGZvcm1Db29raWVKYXJfaAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMzMsMjQgKzMzLDIwIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBLVVJMOworY2xhc3MgTmV0d29y
a2luZ0NvbnRleHQ7CiBzdHJ1Y3QgQ29va2llOwogCi0vLyBUaGVzZSB0d28gZnVuY3Rpb25zIGlt
cGxlbWVudCBkb2N1bWVudC5jb29raWUgQVBJLCB3aXRoIHNwZWNpYWwgcnVsZXMgZm9yIEh0dHBP
bmx5IGNvb2tpZXMuCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
KTsKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
KTsKLQotLy8gVGhlc2UgbWV0aG9kcyB1c2UgY3VycmVudCBjb29raWUgc3RvcmFnZSwgdGh1cyB0
YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4KLWJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLWJvb2wgZ2V0UmF3Q29va2llcyhj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotdm9pZCBkZWxl
dGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0K
LS8vIFRoZXNlIGZ1bmN0aW9ucyBhbHdheXMgYWNjZXNzIGRlZmF1bHQgY29va2llIHN0b3JhZ2Us
IG5vdCB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4KLXZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwotdm9pZCBk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7Ci12b2lkIGRl
bGV0ZUFsbENvb2tpZXMoKTsKKy8vIElmIG5ldHdvcmtpbmcgY29udGV4dCBpcyBudWxsLCBkZWZh
dWx0IGNvb2tpZSBzdG9yYWdlIGlzIHVzZWQuCitTdHJpbmcgY29va2llc0ZvckRPTShOZXR3b3Jr
aW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmKTsKK3ZvaWQg
c2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Citib29sIGNvb2tpZXNFbmFibGVkKE5l
dHdvcmtpbmdDb250ZXh0Kik7CitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJik7Citib29sIGdldFJhd0Nvb2tpZXMoTmV0
d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKK3ZvaWQgZGVs
ZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYp
Owordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCosIEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7Cit2b2lkIGRlbGV0ZUFs
bENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkocmV2
aXNpb24gMTMzOTIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29r
aWVKYXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0
LDEzICsyNCwxMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29r
aWVKYXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogCiAjaWYgVVNFKENGTkVU
V09SSykKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VDRk5l
dC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKQEAgLTk1LDE4ICs5
NCwxOCBAQCBzdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZpbHRlckNvb2tpCiAgICAgcmV0
dXJuIGZpbHRlcmVkQ29va2llczsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBzZXRDb29r
aWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIC8vIDxy
ZGFyOi8vcHJvYmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVTdG9yYWdlIHN0b3JlcyBhbiBlbXB0
eSBjb29raWUsIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCiAgICAgaWYgKHZh
bHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdl
ID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZV
UkwoKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFk
b3B0Q0YsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLmNyZWF0ZUNGVVJMKCkpOwor
ICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBm
aXJzdFBhcnR5LmNyZWF0ZUNGVVJMKCkpOwogCiAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+CiAgICAgLy8gY29va2ll
c1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBh
IHZhbHVlCkBAIC0xMjMsOSArMTIyLDkgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1
bWVudCwgY29ucwogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3Jh
Z2UuZ2V0KCksIGZpbHRlckNvb2tpZXMoY29va2llc0NGLmdldCgpKS5nZXQoKSwgdXJsQ0YuZ2V0
KCksIGZpcnN0UGFydHlGb3JDb29raWVzQ0YuZ2V0KCkpOwogfQogCi1TdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29v
a2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYsIGNvbnN0
IEtVUkwmIHVybCkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAg
ICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTEz
Nyw5ICsxMzYsOSBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVuCiAg
ICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQo
KSwgc19jb29raWVDRik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdl
KCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
QEAgLTE1MSwxOCArMTUwLDE5IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb24KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRl
ckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBjb29raWVzRW5hYmxlZChOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBv
bGljeSA9IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVu
dERvbWFpbjsKLSAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tp
ZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQorICAgIFJldGFpblB0cjxD
RkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRD
RkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAg
IGlmIChjb29raWVTdG9yYWdlKQogICAgICAgICBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdl
R2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwogICAgIHJldHVybiBw
b2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3Vt
ZW50RG9tYWluIHx8IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3
YXlzOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRSYXdDb29raWVzKE5l
dHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tp
ZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1
bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTE5Myw5ICsxOTMsOSBAQCBib29sIGdldFJhd0Nvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5h
bWUpCit2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdl
ID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0yMTQsOSArMjE0LDkgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdAogICAgIH0KIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAg
IFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVs
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3Jh
Z2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjMyLDkgKzIzMiw5IEBAIHZvaWQgZ2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3Rv
cmFnZSA9IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYg
KCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTI1MSw5ICsyNTEsOSBAQCB2
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpCiAgICAgfQogfQogCi12b2lk
IGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0KQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
b29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsK
ICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9D
b29raWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzMzkyMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkNvb2tpZUphci5oIgotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGRv
Y3VtZW50LCB1cmwsIHZhbHVlKTsKLX0KLQotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9y
dDo6Y29va2llcyhkb2N1bWVudCwgdXJsKTsKLX0KLQotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQot
ewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGRvY3VtZW50LCB1cmwpOwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5h
YmxlZChkb2N1bWVudCk7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17
Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhkb2N1bWVudCwgdXJsLCBy
YXdDb29raWVzKTsKLX0KLQotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBy
ZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUoZG9jdW1lbnQsIHVybCwgY29va2ll
TmFtZSk7Ci19Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+
JiBob3N0bmFtZXMpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLX0KLQot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKLXsK
LSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAotfQotCi12b2lkIGRlbGV0ZUFsbENv
b2tpZXMoKQotewotICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCi19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9Db29raWVKYXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAJKHJldmlzaW9uIDEzMzkyMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTUsMTAgKzE1LDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIu
aCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgpAQCAtMjgsNTAgKzI3LDUwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUphcjsKIAotdm9pZCBzZXRDb29r
aWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3ZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqLCBjb25z
dCBLVVJMJiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIGNv
b2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29r
aWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHVy
bCkKIHsKICAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCi1TdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1l
bnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIC8vIEZJWE1F
OiBpbmNsdWRlIEh0dHBPbmx5IGNvb2tpZS4KICAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwu
c3RyaW5nKCkpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRv
Y3VtZW50Ki8pCitib29sIGNvb2tpZXNFbmFibGVkKE5ldHdvcmtpbmdDb250ZXh0KikKIHsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRSYXdDb29r
aWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdD
b29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAgcmF3Q29v
a2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBs
ZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBkZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5n
Q29udGV4dCosIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIC8vIEZJWE1FOiBO
b3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQg
ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCopCiB7CiAgICAgLy8gRklYTUU6IE5v
dCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL0Nvb2tpZUphck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0JKHJldmlzaW9uIDEzMzcwNSkJKGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToxMzM3MDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYs
IDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiQ29va2llSmFyLmgiCisKKyNpZiAhVVNFKENGTkVUV09S
SykKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJDb29raWUuaCIKKyNp
bXBvcnQgIkNvb2tpZVN0b3JhZ2UuaCIKKyNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgor
I2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRl
ckNvb2tpZXMoTlNBcnJheSAqdW5maWx0ZXJlZENvb2tpZXMpCit7CisgICAgTlNVSW50ZWdlciBj
b3VudCA9IFt1bmZpbHRlcmVkQ29va2llcyBjb3VudF07CisgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PiBmaWx0ZXJlZENvb2tpZXMoQWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpjb3VudF0pOworCisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBD
b29raWUgKilbdW5maWx0ZXJlZENvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKKworICAgICAgICAv
LyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3RvcmFnZSB3
b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCisgICAgICAgIC8vIHdoaWNoIHdvdWxkIGJlIHNl
bnQgYXMgIkNvb2tpZTogPSIuIFdlIGhhdmUgYSB3b3JrYXJvdW5kIGluIHNldENvb2tpZXMoKSB0
byBwcmV2ZW50CisgICAgICAgIC8vIHRoYXQsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gYXZvaWQgc2Vu
ZGluZyBjb29raWVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHN0b3JlZCwgYW5kCisgICAgICAgIC8v
IHRoZXJlJ3Mgbm8gaGFybSB0byBkb2luZyB0aGlzIGNoZWNrIGJlY2F1c2Ugc3VjaCBhIGNvb2tp
ZSBpcyBuZXZlciB2YWxpZC4KKyAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5ndGhdKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKFtjb29raWUgaXNIVFRQT25seV0p
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBbZmlsdGVyZWRDb29raWVzLmdldCgp
IGFkZE9iamVjdDpjb29raWVdOworICAgIH0KKworICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7
Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQor
eworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TQXJyYXkgKmNvb2tp
ZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0
KCksIHVybCk7CisgICAgcmV0dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNX
aXRoQ29va2llczpmaWx0ZXJDb29raWVzKGNvb2tpZXMpLmdldCgpXSBvYmplY3RGb3JLZXk6QCJD
b29raWUiXTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TOworCisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsKKyAgICByZXR1cm4gW1tOU0hU
VFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVzOmNvb2tpZXNdIG9iamVjdEZv
cktleTpAIkNvb2tpZSJdOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCit7CisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+
IE9uIDEwLjUsIE5TSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29va2ll
LAorICAgIC8vIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCisgICAgaWYgKGNv
b2tpZVN0ci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIDxodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgorICAg
IC8vIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVz
IHdpdGhvdXQgYSB2YWx1ZQorICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVTdHIuY29u
dGFpbnMoJz0nKSA/IGNvb2tpZVN0ciA6IGNvb2tpZVN0ciArICI9IjsKKworICAgIE5TVVJMICpj
b29raWVVUkwgPSB1cmw7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9
IGZpbHRlckNvb2tpZXMoW05TSFRUUENvb2tpZSBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmll
bGRzOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6Y29va2llU3RyaW5nIGZvcktl
eTpAIlNldC1Db29raWUiXSBmb3JVUkw6Y29va2llVVJMXSk7CisgICAgQVNTRVJUKFtmaWx0ZXJl
ZENvb2tpZXMuZ2V0KCkgY291bnRdIDw9IDEpOworCisgICAgd2tTZXRIVFRQQ29va2llc0ZvclVS
TChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0
KCksIGNvb2tpZVVSTCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworCisgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25z
dCBEb2N1bWVudCopCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAg
TlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IHN0YXRpY19jYXN0
PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4od2tHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCkpKTsKKyAgICByZXR1cm4gY29va2llQWNj
ZXB0UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyB8fCBjb29raWVBY2Nl
cHRQb2xpY3kgPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnRE
b21haW47CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYg
dXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICByYXdDb29raWVzLmNsZWFy
KCk7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJheSAqY29v
a2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5n
ZXQoKSwgdXJsKTsKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOworICAg
IHJhd0Nvb2tpZXMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKKyAgICBmb3IgKE5TVUludGVnZXIg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0g
KE5TSFRUUENvb2tpZSAqKVtjb29raWVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIE5TVGlt
ZUludGVydmFsIGV4cGlyZXMgPSBbW2Nvb2tpZSBleHBpcmVzRGF0ZV0gdGltZUludGVydmFsU2lu
Y2UxOTcwXSAqIDEwMDA7CisgICAgICAgIHJhd0Nvb2tpZXMudW5jaGVja2VkQXBwZW5kKENvb2tp
ZShbY29va2llIG5hbWVdLCBbY29va2llIHZhbHVlXSwgW2Nvb2tpZSBkb21haW5dLCBbY29va2ll
IHBhdGhdLCBleHBpcmVzLAorICAgICAgICAgICAgW2Nvb2tpZSBpc0hUVFBPbmx5XSwgW2Nvb2tp
ZSBpc1NlY3VyZV0sIFtjb29raWUgaXNTZXNzaW9uT25seV0pKTsKKyAgICB9CisKKyAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGRlbGV0
ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBj
b29raWVOYW1lKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5T
VVJMICpjb29raWVVUkwgPSB1cmw7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIE5T
QXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCks
IGNvb2tpZVVSTCk7CisKKyAgICBOU1N0cmluZyAqY29va2llTmFtZVN0cmluZyA9IGNvb2tpZU5h
bWU7CisKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOworICAgIGZvciAo
TlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNIVFRQQ29va2ll
ICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKKyAg
ICAgICAgaWYgKFtbY29va2llIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpjb29raWVOYW1lU3RyaW5n
XSkKKyAgICAgICAgICAgIHdrRGVsZXRlSFRUUENvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBj
b29raWUpOworICAgIH0KKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3Zv
aWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJheSAqY29va2ll
cyA9IHdrSFRUUENvb2tpZXMoZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Cisg
ICAgCisgICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKQorICAgICAgICBo
b3N0bmFtZXMuYWRkKFtjb29raWUgZG9tYWluXSk7CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKK30KKwordm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAg
ICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGRlZmF1
bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENv
b2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7CisgICAgaWYgKCFjb29raWVzKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKSB7
CisgICAgICAgIGlmIChob3N0bmFtZSA9PSBTdHJpbmcoW2Nvb2tpZSBkb21haW5dKSkKKyAgICAg
ICAgICAgIHdrRGVsZXRlSFRUUENvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWUpOwor
ICAgIH0KKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIGRl
bGV0ZUFsbENvb2tpZXMoKQoreworICAgIHdrRGVsZXRlQWxsSFRUUENvb2tpZXMoZGVmYXVsdENG
SFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Cit9CisKK30KKworI2VuZGlmIC8vICFVU0UoQ0ZO
RVRXT1JLKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2ll
SmFyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL0Nvb2tpZUphck1hYy5tbQkocmV2aXNpb24gMTMzNzA1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw3ICsyNCw3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJDb29raWVK
YXIuaCIKKyNpbXBvcnQgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAKICNpZiAhVVNFKENGTkVUV09S
SykKIApAQCAtMzIsNyArMzIsNyBAQAogI2ltcG9ydCAiQ29va2llLmgiCiAjaW1wb3J0ICJDb29r
aWVTdG9yYWdlLmgiCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKLSNpbXBvcnQgIkRv
Y3VtZW50LmgiCisjaW1wb3J0ICJLVVJMLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYxLDI5ICs2MSwzMSBAQCBzdGF0aWMg
UmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoCiAgICAgcmV0dXJuIGZpbHRlcmVkQ29v
a2llczsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1
cmwpCitTdHJpbmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgS1VSTCYsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CiAKLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOworICAgIFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIE5T
QXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCks
IHVybCk7CiAgICAgcmV0dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRo
Q29va2llczpmaWx0ZXJDb29raWVzKGNvb2tpZXMpLmdldCgpXSBvYmplY3RGb3JLZXk6QCJDb29r
aWUiXTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBOU0FycmF5ICpjb29raWVzID0g
d2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1
cmwpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdl
ID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOworICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9y
VVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCk7CiAgICAgcmV0dXJuIFtbTlNIVFRQQ29va2ll
IHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpjb29raWVzXSBvYmplY3RGb3JLZXk6QCJD
b29raWUiXTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQordm9pZCBzZXRDb29raWVzRnJvbURP
TShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKIHsKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTEwMCwyOCArMTAyLDMxIEBAIHZvaWQgc2V0Q29va2ll
cyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVy
ZWRDb29raWVzID0gZmlsdGVyQ29va2llcyhbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9u
c2VIZWFkZXJGaWVsZHM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVT
dHJpbmcgZm9yS2V5OkAiU2V0LUNvb2tpZSJdIGZvclVSTDpjb29raWVVUkxdKTsKICAgICBBU1NF
UlQoW2ZpbHRlcmVkQ29va2llcy5nZXQoKSBjb3VudF0gPD0gMSk7CiAKLSAgICB3a1NldEhUVFBD
b29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIGZpbHRlcmVk
Q29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2Ug
PSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBD
b29raWVTdG9yYWdlKCk7CisgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdl
LmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eSk7CiAK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVk
KGNvbnN0IERvY3VtZW50KikKK2Jvb2wgY29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgTlNI
VFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IHN0YXRpY19jYXN0PE5T
SFRUUENvb2tpZUFjY2VwdFBvbGljeT4od2tHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGN1cnJl
bnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCkpKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29v
a2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0hUVFBD
b29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nhc3Q8TlNIVFRQ
Q29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY29va2llU3Rv
cmFnZS5nZXQoKSkpOwogICAgIHJldHVybiBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29v
a2llQWNjZXB0UG9saWN5QWx3YXlzIHx8IGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKIAogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQorYm9vbCBnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJh
d0Nvb2tpZXMuY2xlYXIoKTsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAg
ICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29v
a2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9y
YWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIE5TQXJyYXkgKmNvb2tp
ZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCk7CiAgICAg
TlNVSW50ZWdlciBjb3VudCA9IFtjb29raWVzIGNvdW50XTsKICAgICByYXdDb29raWVzLnJlc2Vy
dmVDYXBhY2l0eShjb3VudCk7CiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgewpAQCAtMTM1LDEyICsxNDAsMTIgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERv
Y3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1l
KQordm9pZCBkZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIAogICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7Ci0gICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
b29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBk
ZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hU
VFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZVVSTCk7CiAKICAgICBO
U1N0cmluZyAqY29va2llTmFtZVN0cmluZyA9IGNvb2tpZU5hbWU7CkBAIC0xNTUsMTEgKzE2MCwx
MiBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0CiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQog
ewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIE5TQXJyYXkgKmNvb2tp
ZXMgPSB3a0hUVFBDb29raWVzKGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCkpOwor
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29u
dGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOworICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzKGNvb2tpZVN0
b3JhZ2UuZ2V0KCkpOwogICAgIAogICAgIGZvciAoTlNIVFRQQ29va2llKiBjb29raWUgaW4gY29v
a2llcykKICAgICAgICAgaG9zdG5hbWVzLmFkZChbY29va2llIGRvbWFpbl0pOwpAQCAtMTY3LDEx
ICsxNzMsMTEgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBSZXRhaW5QdHI8Q0ZI
VFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGRlZmF1bHRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0
b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRD
RkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tp
ZXMoY29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgaWYgKCFjb29raWVzKQogICAgICAgICByZXR1
cm47CkBAIC0xODQsOSArMTkwLDEwIEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGRlbGV0
ZUFsbENvb2tpZXMoKQordm9pZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0KQogewotICAgIHdrRGVsZXRlQWxsSFRUUENvb2tpZXMoZGVmYXVsdENGSFRUUENvb2tp
ZVN0b3JhZ2UoKS5nZXQoKSk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6
IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgd2tEZWxldGVBbGxIVFRQQ29va2ll
cyhjb29raWVTdG9yYWdlLmdldCgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5jcHAJKHJldmlzaW9uIDEzMzkx
NykJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwOjEzMzkx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ29va2llSmFyUXQuaCIKKworI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkNvb2tp
ZUphci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHlDb29raWVzUXQuaCIKKyNpbmNsdWRl
IDxRRGF0ZVRpbWU+CisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUg
PFFOZXR3b3JrQ29va2llPgorI2luY2x1ZGUgPFFTcWxRdWVyeT4KKyNpbmNsdWRlIDxRU3RyaW5n
TGlzdD4KKyNpbmNsdWRlIDxRVmFyaWFudD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIHNf
c2hhcmVkQ29va2llSmFyUXQgPSAwOworCitzdGF0aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdv
cmtpbmdDb250ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBpZiAoIWRvY3Vt
ZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZUxvYWRl
ciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOworICAgIGlmICghbG9hZGVyKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpOworfQorCit2
b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCit7CisgICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3
b3JraW5nQ29udGV4dChkb2N1bWVudCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1
cm47CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIGlmICghamFyKQorICAgICAgICByZXR1cm47CisK
KyAgICBRVXJsIHVybEZvckNvb2tpZXModXJsKTsKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIGlmICghdGhpcmRQYXJ0eUNvb2tp
ZVBvbGljeVBlcm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gUU5l
dHdvcmtDb29raWU6OnBhcnNlQ29va2llcyhRU3RyaW5nKHZhbHVlKS50b0xhdGluMSgpKTsKKyAg
ICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGl0ID0gY29va2llcy5iZWdpbigpOwor
ICAgIHdoaWxlIChpdCAhPSBjb29raWVzLmVuZCgpKSB7CisgICAgICAgIGlmIChpdC0+aXNIdHRw
T25seSgpKQorICAgICAgICAgICAgaXQgPSBjb29raWVzLmVyYXNlKGl0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgKytpdDsKKyAgICB9CisKKyAgICBqYXItPnNldENvb2tpZXNGcm9tVXJs
KGNvb2tpZXMsIHVybEZvckNvb2tpZXMpOworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKKyAgICBpZiAoIWNvbnRl
eHQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFy
ID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisKKyAgICBR
VXJsIHVybEZvckNvb2tpZXModXJsKTsKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9jdW1lbnQt
PmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGlj
eVBlcm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0g
amFyLT5jb29raWVzRm9yVXJsKHVybEZvckNvb2tpZXMpOworICAgIGlmIChjb29raWVzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUVN0cmluZ0xpc3QgcmVzdWx0
Q29va2llczsKKyAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya0Nvb2tpZSYgbmV0d29ya0Nvb2tp
ZSwgY29va2llcykgeworICAgICAgICBpZiAobmV0d29ya0Nvb2tpZS5pc0h0dHBPbmx5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmVzdWx0Q29va2llcy5hcHBlbmQoUVN0cmlu
Zzo6ZnJvbUxhdGluMShuZXR3b3JrQ29va2llLnRvUmF3Rm9ybShRTmV0d29ya0Nvb2tpZTo6TmFt
ZUFuZFZhbHVlT25seSkuY29uc3REYXRhKCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOworfQorCitTdHJpbmcgY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
ICZ1cmwpCit7CisgICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29u
dGV4dChkb2N1bWVudCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKCktPmNvb2tpZUphcigpOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tp
ZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwoUVVybCh1cmwpKTsKKyAgICBpZiAoY29va2llcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFFTdHJpbmdMaXN0IHJlc3Vs
dENvb2tpZXM7CisgICAgZm9yZWFjaCAoUU5ldHdvcmtDb29raWUgbmV0d29ya0Nvb2tpZSwgY29v
a2llcykKKyAgICAgICAgcmVzdWx0Q29va2llcy5hcHBlbmQoUVN0cmluZzo6ZnJvbUxhdGluMShu
ZXR3b3JrQ29va2llLnRvUmF3Rm9ybShRTmV0d29ya0Nvb2tpZTo6TmFtZUFuZFZhbHVlT25seSku
Y29uc3REYXRhKCkpKTsKKworICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxhdGluMVN0
cmluZygiOyAiKSk7Cit9CisKK2Jvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50KQoreworICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0Nv
bnRleHQoZG9jdW1lbnQpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIo
KTsKK30KKworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYs
IFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkCisgICAgcmF3Q29va2llcy5jbGVhcigpOworICAgIHJldHVybiBmYWxzZTsgLy8g
cmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAorfQorCit2b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1F
OiBOb3QgeWV0IGltcGxlbWVudGVkCit9CisKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
SGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgU2hhcmVkQ29va2llSmFyUXQqIGph
ciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKKyAgICBpZiAoamFyKQorICAgICAgICBq
YXItPmdldEhvc3RuYW1lc1dpdGhDb29raWVzKGhvc3RuYW1lcyk7Cit9CisKK3ZvaWQgZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgU2hhcmVk
Q29va2llSmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKKyAgICBpZiAo
amFyKQorICAgICAgICBqYXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7Cit9
CisKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygpCit7CisgICAgU2hhcmVkQ29va2llSmFyUXQqIGph
ciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKKyAgICBpZiAoamFyKQorICAgICAgICBq
YXItPmRlbGV0ZUFsbENvb2tpZXMoKTsKK30KKworU2hhcmVkQ29va2llSmFyUXQqIFNoYXJlZENv
b2tpZUphclF0OjpzaGFyZWQoKQoreworICAgIHJldHVybiBzX3NoYXJlZENvb2tpZUphclF0Owor
fQorCitTaGFyZWRDb29raWVKYXJRdCogU2hhcmVkQ29va2llSmFyUXQ6OmNyZWF0ZShjb25zdCBT
dHJpbmcmIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpCit7CisgICAgaWYgKCFzX3NoYXJlZENvb2tp
ZUphclF0KQorICAgICAgICBzX3NoYXJlZENvb2tpZUphclF0ID0gbmV3IFNoYXJlZENvb2tpZUph
clF0KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpOworCisgICAgcmV0dXJuIHNfc2hhcmVkQ29va2ll
SmFyUXQ7Cit9CisKK3ZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmRlc3Ryb3koKQoreworICAgIGRl
bGV0ZSBzX3NoYXJlZENvb2tpZUphclF0OworICAgIHNfc2hhcmVkQ29va2llSmFyUXQgPSAwOwor
fQorCit2b2lkIFNoYXJlZENvb2tpZUphclF0OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29v
a2llcyA9IGFsbENvb2tpZXMoKTsKKyAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya0Nvb2tpZSYg
bmV0d29ya0Nvb2tpZSwgY29va2llcykKKyAgICAgICAgaG9zdG5hbWVzLmFkZChuZXR3b3JrQ29v
a2llLmRvbWFpbigpKTsKK30KKworYm9vbCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQ29va2ll
KGNvbnN0IFFOZXR3b3JrQ29va2llJiBjb29raWUpCit7CisgICAgaWYgKCFRTmV0d29ya0Nvb2tp
ZUphcjo6ZGVsZXRlQ29va2llKGNvb2tpZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
UVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxh
dGluMVN0cmluZygiREVMRVRFIEZST00gY29va2llcyBXSEVSRSBjb29raWVJZD06Y29va2llSWR2
YWx1ZSIpKTsKKyAgICBzcWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0cmluZygiOmNvb2tpZUlk
dmFsdWUiKSwgY29va2llLmRvbWFpbigpLmFwcGVuZChRTGF0aW4xU3RyaW5nKGNvb2tpZS5uYW1l
KCkpKSk7CisgICAgc3FsUXVlcnkuZXhlYygpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgU2hhcmVkQ29va2llSmFyUXQ6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJp
bmcmIGhvc3RuYW1lKQoreworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBhbGxDb29raWVz
KCk7CisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJdGVyYXRvciBpdCA9IGNvb2tpZXMuYmVn
aW4oKTsKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGVuZCA9IGNvb2tpZXMu
ZW5kKCk7CisgICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5
LnByZXBhcmUoUUxhdGluMVN0cmluZygiREVMRVRFIEZST00gY29va2llcyBXSEVSRSBjb29raWVJ
ZD06Y29va2llSWR2YWx1ZSIpKTsKKyAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAgIGlm
IChpdC0+ZG9tYWluKCkgPT0gUVN0cmluZyhob3N0bmFtZSkpIHsKKyAgICAgICAgICAgIHNxbFF1
ZXJ5LmJpbmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29va2llSWR2YWx1ZSIpLCBpdC0+ZG9tYWlu
KCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoaXQtPm5hbWUoKSkpKTsKKyAgICAgICAgICAgIHNxbFF1
ZXJ5LmV4ZWMoKTsKKyAgICAgICAgICAgIGl0ID0gY29va2llcy5lcmFzZShpdCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgaXQrKzsKKyAgICB9CisgICAgc2V0QWxsQ29va2llcyhjb29r
aWVzKTsKK30KKwordm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQWxsQ29va2llcygpCit7
CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBR
U3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3FsUXVlcnkucHJlcGFyZShRTGF0
aW4xU3RyaW5nKCJERUxFVEUgKiBGUk9NIGNvb2tpZXMiKSk7CisgICAgc3FsUXVlcnkuZXhlYygp
OworICAgIHNldEFsbENvb2tpZXMoUUxpc3Q8UU5ldHdvcmtDb29raWU+KCkpOworfQorCitTaGFy
ZWRDb29raWVKYXJRdDo6U2hhcmVkQ29va2llSmFyUXQoY29uc3QgU3RyaW5nJiBjb29raWVTdG9y
YWdlRGlyZWN0b3J5KQoreworICAgIG1fZGF0YWJhc2UgPSBRU3FsRGF0YWJhc2U6OmFkZERhdGFi
YXNlKFFMYXRpbjFTdHJpbmcoIlFTUUxJVEUiKSk7CisgICAgY29uc3QgUVN0cmluZyBjb29raWVT
dG9yYWdlUGF0aCA9IGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgY29uc3QgUVN0cmluZyBk
YXRhQmFzZU5hbWUgPSBjb29raWVTdG9yYWdlUGF0aCArIFFMYXRpbjFTdHJpbmcoIi9jb29raWVz
LmRiIik7CisgICAgbV9kYXRhYmFzZS5zZXREYXRhYmFzZU5hbWUoZGF0YUJhc2VOYW1lKTsKKyAg
ICBlbnN1cmVEYXRhYmFzZVRhYmxlKCk7CisgICAgbG9hZENvb2tpZXMoKTsKK30KKworU2hhcmVk
Q29va2llSmFyUXQ6On5TaGFyZWRDb29raWVKYXJRdCgpCit7CisgICAgbV9kYXRhYmFzZS5jbG9z
ZSgpOworfQorCitib29sIFNoYXJlZENvb2tpZUphclF0OjpzZXRDb29raWVzRnJvbVVybChjb25z
dCBRTGlzdDxRTmV0d29ya0Nvb2tpZT4mIGNvb2tpZUxpc3QsIGNvbnN0IFFVcmwmIHVybCkKK3sK
KyAgICBpZiAoIVFOZXR3b3JrQ29va2llSmFyOjpzZXRDb29raWVzRnJvbVVybChjb29raWVMaXN0
LCB1cmwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNP
cGVuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFFTcWxRdWVyeSBzcWxRdWVyeSht
X2RhdGFiYXNlKTsKKyAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIklOU0VSVCBP
UiBSRVBMQUNFIElOVE8gY29va2llcyAoY29va2llSWQsIGNvb2tpZSkgVkFMVUVTICg6Y29va2ll
SWR2YWx1ZSwgOmNvb2tpZXZhbHVlKSIpKTsKKyAgICBRVmFyaWFudExpc3QgY29va2llc0lkczsK
KyAgICBRVmFyaWFudExpc3QgY29va2llc1ZhbHVlczsKKyAgICBmb3JlYWNoIChjb25zdCBRTmV0
d29ya0Nvb2tpZSAmY29va2llLCBjb29raWVzRm9yVXJsKHVybCkpIHsKKyAgICAgICAgaWYgKGNv
b2tpZS5pc1Nlc3Npb25Db29raWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBj
b29raWVzSWRzLmFwcGVuZChjb29raWUuZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoY29v
a2llLm5hbWUoKSkpKTsKKyAgICAgICAgY29va2llc1ZhbHVlcy5hcHBlbmQoY29va2llLnRvUmF3
Rm9ybSgpKTsKKyAgICB9CisgICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRpbjFTdHJpbmcoIjpj
b29raWVJZHZhbHVlIiksIGNvb2tpZXNJZHMpOworICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0
aW4xU3RyaW5nKCI6Y29va2lldmFsdWUiKSwgY29va2llc1ZhbHVlcyk7CisgICAgc3FsUXVlcnku
ZXhlY0JhdGNoKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2hhcmVkQ29va2llSmFy
UXQ6OmVuc3VyZURhdGFiYXNlVGFibGUoKQoreworICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKCkp
IHsKKyAgICAgICAgcVdhcm5pbmcoIkNhbid0IG9wZW4gY29va2llIGRhdGFiYXNlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9kYXRhYmFzZS5leGVjKFFMYXRpbjFTdHJpbmcoIlBS
QUdNQSBzeW5jaHJvbm91cz1PRkYiKSk7CisKKyAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRh
YmFzZSk7CisgICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJDUkVBVEUgVEFCTEUg
SUYgTk9UIEVYSVNUUyBjb29raWVzIChjb29raWVJZCBWQVJDSEFSIFBSSU1BUlkgS0VZLCBjb29r
aWUgQkxPQik7IikpOworICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKK30KKwordm9pZCBTaGFyZWRDb29r
aWVKYXJRdDo6bG9hZENvb2tpZXMoKQoreworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXM7Cisg
ICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5LnByZXBhcmUo
UUxhdGluMVN0cmluZygiU0VMRUNUIGNvb2tpZSBGUk9NIGNvb2tpZXMiKSk7CisgICAgc3FsUXVl
cnkuZXhlYygpOworICAgIHdoaWxlIChzcWxRdWVyeS5uZXh0KCkpCisgICAgICAgIGNvb2tpZXMu
YXBwZW5kKFFOZXR3b3JrQ29va2llOjpwYXJzZUNvb2tpZXMoc3FsUXVlcnkudmFsdWUoMCkudG9C
eXRlQXJyYXkoKSkpOworICAgIHNldEFsbENvb2tpZXMoY29va2llcyk7Cit9CisKKyNpbmNsdWRl
ICJtb2NfQ29va2llSmFyUXQuY3BwIgorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0
LmNwcAkocmV2aXNpb24gMTMzOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9xdC9Db29raWVKYXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCw3IEBACiAj
aW5jbHVkZSAiQ29va2llSmFyUXQuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUg
IkNvb2tpZUphci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgi
CiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgpAQCAtNDksMzAgKzQ2LDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIFNoYXJlZENvb2tpZUphclF0KiBzX3NoYXJlZENvb2tpZUph
clF0ID0gMDsKIAotc3RhdGljIE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4dChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZy
YW1lLT5sb2FkZXIoKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGxvYWRlci0+bmV0d29ya2luZ0NvbnRleHQoKTsKLX0KLQotdm9pZCBzZXRDb29raWVz
KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQo
ZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIFFOZXR3
b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvbnRleHQt
Pm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpIDogU2hhcmVkQ29va2llSmFyUXQ6
OnNoYXJlZCgpOwogICAgIGlmICghamFyKQogICAgICAgICByZXR1cm47CiAKICAgICBRVXJsIHVy
bEZvckNvb2tpZXModXJsKTsKLSAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCkpOworICAgIFFVcmwgZmlyc3RQYXJ0eVVybChmaXJzdFBhcnR5KTsK
ICAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNv
b2tpZXMsIGZpcnN0UGFydHlVcmwpKQogICAgICAgICByZXR1cm47CiAKQEAgLTg4LDE1ICs2OSwx
NCBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgamFyLT5z
ZXRDb29raWVzRnJvbVVybChjb29raWVzLCB1cmxGb3JDb29raWVzKTsKIH0KIAotU3RyaW5nIGNv
b2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcg
Y29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmly
c3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250
ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nv
b2tpZUphciogamFyID0gY29udGV4dCA/IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkt
PmNvb2tpZUphcigpIDogU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIGlmICghamFy
KQorICAgICAgICByZXR1cm47CiAKICAgICBRVXJsIHVybEZvckNvb2tpZXModXJsKTsKLSAgICBR
VXJsIGZpcnN0UGFydHlVcmwoZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAg
IFFVcmwgZmlyc3RQYXJ0eVVybChmaXJzdFBhcnR5KTsKICAgICBpZiAoIXRoaXJkUGFydHlDb29r
aWVQb2xpY3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTExNCwxMiArOTQsMTEgQEAgU3RyaW5nIGNv
b2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LAogICAgIHJldHVybiByZXN1bHRDb29raWVz
LmpvaW4oUUxhdGluMVN0cmluZygiOyAiKSk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkK
K1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgY29uc3QgS1VSTCAmdXJsKQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKKyAg
ICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvbnRleHQtPm5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKCktPmNvb2tpZUphcigpIDogU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwor
ICAgIGlmICghamFyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29r
aWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigp
OwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBqYXItPmNvb2tpZXNGb3JV
cmwoUVVybCh1cmwpKTsKICAgICBpZiAoY29va2llcy5pc0VtcHR5KCkpCkBAIC0xMzIsNDMgKzEx
MSw0MSBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0
dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3RyaW5nKCI7ICIpKTsKIH0KIAotYm9vbCBj
b29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIGNvb2tpZXNFbmFi
bGVkKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250ZXh0LT5uZXR3b3JrQWNj
ZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0g
Y29udGV4dCA/IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpIDog
U2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIHJldHVybiAhIWphcjsKIH0KIAotYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29r
aWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0Kiwg
Y29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1F
OiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVy
biBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0
ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9p
ZCBkZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJikKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNo
YXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0g
Y29udGV4dCA/IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpIDog
U2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKIH0KIAotdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKQogewotICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJR
dDo6c2hhcmVkKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQgPyBjb250
ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKSA6IFNoYXJlZENvb2tpZUph
clF0OjpzaGFyZWQoKTsKICAgICBpZiAoamFyKQogICAgICAgICBqYXItPmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShob3N0bmFtZSk7CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lk
IGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgU2hh
cmVkQ29va2llSmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKKyAgICBR
TmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKCktPmNvb2tpZUphcigpIDogU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAg
IGlmIChqYXIpCiAgICAgICAgIGphci0+ZGVsZXRlQWxsQ29va2llcygpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJT
b3VwLmNwcAkocmV2aXNpb24gMTMzOTIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw3
IEBACiAjaW5jbHVkZSAiQ29va2llSmFyU291cC5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKICNpbmNsdWRlICJHT3du
UHRyU291cC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4
dC5oIgpAQCAtMzQsMTkgKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
U291cENvb2tpZUphciogY29va2llSmFyRm9yRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50KQorc3RhdGljIFNvdXBDb29raWVKYXIqIGNvb2tpZUphckZvckNvbnRleHQoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgY29uc3QgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29uc3QgRnJhbWVMb2FkZXIqIGxvYWRl
ciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgY29uc3QgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBsb2FkZXItPm5ldHdvcmtp
bmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKICAgICBy
ZXR1cm4gU09VUF9DT09LSUVfSkFSKHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShjb250ZXh0LT5z
b3VwU2Vzc2lvbigpLCBTT1VQX1RZUEVfQ09PS0lFX0pBUikpOwogfQogCkBAIC04NiwxNCArNzMs
MTQgQEAgc3RhdGljIGlubGluZSBib29sIGh0dHBPbmx5Q29va2llRXhpc3RzKAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBzZXRDb29raWVzRnJvbURPTShO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIFNvdXBDb29raWVKYXIqIGph
ciA9IGNvb2tpZUphckZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBjb250ZXh0ID8gY29va2llSmFyRm9yQ29udGV4dChjb250ZXh0KSA6IHNvdXBDb29raWVK
YXIoKTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgR093blB0cjxTb3Vw
VVJJPiBvcmlnaW4oc291cF91cmlfbmV3KHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Ci0g
ICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBfdXJpX25ldyhkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgR093blB0
cjxTb3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5LnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpKTsKIAogICAgIC8vIEdldCBleGlzdGluZyBjb29raWVzIGZvciB0aGlzIG9y
aWdpbi4KICAgICBHU0xpc3QqIGV4aXN0aW5nQ29va2llcyA9IHNvdXBfY29va2llX2phcl9nZXRf
Y29va2llX2xpc3QoamFyLCBvcmlnaW4uZ2V0KCksIFRSVUUpOwpAQCAtMTIwLDkgKzEwNyw5IEBA
IHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBzb3VwX2Nvb2tp
ZXNfZnJlZShleGlzdGluZ0Nvb2tpZXMpOwogfQogCi1zdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JE
b2N1bWVudChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBm
b3JIVFRQSGVhZGVyKQorc3RhdGljIFN0cmluZyBjb29raWVzRm9yQ29udGV4dChOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBib29sIGZvckhUVFBIZWFkZXIpCiB7
Ci0gICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQp
OworICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0
KGNvbnRleHQpIDogc291cENvb2tpZUphcigpOwogICAgIGlmICghamFyKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAKQEAgLTEzMSwyNSArMTE4LDI1IEBAIHN0YXRpYyBTdHJpbmcgY29va2ll
c0ZvckRvY3VtZW50KGNvbnN0IEQKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChjb29raWVz
LmdldCgpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICByZXR1cm4gY29v
a2llc0ZvckRvY3VtZW50KGRvY3VtZW50LCB1cmwsIGZhbHNlKTsKKyAgICByZXR1cm4gY29va2ll
c0ZvckNvbnRleHQoY29udGV4dCwgdXJsLCBmYWxzZSk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCkKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIHJldHVybiBjb29raWVzRm9y
RG9jdW1lbnQoZG9jdW1lbnQsIHVybCwgdHJ1ZSk7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JDb250
ZXh0KGNvbnRleHQsIHVybCwgdHJ1ZSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50KQorYm9vbCBjb29raWVzRW5hYmxlZChOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCkKIHsKLSAgICByZXR1cm4gISFjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVu
dCk7CisgICAgcmV0dXJuICEhY29va2llSmFyRm9yQ29udGV4dChjb250ZXh0KTsKIH0KIAotYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
LCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgZ2V0UmF3Q29va2llcyhOZXR3b3Jr
aW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3
Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgU291cENvb2tpZUphciog
amFyID0gY29va2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIFNvdXBDb29raWVKYXIq
IGphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENvb2tp
ZUphcigpOwogICAgIGlmICghamFyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3MCw5
ICsxNTcsOSBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIGRlbGV0ZUNv
b2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yRG9j
dW1lbnQoZG9jdW1lbnQpOworICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvbnRleHQgPyBjb29r
aWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENvb2tpZUphcigpOwogICAgIGlmICghamFy
KQogICAgICAgICByZXR1cm47CiAKQEAgLTE5MSw5ICsxNzgsOSBAQCB2b2lkIGRlbGV0ZUNvb2tp
ZShjb25zdCBEb2N1bWVudCogZG9jdW1lCiAgICAgfQogfQogCi12b2lkIGdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBo
b3N0bmFtZXMpCiB7Ci0gICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc291cENvb2tpZUph
cigpOworICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250
ZXh0KGNvbnRleHQpIDogc291cENvb2tpZUphcigpOwogICAgIEdPd25QdHI8R1NMaXN0PiBjb29r
aWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpKTsKICAgICBmb3IgKEdT
TGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRl
bSkpIHsKICAgICAgICAgR093blB0cjxTb3VwQ29va2llPiBjb29raWUoc3RhdGljX2Nhc3Q8U291
cENvb2tpZSo+KGl0ZW0tPmRhdGEpKTsKQEAgLTIwMywxMCArMTkwLDEwIEBAIHZvaWQgZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBo
b3N0bmFtZSkKIHsKICAgICBDU3RyaW5nIGhvc3ROYW1lU3RyaW5nID0gaG9zdG5hbWUudXRmOCgp
OwotICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IHNvdXBDb29raWVKYXIoKTsKKyAgICBT
b3VwQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29va2llSmFyRm9yQ29udGV4dChjb250ZXh0
KSA6IHNvdXBDb29raWVKYXIoKTsKICAgICBHT3duUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nv
b2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKSk7CiAgICAgZm9yIChHU0xpc3QqIGl0ZW0g
PSBjb29raWVzLmdldCgpOyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CiAgICAg
ICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5k
YXRhKTsKQEAgLTIxNiw5ICsyMDMsOSBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShj
b25zdCBTdHJpCiAgICAgfQogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBkZWxl
dGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIFNvdXBDb29r
aWVKYXIqIGNvb2tpZUphciA9IHNvdXBDb29raWVKYXIoKTsKKyAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBjb250ZXh0ID8gY29va2llSmFyRm9yQ29udGV4dChjb250ZXh0KSA6IHNvdXBDb29raWVK
YXIoKTsKICAgICBHT3duUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nv
b2tpZXMoY29va2llSmFyKSk7CiAgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzLmdldCgp
OyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CiAgICAgICAgIFNvdXBDb29raWUq
IGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNv
dXAuaAkocmV2aXNpb24gMTMzOTIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL0Nvb2tpZUphclNvdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAog
I2lmbmRlZiBDb29raWVKYXJTb3VwX2gKICNkZWZpbmUgQ29va2llSmFyU291cF9oCiAKLSNpbmNs
dWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29v
a2llSmFyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCShyZXZpc2lvbiAxMzM5MjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKIAogI2luY2x1
ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1
ZGUgPFdpbmluZXQuaD4KQEAgLTM2LDE2ICszNSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtp
bmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIHsKLSAgICAvLyBGSVhNRTogRGVhbCB3aXRoIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpLgorICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggZmlyc3RQYXJ0eSBhcmd1bWVudC4K
ICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogICAgIFN0cmluZyB2YWwgPSB2YWx1ZTsK
ICAgICBJbnRlcm5ldFNldENvb2tpZShzdHIuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24o
KSwgMCwgdmFsLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwogfQogCi1TdHJpbmcg
Y29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitT
dHJpbmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25z
dCBLVVJMJiB1cmwpCiB7CisgICAgLy8gRklYTUU6IERlYWwgd2l0aCBmaXJzdFBhcnR5IGFyZ3Vt
ZW50LgorCiAgICAgU3RyaW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKIAogICAgIERXT1JEIGNvdW50
ID0gMDsKQEAgLTYzLDQwICs2NCw0MCBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCog
Lypkb2N1bWVuCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKIH0KIAotU3RyaW5n
IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIC8vIEZJWE1FOiBpbmNs
dWRlIEh0dHBPbmx5IGNvb2tpZQotICAgIHJldHVybiBjb29raWVzKGRvY3VtZW50LCB1cmwpOwor
ICAgIHJldHVybiBjb29raWVzRm9yRE9NKGNvbnRleHQsIHVybCk7CiB9CiAKLWJvb2wgY29va2ll
c0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgY29va2llc0VuYWJs
ZWQoTmV0d29ya2luZ0NvbnRleHQqKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdl
dFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4m
IHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBjb25z
dCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5v
dCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZh
bHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29v
a2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIGRl
bGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
KQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdldEhv
c3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+JiBo
b3N0bmFtZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9p
ZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQg
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgU3RyaW5n
JiBob3N0bmFtZSkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12
b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdD
b250ZXh0KikKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAkocmV2aXNpb24gMTMz
OTIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdl
b3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29v
a2llSmFyUXQuaCIKLQotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJOZXR3b3JraW5nQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlRoaXJkUGFydHlDb29raWVzUXQuaCIKLSNpbmNsdWRlIDxRRGF0
ZVRpbWU+Ci0jaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgotI2luY2x1ZGUgPFFOZXR3
b3JrQ29va2llPgotI2luY2x1ZGUgPFFTcWxRdWVyeT4KLSNpbmNsdWRlIDxRU3RyaW5nTGlzdD4K
LSNpbmNsdWRlIDxRVmFyaWFudD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIHNfc2hhcmVk
Q29va2llSmFyUXQgPSAwOwotCi1zdGF0aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdD
b250ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsK
LSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBGcmFtZUxvYWRlciogbG9h
ZGVyID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpOwotfQotCi12b2lkIHNl
dENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0g
ICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KCktPmNvb2tpZUphcigpOwotICAgIGlmICghamFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBR
VXJsIHVybEZvckNvb2tpZXModXJsKTsKLSAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9jdW1lbnQt
PmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGlj
eVBlcm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gUU5ldHdvcmtD
b29raWU6OnBhcnNlQ29va2llcyhRU3RyaW5nKHZhbHVlKS50b0xhdGluMSgpKTsKLSAgICBRTGlz
dDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGl0ID0gY29va2llcy5iZWdpbigpOwotICAgIHdo
aWxlIChpdCAhPSBjb29raWVzLmVuZCgpKSB7Ci0gICAgICAgIGlmIChpdC0+aXNIdHRwT25seSgp
KQotICAgICAgICAgICAgaXQgPSBjb29raWVzLmVyYXNlKGl0KTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgKytpdDsKLSAgICB9Ci0KLSAgICBqYXItPnNldENvb2tpZXNGcm9tVXJsKGNvb2tp
ZXMsIHVybEZvckNvb2tpZXMpOwotfQotCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29u
dGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7Ci0KLSAgICBRVXJsIHVy
bEZvckNvb2tpZXModXJsKTsKLSAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCkpOwotICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1p
dHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5j
b29raWVzRm9yVXJsKHVybEZvckNvb2tpZXMpOwotICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgUVN0cmluZ0xpc3QgcmVzdWx0Q29va2ll
czsKLSAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya0Nvb2tpZSYgbmV0d29ya0Nvb2tpZSwgY29v
a2llcykgewotICAgICAgICBpZiAobmV0d29ya0Nvb2tpZS5pc0h0dHBPbmx5KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgcmVzdWx0Q29va2llcy5hcHBlbmQoUVN0cmluZzo6ZnJv
bUxhdGluMShuZXR3b3JrQ29va2llLnRvUmF3Rm9ybShRTmV0d29ya0Nvb2tpZTo6TmFtZUFuZFZh
bHVlT25seSkuY29uc3REYXRhKCkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0Q29va2ll
cy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwotfQotCi1TdHJpbmcgY29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMICZ1cmwp
Ci17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChk
b2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0g
ICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KCktPmNvb2tpZUphcigpOwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBq
YXItPmNvb2tpZXNGb3JVcmwoUVVybCh1cmwpKTsKLSAgICBpZiAoY29va2llcy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFFTdHJpbmdMaXN0IHJlc3VsdENvb2tp
ZXM7Ci0gICAgZm9yZWFjaCAoUU5ldHdvcmtDb29raWUgbmV0d29ya0Nvb2tpZSwgY29va2llcykK
LSAgICAgICAgcmVzdWx0Q29va2llcy5hcHBlbmQoUVN0cmluZzo6ZnJvbUxhdGluMShuZXR3b3Jr
Q29va2llLnRvUmF3Rm9ybShRTmV0d29ya0Nvb2tpZTo6TmFtZUFuZFZhbHVlT25seSkuY29uc3RE
YXRhKCkpKTsKLQotICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxhdGluMVN0cmluZygi
OyAiKSk7Ci19Ci0KLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
KQotewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQo
ZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKLX0K
LQotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVu
dGVkCi0gICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJu
IHRydWUgd2hlbiBpbXBsZW1lbnRlZAotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQotewotICAgIC8vIEZJWE1FOiBOb3Qg
eWV0IGltcGxlbWVudGVkCi19Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCi17Ci0gICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNo
YXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKLSAgICBpZiAoamFyKQotICAgICAgICBqYXItPmdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKGhvc3RuYW1lcyk7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCi17Ci0gICAgU2hhcmVkQ29va2ll
SmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKLSAgICBpZiAoamFyKQot
ICAgICAgICBqYXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7Ci19Ci0KLXZv
aWQgZGVsZXRlQWxsQ29va2llcygpCi17Ci0gICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNo
YXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKLSAgICBpZiAoamFyKQotICAgICAgICBqYXItPmRl
bGV0ZUFsbENvb2tpZXMoKTsKLX0KLQotU2hhcmVkQ29va2llSmFyUXQqIFNoYXJlZENvb2tpZUph
clF0OjpzaGFyZWQoKQotewotICAgIHJldHVybiBzX3NoYXJlZENvb2tpZUphclF0OwotfQotCi1T
aGFyZWRDb29raWVKYXJRdCogU2hhcmVkQ29va2llSmFyUXQ6OmNyZWF0ZShjb25zdCBTdHJpbmcm
IGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpCi17Ci0gICAgaWYgKCFzX3NoYXJlZENvb2tpZUphclF0
KQotICAgICAgICBzX3NoYXJlZENvb2tpZUphclF0ID0gbmV3IFNoYXJlZENvb2tpZUphclF0KGNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkpOwotCi0gICAgcmV0dXJuIHNfc2hhcmVkQ29va2llSmFyUXQ7
Ci19Ci0KLXZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmRlc3Ryb3koKQotewotICAgIGRlbGV0ZSBz
X3NoYXJlZENvb2tpZUphclF0OwotICAgIHNfc2hhcmVkQ29va2llSmFyUXQgPSAwOwotfQotCi12
b2lkIFNoYXJlZENvb2tpZUphclF0OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0
cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9
IGFsbENvb2tpZXMoKTsKLSAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya0Nvb2tpZSYgbmV0d29y
a0Nvb2tpZSwgY29va2llcykKLSAgICAgICAgaG9zdG5hbWVzLmFkZChuZXR3b3JrQ29va2llLmRv
bWFpbigpKTsKLX0KLQotYm9vbCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQ29va2llKGNvbnN0
IFFOZXR3b3JrQ29va2llJiBjb29raWUpCi17Ci0gICAgaWYgKCFRTmV0d29ya0Nvb2tpZUphcjo6
ZGVsZXRlQ29va2llKGNvb2tpZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
bV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUVNxbFF1
ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOwotICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGluMVN0
cmluZygiREVMRVRFIEZST00gY29va2llcyBXSEVSRSBjb29raWVJZD06Y29va2llSWR2YWx1ZSIp
KTsKLSAgICBzcWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0cmluZygiOmNvb2tpZUlkdmFsdWUi
KSwgY29va2llLmRvbWFpbigpLmFwcGVuZChRTGF0aW4xU3RyaW5nKGNvb2tpZS5uYW1lKCkpKSk7
Ci0gICAgc3FsUXVlcnkuZXhlYygpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2hh
cmVkQ29va2llSmFyUXQ6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKQotewotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBhbGxDb29raWVzKCk7Ci0g
ICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJdGVyYXRvciBpdCA9IGNvb2tpZXMuYmVnaW4oKTsK
LSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGVuZCA9IGNvb2tpZXMuZW5kKCk7
Ci0gICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOwotICAgIHNxbFF1ZXJ5LnByZXBh
cmUoUUxhdGluMVN0cmluZygiREVMRVRFIEZST00gY29va2llcyBXSEVSRSBjb29raWVJZD06Y29v
a2llSWR2YWx1ZSIpKTsKLSAgICB3aGlsZSAoaXQgIT0gZW5kKSB7Ci0gICAgICAgIGlmIChpdC0+
ZG9tYWluKCkgPT0gUVN0cmluZyhob3N0bmFtZSkpIHsKLSAgICAgICAgICAgIHNxbFF1ZXJ5LmJp
bmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29va2llSWR2YWx1ZSIpLCBpdC0+ZG9tYWluKCkuYXBw
ZW5kKFFMYXRpbjFTdHJpbmcoaXQtPm5hbWUoKSkpKTsKLSAgICAgICAgICAgIHNxbFF1ZXJ5LmV4
ZWMoKTsKLSAgICAgICAgICAgIGl0ID0gY29va2llcy5lcmFzZShpdCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgaXQrKzsKLSAgICB9Ci0gICAgc2V0QWxsQ29va2llcyhjb29raWVzKTsK
LX0KLQotdm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQWxsQ29va2llcygpCi17Ci0gICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRU3FsUXVl
cnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3Ry
aW5nKCJERUxFVEUgKiBGUk9NIGNvb2tpZXMiKSk7Ci0gICAgc3FsUXVlcnkuZXhlYygpOwotICAg
IHNldEFsbENvb2tpZXMoUUxpc3Q8UU5ldHdvcmtDb29raWU+KCkpOwotfQotCi1TaGFyZWRDb29r
aWVKYXJRdDo6U2hhcmVkQ29va2llSmFyUXQoY29uc3QgU3RyaW5nJiBjb29raWVTdG9yYWdlRGly
ZWN0b3J5KQotewotICAgIG1fZGF0YWJhc2UgPSBRU3FsRGF0YWJhc2U6OmFkZERhdGFiYXNlKFFM
YXRpbjFTdHJpbmcoIlFTUUxJVEUiKSk7Ci0gICAgY29uc3QgUVN0cmluZyBjb29raWVTdG9yYWdl
UGF0aCA9IGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgY29uc3QgUVN0cmluZyBkYXRhQmFz
ZU5hbWUgPSBjb29raWVTdG9yYWdlUGF0aCArIFFMYXRpbjFTdHJpbmcoIi9jb29raWVzLmRiIik7
Ci0gICAgbV9kYXRhYmFzZS5zZXREYXRhYmFzZU5hbWUoZGF0YUJhc2VOYW1lKTsKLSAgICBlbnN1
cmVEYXRhYmFzZVRhYmxlKCk7Ci0gICAgbG9hZENvb2tpZXMoKTsKLX0KLQotU2hhcmVkQ29va2ll
SmFyUXQ6On5TaGFyZWRDb29raWVKYXJRdCgpCi17Ci0gICAgbV9kYXRhYmFzZS5jbG9zZSgpOwot
fQotCi1ib29sIFNoYXJlZENvb2tpZUphclF0OjpzZXRDb29raWVzRnJvbVVybChjb25zdCBRTGlz
dDxRTmV0d29ya0Nvb2tpZT4mIGNvb2tpZUxpc3QsIGNvbnN0IFFVcmwmIHVybCkKLXsKLSAgICBp
ZiAoIVFOZXR3b3JrQ29va2llSmFyOjpzZXRDb29raWVzRnJvbVVybChjb29raWVMaXN0LCB1cmwp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFi
YXNlKTsKLSAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIklOU0VSVCBPUiBSRVBM
QUNFIElOVE8gY29va2llcyAoY29va2llSWQsIGNvb2tpZSkgVkFMVUVTICg6Y29va2llSWR2YWx1
ZSwgOmNvb2tpZXZhbHVlKSIpKTsKLSAgICBRVmFyaWFudExpc3QgY29va2llc0lkczsKLSAgICBR
VmFyaWFudExpc3QgY29va2llc1ZhbHVlczsKLSAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya0Nv
b2tpZSAmY29va2llLCBjb29raWVzRm9yVXJsKHVybCkpIHsKLSAgICAgICAgaWYgKGNvb2tpZS5p
c1Nlc3Npb25Db29raWUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb29raWVz
SWRzLmFwcGVuZChjb29raWUuZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoY29va2llLm5h
bWUoKSkpKTsKLSAgICAgICAgY29va2llc1ZhbHVlcy5hcHBlbmQoY29va2llLnRvUmF3Rm9ybSgp
KTsKLSAgICB9Ci0gICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRpbjFTdHJpbmcoIjpjb29raWVJ
ZHZhbHVlIiksIGNvb2tpZXNJZHMpOwotICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0aW4xU3Ry
aW5nKCI6Y29va2lldmFsdWUiKSwgY29va2llc1ZhbHVlcyk7Ci0gICAgc3FsUXVlcnkuZXhlY0Jh
dGNoKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmVu
c3VyZURhdGFiYXNlVGFibGUoKQotewotICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKCkpIHsKLSAg
ICAgICAgcVdhcm5pbmcoIkNhbid0IG9wZW4gY29va2llIGRhdGFiYXNlIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgbV9kYXRhYmFzZS5leGVjKFFMYXRpbjFTdHJpbmcoIlBSQUdNQSBz
eW5jaHJvbm91cz1PRkYiKSk7Ci0KLSAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7
Ci0gICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJDUkVBVEUgVEFCTEUgSUYgTk9U
IEVYSVNUUyBjb29raWVzIChjb29raWVJZCBWQVJDSEFSIFBSSU1BUlkgS0VZLCBjb29raWUgQkxP
Qik7IikpOwotICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKLX0KLQotdm9pZCBTaGFyZWRDb29raWVKYXJR
dDo6bG9hZENvb2tpZXMoKQotewotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXM7Ci0gICAgUVNx
bFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOwotICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGlu
MVN0cmluZygiU0VMRUNUIGNvb2tpZSBGUk9NIGNvb2tpZXMiKSk7Ci0gICAgc3FsUXVlcnkuZXhl
YygpOwotICAgIHdoaWxlIChzcWxRdWVyeS5uZXh0KCkpCi0gICAgICAgIGNvb2tpZXMuYXBwZW5k
KFFOZXR3b3JrQ29va2llOjpwYXJzZUNvb2tpZXMoc3FsUXVlcnkudmFsdWUoMCkudG9CeXRlQXJy
YXkoKSkpOwotICAgIHNldEFsbENvb2tpZXMoY29va2llcyk7Ci19Ci0KLSNpbmNsdWRlICJtb2Nf
Q29va2llSmFyUXQuY3BwIgotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCShyZXZpc2lvbiAxMzM5MjIp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlICJXS1Byb3RlY3Rpb25TcGFjZVR5cGVz
LmgiCiAjaW5jbHVkZSAiV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5oIgogI2luY2x1ZGUgIldLU2hh
cmVkQVBJQ2FzdC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9DcmVkZW50aWFsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173083</attachid>
            <date>2012-11-08 11:42:35 -0800</date>
            <delta_ts>2012-11-08 13:52:50 -0800</delta_ts>
            <desc>another attempt</desc>
            <filename>CookieJar.txt</filename>
            <type>text/plain</type>
            <size>117467</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMzOTIyKQorKysg
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzg1
Nyw2ICszODU3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVQb2xpY3kuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1l
dGFkYXRhLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmggXAor
CVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ29va2llSmFyLmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFj
Y2Vzc0NvbnRyb2wuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlLmNwcCBcCkBAIC00MjQ3LDcgKzQyNDksNiBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q29va2llc1N0cmF0ZWd5LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0N1cnNvci5jcHAgXApAQCAtNDcxNSw2ICs0NzE2LDcgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Byb3h5U2VydmVy
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZp
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5v
dGlmaWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29r
aWVKYXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3Bh
Y2VIYXNoLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNw
YWNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3Bh
Y2UuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCShyZXZp
c2lvbiAxMzM5MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX0lO
Q0xVREVfRElSRUNUT1JJRVMKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRp
bmcvYmxhY2tiZXJyeS9FZGl0b3JCbGFja0JlcnJ5LmNwcAogICAgIGVkaXRpbmcvYmxhY2tiZXJy
eS9TbWFydFJlcGxhY2VCbGFja0JlcnJ5LmNwcAorICAgIGxvYWRlci9ibGFja2JlcnJ5L0Nvb2tp
ZUphckJsYWNrQmVycnkuY3BwCiAgICAgcGFnZS9ibGFja2JlcnJ5L0FjY2Vzc2liaWxpdHlPYmpl
Y3RCbGFja0JlcnJ5LmNwcAogICAgIHBhZ2UvYmxhY2tiZXJyeS9EcmFnQ29udHJvbGxlckJsYWNr
QmVycnkuY3BwCiAgICAgcGFnZS9ibGFja2JlcnJ5L0V2ZW50SGFuZGxlckJsYWNrQmVycnkuY3Bw
CkBAIC0xNDgsNyArMTQ5LDYgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2Js
YWNrYmVycnkvQ29udGV4dE1lbnVCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVy
cnkvQ29udGV4dE1lbnVJdGVtQmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5
L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCiAgICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9DdXJzb3JC
bGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0RhdGFCbGFja0JlcnJ5
LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0ltYWdlQmxhY2tCZXJyeS5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMzOTIyKQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGxvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudC5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5jcHAgXAorICAgIGxvYWRlci9Db29raWVKYXIuY3BwIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmln
aW5BY2Nlc3NDb250cm9sLmNwcCBcCiAgICAgbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVz
dWx0Q2FjaGUuY3BwIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3Bw
IFwKQEAgLTE5NDksNiArMTk1MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5oIFwKICAgICBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaCBcCisgICAgbG9hZGVyL0Nvb2tp
ZUphci5oIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmggXAogICAgIGxv
YWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmggXAogICAgIGxvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oIFwKQEAgLTIyMzgsNiArMjI0MCw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvTUlNRVNuaWZmaW5nLmggXAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JrU3RhdGVOb3RpZmllci5oIFwKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2ll
SmFyLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmggXAogICAgIHBs
YXRmb3JtL25ldHdvcmsvUHJveHlTZXJ2ZXIuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9R
dE1JTUVUeXBlU25pZmZlci5oIFwKQEAgLTIyNTAsNiArMjI1Myw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIFwKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
cXQvTmV0d29ya1N0YXRlTm90aWZpZXJQcml2YXRlLmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsv
cXQvQ29va2llSmFyUXQuaCBcCiAgICAgcGxhdGZvcm0vUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBc
CiAgICAgcGxhdGZvcm0vUGxhdGZvcm1NZW1vcnlJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgcGxh
dGZvcm0vUGxhdGZvcm1Ub3VjaEV2ZW50LmggXApAQCAtMjI1Nyw3ICsyMjYxLDYgQEAgSEVBREVS
UyArPSBcCiAgICAgcGxhdGZvcm0vUG9wdXBNZW51LmggXAogICAgIHBsYXRmb3JtL1JlZmVycmVy
UG9saWN5LmggXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggXAotICAgIHBsYXRmb3Jt
L3F0L0Nvb2tpZUphclF0LmggXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmggXAog
ICAgIHBsYXRmb3JtL3F0L1FTdHlsZUZhY2FkZS5oIFwKICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVFTdHlsZS5oIFwKQEAgLTI4MDQsNiArMjgwNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIFwKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL0ROU1Jlc29sdmVRdWV1ZS5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
TUlNRVNuaWZmaW5nLmNwcCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5j
cHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvQ3JlZGVudGlhbFN0b3JhZ2VRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAgXAogICAgIHBsYXRm
b3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwIFwKQEAgLTI4MTcsNyArMjgyMSw2
IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcCBcCiAgICAg
cGxhdGZvcm0vcXQvQ29udGV4dE1lbnVJdGVtUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Db250
ZXh0TWVudVF0LmNwcCBcCi0gICAgcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwIFwKICAgICBw
bGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAgXApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQkocmV2aXNpb24gMTMzOTIyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50
LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgnLAorICAg
ICAgICAgICAgJ2xvYWRlci9Db29raWVKYXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Nyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0RvY3Vt
ZW50TG9hZFRpbWluZy5oJywKICAgICAgICAgICAgICdsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaCcs
CkBAIC0yNzMsNyArMjc0LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ29va2llLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL0Nvb2tpZUphci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ3Vyc29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RhdGVDb21wb25l
bnRzLmgnLApAQCAtMzEyLDYgKzMxMiw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZv
cm1Nb3VzZUV2ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9QbGF0Zm9ybUNvb2tpZUphci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oJywKQEAgLTI5NTUs
NiArMjk1Niw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5o
JywKICAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuY3BwJywKICAgICAgICAgICAg
ICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaCcsCisgICAgICAgICAgICAnbG9hZGVyL0Nvb2tpZUph
ci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3Bw
JywKICAgICAgICAgICAgICdsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgnLAogICAg
ICAgICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCcsCkBA
IC0zMDYyLDYgKzMwNjQsNyBAQAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jZi9SZXNvdXJjZUxvYWRlckNGTmV0LmNwcCcs
CiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJhd1Jlc291cmNlQ2hyb21pdW0u
Y3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vUmVzb3VyY2VMb2Fk
ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9TdWJyZXNvdXJj
ZUxvYWRlckNocm9taXVtLmNwcCcsCkBAIC01NDY2LDcgKzU0NjksNiBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21h
Yy9Db250ZXh0TWVudUl0ZW1NYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9Db250
ZXh0TWVudU1hYy5tbScsCi0gICAgICAgICAgICAncGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbScs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0N1cnNvck1hYy5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMv
RHJhZ0ltYWdlTWFjLm1tJywKQEAgLTU1ODQsNyArNTU4Niw2IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvY2hyb21pdW0vRE5TQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3
b3JrL2Nocm9taXVtL1Jlc291cmNlRXJyb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0
d29yay9jaHJvbWl1bS9SZXNvdXJjZUhhbmRsZS5jcHAnLApAQCAtNTYxMiw2ICs1NjEzLDcgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVD
dXJsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVudGljYXRp
b25NYWMubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1h
Yy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llU3RvcmFnZU1h
Yy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3Jh
Z2VNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3Ry
ZWFtTWFjLm1tJywKQEAgLTU2MjIsNiArNTYyNCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VSZXNwb25zZU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZv
cm0vbmV0d29yay9tYWMvV2ViQ29yZVVSTFJlc3BvbnNlLm1tJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9uZXR3b3JrL3F0L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9uZXR3b3JrL3F0L0NyZWRlbnRpYWxTdG9yYWdlUXQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9uZXR3b3JrL3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUHJpdmF0ZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUXQuY3BwJywK
QEAgLTU2NzIsNyArNTY3NSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvQ2xpcGJvYXJk
UXQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvQ29udGV4dE1lbnVJdGVtUXQuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9x
dC9DdXJzb3JRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAnLApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEz
MzkyMikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzQxNSw2ICsyNzQxNSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ29va2llSmFyLmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENv
b2tpZUphci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxsb2FkZXJcQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CkBAIC0yODI4NywxMCArMjgyOTUsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxDb29raWVKYXIuaCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29va2llc1N0
cmF0ZWd5LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMzI1MTgsNiArMzI1MjIsMTAgQEAKIAkJ
CQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXG5ldHdvcmtcUGxhdGZvcm1Db29raWVKYXIuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcUHJvdGVjdGlv
blNwYWNlLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMzkyMikK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzI3MSw4ICszMjcxLDYgQEAKIAkJOTM1MDBGMzIxM0ZERTNCRTAwOTlF
QzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzUwMEYzMTEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxl
ckltcERldGFpbHMuaCAqLzsgfTsKIAkJOTM1MjA3QkUwOUJENDEwQTAwRjIwMzhEIC8qIExvY2Fs
aXplZFN0cmluZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzNTIwN0JEMDlCRDQxMEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM1MjA4NDUwOUJE
NDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM1MjA4NDQwOUJENDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1t
ICovOyB9OwotCQk5MzUyMDg3NzA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MjA4NzYwOUJENDUz
NDAwRjIwMzhEIC8qIENvb2tpZUphci5tbSAqLzsgfTsKLQkJOTM1MjA4ODIwOUJENDVFOTAwRjIw
MzhEIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTM1MjA4ODEwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzNTM2NzZCMDlBRUQ4
OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MzY3NkEwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZp
ZXdNYWMubW0gKi87IH07CiAJCTkzNUM0NzYzMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzVDNDc2MjA5QUM0Q0U2MDBBNkFBQjQgLyogTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cy5oICovOyB9OwogCQk5MzVDNDc2ODA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZv
cm1LZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzVDNDc2NjA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYw
NDcsNiArNjA0NSwxMCBAQAogCQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNv
bHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTM5ODY2MTE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi87IH07CiAJCUUx
Mzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUg
LyogU3R5bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyog
Q29va2llU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1t
ICovOyB9OworCQlFMTQyNEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29raWVKYXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0Qzg5
MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyB9OworCQlFMTQyNEM5
MDE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDOEYxNjRCNDYwQjAwRjMyRDQwIC8qIENv
b2tpZUphck1hYy5tbSAqLzsgfTsKKwkJRTE0MjRDOTMxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tp
ZUphci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTQyNEM5MTE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCAqLzsgfTsKKwkJRTE0MjRD
OTQxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDOTIxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tp
ZUphci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUUxNEYxQzQ0MTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NEYxQzQyMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
LmNwcCAqLzsgfTsKIAkJRTE0RjFDNDUxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNEYxQzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRTE1QTM2RDcxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNUEzNkQ2MTEwNDU3MjAw
MEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi87IH07CkBAIC0xMDQ5Niw4ICsxMDQ5OCw2IEBACiAJ
CTkzNTAwRjMxMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOU1Njcm9sbGVySW1wRGV0YWlscy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzUyMDdCRDA5QkQ0MTBBMDBGMjAzOEQgLyogTG9j
YWxpemVkU3RyaW5ncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbGl6
ZWRTdHJpbmdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNTIwODQ0MDlCRDQz
QjkwMEYyMDM4RCAvKiBMYW5ndWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IExhbmd1YWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MzUy
MDg3NjA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2llSmFyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5MzUyMDg4MTA5QkQ0NUU5MDBGMjAzOEQgLyogQ29va2llSmFyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvb2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzUzNjc2QTA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbFZpZXdNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNUM0NzYyMDlBQzRDRTYwMEE2QUFCNCAv
KiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM1QzQ3NjYwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNDQ4LDYgKzEzNDQ4
LDEwIEBACiAJCUUxMzk4NjYyMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tpZVN0
b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llU3RvcmFnZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTNGMDFGMDEyNzBFMTkwMDBERkJBNzEg
LyogQ29va2llU3RvcmFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IENvb2tpZVN0b3JhZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUNvb2tpZUphci5oOyBwYXRoID0gbmV0
d29yay9QbGF0Zm9ybUNvb2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2llSmFyTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMTQyNEM5MTE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvb2tpZUphci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNDI0QzkyMTY0QjUyQzgwMEYzMkQ0MCAvKiBD
b29raWVKYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llSmFyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNEYxQzQyMTRCNURBQzYwMEVBOTAwOSAv
KiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTRGMUM0MzE0QjVEQUM2MDBFQTkwMDkgLyog
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxNUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTE5TTmFtZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NzEzLDYgKzE1NzE3LDcgQEAKIAkJCQk1MTRDNzY0
NDBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMuaCAqLywKIAkJCQk1MTRDNzY0
NTBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMubW0gKi8sCiAJCQkJMUE3RkE2
NDcwRERBM0NCQTAwMjhGOEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVyTWFjLmNwcCAqLywKKwkJ
CQlFMTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovLAogCQkJCTUx
NEM3NjQ2MENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZUVycm9yTWFjLm1tICovLAogCQkJCTUx
NEM3NjQ3MENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZU1hYy5tbSAqLywKIAkJCQk1
MTRDNzY0OTBDRTkyMzRFMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0TWFjLm1tICovLApAQCAt
MTU3MzUsNyArMTU3NDAsNiBAQAogCQkJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlw
Ym9hcmRNYWMubW0gKi8sCiAJCQkJMDYwMjdDQjIwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRleHRN
ZW51SXRlbU1hYy5tbSAqLywKIAkJCQk5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4
dE1lbnVNYWMubW0gKi8sCi0JCQkJOTM1MjA4NzYwOUJENDUzNDAwRjIwMzhEIC8qIENvb2tpZUph
ci5tbSAqLywKIAkJCQlGNTg3ODRGMDAyREUzNzU5MDFFQTQxMjIgLyogQ3Vyc29yTWFjLm1tICov
LAogCQkJCTVEOEM0REJEMTQyODIyMkMwMDI2Q0U3MiAvKiBEaXNwbGF5U2xlZXBEaXNhYmxlci5j
cHAgKi8sCiAJCQkJNUQ4QzREQkUxNDI4MjIyQzAwMjZDRTcyIC8qIERpc3BsYXlTbGVlcERpc2Fi
bGVyLmggKi8sCkBAIC0yMDY5Niw2ICsyMDcwMCw4IEBACiAJCQkJRTFDNDE2MTYwRjY1NjMxODAw
OTJEMkZCIC8qIENyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgKi8sCiAJCQkJNEZDODUzNDkx
NjQ0MjcxQjAwRDFDMjc1IC8qIENhY2hlZE1ldGFkYXRhLmNwcCAqLywKIAkJCQk0RkM4NTM0QTE2
NDQyNzFCMDBEMUMyNzUgLyogQ2FjaGVkTWV0YWRhdGEuaCAqLywKKwkJCQlFMTQyNEM5MTE2NEI1
MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCAqLywKKwkJCQlFMTQyNEM5MjE2NEI1MkM4MDBG
MzJENDAgLyogQ29va2llSmFyLmggKi8sCiAJCQkJRTFDNDE2MTEwRjY1NjJGRDAwOTJEMkZCIC8q
IENyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oICovLAogCQkJCUUxQzQxNUREMEY2NTVEN0MwMDky
RDJGQiAvKiBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCAqLywKIAkJCQlFMUM0
MTVEOTBGNjU1RDZGMDA5MkQyRkIgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5o
ICovLApAQCAtMjA4NjAsNyArMjA4NjYsNiBAQAogCQkJCTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3
QSAvKiBDb250ZXh0TWVudS5oICovLAogCQkJCTA2MDI3Q0FDMEIxQ0JGQzAwMDg4NEIyRCAvKiBD
b250ZXh0TWVudUl0ZW0uaCAqLywKIAkJCQlEOEI2MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29v
a2llLmggKi8sCi0JCQkJOTM1MjA4ODEwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oICov
LAogCQkJCTMzOUI1QjYyMTMxREFBMzIwMEY0OEQwMiAvKiBDb29raWVzU3RyYXRlZ3kuaCAqLywK
IAkJCQkyRTQzNDY1NjBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICov
LAogCQkJCTJFNDM0NjU3MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oICov
LApAQCAtMjA5MjMsNiArMjA5MjgsNyBAQAogCQkJCTk4RUIxRjk0MTMxM0ZFMDUwMEQwRTFFQSAv
KiBOb3RJbXBsZW1lbnRlZC5oICovLAogCQkJCTRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQ
YXN0ZWJvYXJkLmggKi8sCiAJCQkJQzVGNzY1QjQxNEUxRDQxNDAwNkM4OTlCIC8qIFBhc3RlYm9h
cmRTdHJhdGVneS5oICovLAorCQkJCUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9y
bUNvb2tpZUphci5oICovLAogCQkJCUJDNUM3NjI4MTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9y
bUV2ZW50LmNwcCAqLywKIAkJCQlCQzVDNzYyOTE0OTdGRTE0MDBCQzQ3NzUgLyogUGxhdGZvcm1F
dmVudC5oICovLAogCQkJCUE3MjNGNzdBMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9y
dE1hY3Jvcy5oICovLApAQCAtMjI2MjcsNyArMjI2MzMsNiBAQAogCQkJCTdBREU3MjI2MTBDQkJC
OUIwMDZCM0IzQSAvKiBDb250ZXh0TWVudVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RDMxNjAyOTEyQjAyNjc2MDBDMUEzNTkgLyogQ29udm9sdmVyTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRDhCNjE1MkYxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJOTM1MjA4ODIwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzM5QjVCNjMxMzFEQUEzMjAwRjQ4RDAyIC8qIENvb2tpZXNTdHJhdGVneS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzNEMDIxMkQxMzFEQjM3QjAwNDA5MUE4IC8qIENvb2tpZVN0b3Jh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFRTY4NDY0MTJEMjZFMzgwMEU3OTQxNSAvKiBDb29r
aWVTdG9yYWdlQ0ZOZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2ODcsNiArMjU2OTIsOCBAQAog
CQkJCTNGRkZGOUE5MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzQzM4QkZGMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDMzhDMDMxNjQ0NzNERDAwMDkx
RUIyIC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxNDI0
QzhBMTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTE0MjRDOTQxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxMURDQjExNjRDMzlBODAwRDQ5QkMxIC8qIFdpZHRoQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwpAQCAtMjYyMDYsNyArMjYyMTMsNiBAQAogCQkJCTA2MDI3Q0IzMEIxQ0MwM0QwMDg4NEIyRCAv
KiBDb250ZXh0TWVudUl0ZW1NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0I2QTBFQTBCMEJD
QTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGRDMx
NjAyODEyQjAyNjc2MDBDMUEzNTkgLyogQ29udm9sdmVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk5MzUyMDg3NzA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0VFNjg0NjIxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZUphckNGTmV0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdFRTY4NDYzMTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9y
YWdlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEzRjAxRjExMjcwRTE5MDAwREZCQTcx
IC8qIENvb2tpZVN0b3JhZ2VNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTI4Nzc0LDYgKzI4Nzgw
LDggQEAKIAkJCQk5M0MzOEJGRTE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhl
ZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNDMzhDMDQxNjQ0NzNERDAwMDkxRUIyIC8q
IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk0RkM4NTM0QzE2
NDQyNzIzMDBEMUMyNzUgLyogQ2FjaGVkTWV0YWRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RTE0MjRDOTAxNjRCNDYwQjAwRjMyRDQwIC8qIENvb2tpZUphck1hYy5tbSBpbiBTb3VyY2VzICov
LAorCQkJCUUxNDI0QzkzMTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNvb2tpZUphci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCisKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNlcnJvciBDaHJvbWl1bSBhbmQgQmxhY2tiZXJy
eSBjdXJyZW50bHkgdXNlIGEgZm9yayBvZiB0aGlzIGZpbGUgYmVjYXVzZSBvZiBsYXllcmluZyB2
aW9sYXRpb25zCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgTmV0d29y
a2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkK
K3sKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZSogZnJh
bWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOworICAgIGlmICgh
bG9hZGVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5n
Q29udGV4dCgpOworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gY29va2llc0ZvckRPTShuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmwp
OworfQorCit2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQoreworICAgIHNldENvb2tpZXNGcm9tRE9N
KG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29r
aWVzKCksIHVybCwgY29va2llU3RyaW5nKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGNvb2tpZXNFbmFibGVkKG5ldHdv
cmtpbmdDb250ZXh0KGRvY3VtZW50KSk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK3sK
KyAgICByZXR1cm4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUobmV0d29ya2luZ0NvbnRl
eHQoZG9jdW1lbnQpLCB1cmwpOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBjb29raWVzKQor
eworICAgIHJldHVybiBnZXRSYXdDb29raWVzKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwg
dXJsLCBjb29raWVzKTsKK30KKwordm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3sKKyAg
ICBkZWxldGVDb29raWUobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZU5h
bWUpOworfQorCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYg
aG9zdG5hbWVzKQoreworICAgIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKDAsIGhvc3RuYW1lcyk7
Cit9CisKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5h
bWUpCit7CisgICAgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKDAsIGhvc3RuYW1lKTsKK30KKwor
dm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICBkZWxldGVBbGxDb29raWVzKDApOworfQor
Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFy
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Db29raWVKYXIuaAkocmV2aXNpb24gMTMzNzA1KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaDoxMzM3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ29va2llSmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29raWVKYXJfaAorI2RlZmluZSBDb29raWVKYXJfaAor
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEtVUkw7CitzdHJ1
Y3QgQ29va2llOworCisvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBkb2N1bWVudC5j
b29raWUgQVBJLCB3aXRoIHNwZWNpYWwgcnVsZXMgZm9yIEh0dHBPbmx5IGNvb2tpZXMuCitTdHJp
bmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKK3ZvaWQgc2V0Q29va2ll
cyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKworLy8gVGhlc2UgbWV0
aG9kcyB1c2UgY3VycmVudCBjb29raWUgc3RvcmFnZSwgdGh1cyB0YWtpbmcgcHJpdmF0ZSBicm93
c2luZyBtb2RlIGludG8gYWNjb3VudC4KK2Jvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1l
bnQqKTsKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmKTsKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwordm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisKKy8vIFRoZXNlIGZ1bmN0aW9u
cyBhbHdheXMgYWNjZXNzIGRlZmF1bHQgY29va2llIHN0b3JhZ2UsIG5vdCB0YWtpbmcgcHJpdmF0
ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4KK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwordm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7Cit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsK
KworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmgJKHJldmlzaW9u
IDEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA2LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksMTMgKzM5LDEzIEBAIHN0cnVjdCBDb29r
aWU7CiAKIC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgaW1wbGVtZW50IGRvY3VtZW50LmNvb2tpZSBB
UEksIHdpdGggc3BlY2lhbCBydWxlcyBmb3IgSHR0cE9ubHkgY29va2llcy4KIFN0cmluZyBjb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotdm9pZCBzZXRDb29raWVzKERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwordm9pZCBzZXRDb29raWVzKERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKTsKIAogLy8gVGhl
c2UgbWV0aG9kcyB1c2UgY3VycmVudCBjb29raWUgc3RvcmFnZSwgdGh1cyB0YWtpbmcgcHJpdmF0
ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4KIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3Qg
RG9jdW1lbnQqKTsKIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmKTsKIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotdm9pZCBkZWxldGVDb29raWUoY29u
c3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Cit2b2lkIGRlbGV0ZUNv
b2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5h
bWUpOwogCiAvLyBUaGVzZSBmdW5jdGlvbnMgYWx3YXlzIGFjY2VzcyBkZWZhdWx0IGNvb2tpZSBz
dG9yYWdlLCBub3QgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQuCiB2
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVy
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9ibGFja2JlcnJ5L0Nv
b2tpZUphckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMzM3MDUpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHA6MTMzNzA1KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3Jj
aCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC0yMDExLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIK
KworI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnRCbGFja0JlcnJ5LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cExvYWRE
ZWZlcnJlci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmluZyBjb29raWVzKERvY3VtZW50
IGNvbnN0KiBkb2N1bWVudCwgS1VSTCBjb25zdCYgdXJsKQoreworICAgIEZyYW1lKiBmcmFtZSA9
IGRvY3VtZW50LT5mcmFtZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdl
KCkgOiAwOworCisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICBpZiAoIShmcmFtZSAmJiBmcmFtZS0+bG9hZGVyKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmICghc3RhdGljX2Nhc3Q8
RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSkt
PmNvb2tpZXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIEFTU0VS
VChkb2N1bWVudCAmJiB1cmwgPT0gZG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKKyAgICAvLyAnSHR0
cE9ubHknIGNvb2tpZXMgc2hvdWxkIG5vIGJlIGFjY2Vzc2libGUgZnJvbSBzY3JpcHRzLCBzbyB3
ZSBmaWx0ZXIgdGhlbSBvdXQgaGVyZQorICAgIHJldHVybiBjb29raWVNYW5hZ2VyKCkuZ2V0Q29v
a2llKHVybCwgTm9IdHRwT25seUNvb2tpZSk7Cit9CisKK3ZvaWQgc2V0Q29va2llcyhEb2N1bWVu
dCogZG9jdW1lbnQsIEtVUkwgY29uc3QmIHVybCwgU3RyaW5nIGNvbnN0JiB2YWx1ZSkKK3sKKyAg
ICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBQYWdlKiBwYWdlID0gZnJh
bWUgPyBmcmFtZS0+cGFnZSgpIDogMDsKKworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCEoZnJhbWUgJiYgZnJhbWUtPmxvYWRlcigpICYmIGZyYW1lLT5sb2FkZXIo
KS0+Y2xpZW50KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXN0YXRpY19jYXN0PEZy
YW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5j
b29raWVzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoZG9jdW1lbnQg
JiYgdXJsID09IGRvY3VtZW50LT5jb29raWVVUkwoKSk7CisgICAgY29va2llTWFuYWdlcigpLnNl
dENvb2tpZXModXJsLCB2YWx1ZSwgTm9IdHRwT25seUNvb2tpZSk7Cit9CisKK2Jvb2wgY29va2ll
c0VuYWJsZWQoRG9jdW1lbnQgY29uc3QqKQoreworICAgIC8vIEZJWE1FLiBDdXJyZW50bHkgY29v
a2llIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgbm8gc2V0dGluZyBvbiBwcm9wZXJ0eSBwYWdlLgor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQor
eworICAgIFZlY3RvcjxQYXJzZWRDb29raWUqPiByZXN1bHQ7CisgICAgY29va2llTWFuYWdlcigp
LmdldFJhd0Nvb2tpZXMocmVzdWx0LCB1cmwsIFdpdGhIdHRwT25seUNvb2tpZXMpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgaSsrKQorICAgICAgICByZXN1bHRb
aV0tPmFwcGVuZFdlYkNvcmVDb29raWUocmF3Q29va2llcyk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgLy8gQ29va2llcyBhcmUg
bm90IGJvdW5kIHRvIHRoZSBkb2N1bWVudC4gVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIHRvIHBh
c3MKKyAgICAvLyBpbiB0aGUgZG9jdW1lbnQgb2JqZWN0IHRvIGZpbmQgdGhlIHRhcmdldGVkIGNv
b2tpZXMgaW4gY29va2llIG1hbmFnZXIuCisgICAgY29va2llTWFuYWdlcigpLnJlbW92ZUNvb2tp
ZVdpdGhOYW1lKHVybCwgY29va2llTmFtZSk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkK
K3sKKyAgICBBU1NFUlQoZG9jdW1lbnQpOworCisgICAgaWYgKCEoZG9jdW1lbnQtPmZyYW1lKCkg
JiYgZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpICYmIGRvY3VtZW50LT5mcmFtZSgpLT5sb2Fk
ZXIoKS0+Y2xpZW50KCkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAoIXN0
YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KGRvY3VtZW50LT5mcmFtZSgp
LT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5jb29raWVzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICByZXR1cm4gY29va2llTWFuYWdlcigpLmdldENvb2tpZSh1cmwsIFdp
dGhIdHRwT25seUNvb2tpZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJC
bGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMzNzA1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDYgKzM1LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogVW5mb3JrLiBU
aGlzIGZpbGUgaXMgZm9ya2VkIGJlY2F1c2UgYWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgTmV0d29y
a2luZ0NvbnRleHQgdG8gYWNjZXNzIGNvb2tpZSBqYXIsIG5vdCBEb2N1bWVudCBvciBGcmFtZS4K
KwogU3RyaW5nIGNvb2tpZXMoRG9jdW1lbnQgY29uc3QqIGRvY3VtZW50LCBLVVJMIGNvbnN0JiB1
cmwpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDEzMzcwNSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHA6MTMzNzA1KQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29raWVK
YXIuaCIKKworI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBz
ZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwg
dXJsLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tp
ZXMoZG9jdW1lbnQsIHVybCk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBy
ZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1
bWVudCwgdXJsKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoZG9j
dW1lbnQpOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIHJl
dHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2ll
cyk7Cit9CisKK3ZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgcmV0dXJuIFBs
YXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOwor
fQorCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5h
bWVzKQoreworICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCit9CisKK3ZvaWQgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK30KKwordm9pZCBkZWxldGVBbGxDb29raWVzKCkK
K3sKKyAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFy
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1
bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzMzcwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDYgKzM3LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogVW5m
b3JrLiBUaGlzIGZpbGUgaXMgZm9ya2VkIGJlY2F1c2UgYWxsIG90aGVyIHBsYXRmb3JtcyB1c2Ug
TmV0d29ya2luZ0NvbnRleHQgdG8gYWNjZXNzIGNvb2tpZSBqYXIsIG5vdCBEb2N1bWVudCBvciBG
cmFtZS4KKwogdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29v
a2llcyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db29raWVKYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29r
aWVKYXIuaAkocmV2aXNpb24gMTMzOTIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29v
a2llSmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBDb29raWVKYXJfaAotI2RlZmluZSBDb29raWVKYXJfaAotCi0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEtVUkw7Ci1zdHJ1Y3QgQ29va2ll
OwotCi0vLyBUaGVzZSB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBkb2N1bWVudC5jb29raWUgQVBJ
LCB3aXRoIHNwZWNpYWwgcnVsZXMgZm9yIEh0dHBPbmx5IGNvb2tpZXMuCi1TdHJpbmcgY29va2ll
cyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKLQotLy8gVGhlc2UgbWV0aG9kcyB1c2Ug
Y3VycmVudCBjb29raWUgc3RvcmFnZSwgdGh1cyB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2Rl
IGludG8gYWNjb3VudC4KLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLVN0
cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmKTsKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
LCBWZWN0b3I8Q29va2llPiYpOwotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0KLS8vIFRoZXNlIGZ1bmN0aW9ucyBhbHdheXMg
YWNjZXNzIGRlZmF1bHQgY29va2llIHN0b3JhZ2UsIG5vdCB0YWtpbmcgcHJpdmF0ZSBicm93c2lu
ZyBtb2RlIGludG8gYWNjb3VudC4KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpOwotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29u
c3QgU3RyaW5nJiBob3N0bmFtZSk7Ci12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKLQotfQotCi0j
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llSmFy
QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxh
Y2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMzOTIyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1v
YmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLTIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotCi0j
aW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudEJsYWNrQmVycnkuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwTG9hZERlZmVy
cmVyLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU3RyaW5nIGNvb2tpZXMoRG9jdW1lbnQgY29u
c3QqIGRvY3VtZW50LCBLVVJMIGNvbnN0JiB1cmwpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQtPmZyYW1lKCk7Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6
IDA7Ci0KLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlm
ICghKGZyYW1lICYmIGZyYW1lLT5sb2FkZXIoKSAmJiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgp
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKCFzdGF0aWNfY2FzdDxGcmFt
ZUxvYWRlckNsaWVudEJsYWNrQmVycnkqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+Y29v
a2llc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgQVNTRVJUKGRv
Y3VtZW50ICYmIHVybCA9PSBkb2N1bWVudC0+Y29va2llVVJMKCkpOwotICAgIC8vICdIdHRwT25s
eScgY29va2llcyBzaG91bGQgbm8gYmUgYWNjZXNzaWJsZSBmcm9tIHNjcmlwdHMsIHNvIHdlIGZp
bHRlciB0aGVtIG91dCBoZXJlCi0gICAgcmV0dXJuIGNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWUo
dXJsLCBOb0h0dHBPbmx5Q29va2llKTsKLX0KLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBk
b2N1bWVudCwgS1VSTCBjb25zdCYgdXJsLCBTdHJpbmcgY29uc3QmIHZhbHVlKQotewotICAgIEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSA/
IGZyYW1lLT5wYWdlKCkgOiAwOwotCi0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIShmcmFtZSAmJiBmcmFtZS0+bG9hZGVyKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc3RhdGljX2Nhc3Q8RnJhbWVM
b2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPmNvb2tp
ZXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChkb2N1bWVudCAmJiB1
cmwgPT0gZG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKLSAgICBjb29raWVNYW5hZ2VyKCkuc2V0Q29v
a2llcyh1cmwsIHZhbHVlLCBOb0h0dHBPbmx5Q29va2llKTsKLX0KLQotYm9vbCBjb29raWVzRW5h
YmxlZChEb2N1bWVudCBjb25zdCopCi17Ci0gICAgLy8gRklYTUUuIEN1cnJlbnRseSBjb29raWUg
aXMgZW5hYmxlZCBieSBkZWZhdWx0LCBubyBzZXR0aW5nIG9uIHByb3BlcnR5IHBhZ2UuCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0g
ICAgVmVjdG9yPFBhcnNlZENvb2tpZSo+IHJlc3VsdDsKLSAgICBjb29raWVNYW5hZ2VyKCkuZ2V0
UmF3Q29va2llcyhyZXN1bHQsIHVybCwgV2l0aEh0dHBPbmx5Q29va2llcyk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJlc3VsdFtpXS0+
YXBwZW5kV2ViQ29yZUNvb2tpZShyYXdDb29raWVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICAvLyBDb29raWVzIGFyZSBub3Qg
Ym91bmQgdG8gdGhlIGRvY3VtZW50LiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8gcGFzcwot
ICAgIC8vIGluIHRoZSBkb2N1bWVudCBvYmplY3QgdG8gZmluZCB0aGUgdGFyZ2V0ZWQgY29va2ll
cyBpbiBjb29raWUgbWFuYWdlci4KLSAgICBjb29raWVNYW5hZ2VyKCkucmVtb3ZlQ29va2llV2l0
aE5hbWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQotewot
ICAgIEFTU0VSVChkb2N1bWVudCk7Ci0KLSAgICBpZiAoIShkb2N1bWVudC0+ZnJhbWUoKSAmJiBk
b2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkgJiYgZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigp
LT5jbGllbnQoKSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmICghc3RhdGlj
X2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZG9jdW1lbnQtPmZyYW1lKCktPmxv
YWRlcigpLT5jbGllbnQoKSktPmNvb2tpZXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIHJldHVybiBjb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llKHVybCwgV2l0aEh0
dHBPbmx5Q29va2llcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkocmV2aXNpb24gMTMzOTIyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5KQpA
QCAtMSwxOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJDb29raWVKYXIuaCIKLQotI2lmICFVU0UoQ0ZORVRXT1JLKQotCi0j
aW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkNvb2tpZS5oIgotI2ltcG9ydCAi
Q29va2llU3RvcmFnZS5oIgotI2ltcG9ydCAiQ29va2llU3RvcmFnZUNGTmV0LmgiCi0jaW1wb3J0
ICJEb2N1bWVudC5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2ll
cyhOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcykKLXsKLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0g
W3VuZmlsdGVyZWRDb29raWVzIGNvdW50XTsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+
IGZpbHRlcmVkQ29va2llcyhBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5OmNvdW50XSk7Ci0KLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAq
KVt1bmZpbHRlcmVkQ29va2llcyBvYmplY3RBdEluZGV4OmldOwotCi0gICAgICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0
b3JlIGFuIGVtcHR5IGNvb2tpZSwKLSAgICAgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAi
Q29va2llOiA9Ii4gV2UgaGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29va2llcygpIHRvIHByZXZl
bnQKLSAgICAgICAgLy8gdGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBhdm9pZCBzZW5kaW5nIGNv
b2tpZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKLSAgICAgICAgLy8gdGhlcmUn
cyBubyBoYXJtIHRvIGRvaW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNoIGEgY29va2llIGlzIG5l
dmVyIHZhbGlkLgotICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoW2Nvb2tpZSBpc0hUVFBPbmx5XSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgYWRkT2Jq
ZWN0OmNvb2tpZV07Ci0gICAgfQotCi0gICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKLX0KLQot
U3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdr
SFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJs
KTsKLSAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxkc1dpdGhDb29r
aWVzOmZpbHRlckNvb2tpZXMoY29va2llcykuZ2V0KCldIG9iamVjdEZvcktleTpAIkNvb2tpZSJd
OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOwotICAgIHJldHVybiBbW05TSFRUUENvb2tp
ZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6Y29va2llc10gb2JqZWN0Rm9yS2V5OkAi
Q29va2llIl07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKLXsKLSAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAu
NSwgTlNIVFRQQ29va2llU3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCi0gICAg
Ly8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KLSAgICBpZiAoY29va2llU3Ry
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+Ci0gICAgLy8gY29v
a2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91
dCBhIHZhbHVlCi0gICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZVN0ci5jb250YWlucygn
PScpID8gY29va2llU3RyIDogY29va2llU3RyICsgIj0iOwotCi0gICAgTlNVUkwgKmNvb2tpZVVS
TCA9IHVybDsKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29raWVzID0gZmlsdGVy
Q29va2llcyhbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHM6W05T
RGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcgZm9yS2V5OkAiU2V0
LUNvb2tpZSJdIGZvclVSTDpjb29raWVVUkxdKTsKLSAgICBBU1NFUlQoW2ZpbHRlcmVkQ29va2ll
cy5nZXQoKSBjb3VudF0gPD0gMSk7Ci0KLSAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGN1cnJl
bnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29v
a2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0KLSAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3Vt
ZW50KikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0hUVFBD
b29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nhc3Q8TlNIVFRQ
Q29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSkpOwotICAgIHJldHVybiBjb29raWVBY2NlcHRQb2xp
Y3kgPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIHx8IGNvb2tpZUFjY2VwdFBvbGlj
eSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsK
LQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZl
Y3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0g
d2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1
cmwpOwotICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07Ci0gICAgcmF3Q29v
a2llcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQ
Q29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgTlNUaW1lSW50ZXJ2
YWwgZXhwaXJlcyA9IFtbY29va2llIGV4cGlyZXNEYXRlXSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBd
ICogMTAwMDsKLSAgICAgICAgcmF3Q29va2llcy51bmNoZWNrZWRBcHBlbmQoQ29va2llKFtjb29r
aWUgbmFtZV0sIFtjb29raWUgdmFsdWVdLCBbY29va2llIGRvbWFpbl0sIFtjb29raWUgcGF0aF0s
IGV4cGlyZXMsCi0gICAgICAgICAgICBbY29va2llIGlzSFRUUE9ubHldLCBbY29va2llIGlzU2Vj
dXJlXSwgW2Nvb2tpZSBpc1Nlc3Npb25Pbmx5XSkpOwotICAgIH0KLQotICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2ll
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5h
bWUpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNVUkwgKmNv
b2tpZVVSTCA9IHVybDsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7Ci0gICAgTlNBcnJheSAq
Y29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2ll
VVJMKTsKLQotICAgIE5TU3RyaW5nICpjb29raWVOYW1lU3RyaW5nID0gY29va2llTmFtZTsKLQot
ICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07Ci0gICAgZm9yIChOU1VJbnRl
Z2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tp
ZSA9IChOU0hUVFBDb29raWUgKilbY29va2llcyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBp
ZiAoW1tjb29raWUgbmFtZV0gaXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5hbWVTdHJpbmddKQotICAg
ICAgICAgICAgd2tEZWxldGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7
Ci0gICAgfQotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tI
VFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKTsKLSAgICAKLSAg
ICBmb3IgKE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpCi0gICAgICAgIGhvc3RuYW1l
cy5hZGQoW2Nvb2tpZSBkb21haW5dKTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llcyhj
b29raWVTdG9yYWdlLmdldCgpKTsKLSAgICBpZiAoIWNvb2tpZXMpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBmb3IgKE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpIHsKLSAgICAg
ICAgaWYgKGhvc3RuYW1lID09IFN0cmluZyhbY29va2llIGRvbWFpbl0pKQotICAgICAgICAgICAg
d2tEZWxldGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7Ci0gICAgfQot
ICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXZvaWQgZGVsZXRlQWxs
Q29va2llcygpCi17Ci0gICAgd2tEZWxldGVBbGxIVFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQQ29v
a2llU3RvcmFnZSgpLmdldCgpKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gIVVTRShDRk5FVFdPUksp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2llSmFy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9y
bUNvb2tpZUphci5oCShyZXZpc2lvbiAxMzM3MDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0Nvb2tpZUphci5oOjEzMzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUGxhdGZvcm1Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvb2tpZUphcl9oCisjZGVmaW5lIENvb2tpZUph
cl9oCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgS1VSTDsK
K3N0cnVjdCBDb29raWU7CisKKy8vIFRoZXNlIHR3byBmdW5jdGlvbnMgaW1wbGVtZW50IGRvY3Vt
ZW50LmNvb2tpZSBBUEksIHdpdGggc3BlY2lhbCBydWxlcyBmb3IgSHR0cE9ubHkgY29va2llcy4K
K1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwordm9pZCBzZXRD
b29raWVzKERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworCisvLyBUaGVz
ZSBtZXRob2RzIHVzZSBjdXJyZW50IGNvb2tpZSBzdG9yYWdlLCB0aHVzIHRha2luZyBwcml2YXRl
IGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50LgorYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCopOworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYpOworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50
KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Cit2b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKworLy8gVGhlc2UgZnVu
Y3Rpb25zIGFsd2F5cyBhY2Nlc3MgZGVmYXVsdCBjb29raWUgc3RvcmFnZSwgbm90IHRha2luZyBw
cml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50Lgordm9pZCBnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7Cit2b2lkIGRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKK3ZvaWQgZGVsZXRlQWxsQ29va2ll
cygpOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9QbGF0Zm9ybUNvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaAkocmV2aXNpb24gMTMzNzA1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
Q29va2llSmFyX2gKLSNkZWZpbmUgQ29va2llSmFyX2gKKyNpZm5kZWYgUGxhdGZvcm1Db29raWVK
YXJfaAorI2RlZmluZSBQbGF0Zm9ybUNvb2tpZUphcl9oCiAKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0zMywyNCArMzMsMjAgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKIGNsYXNzIEtVUkw7CitjbGFzcyBO
ZXR3b3JraW5nQ29udGV4dDsKIHN0cnVjdCBDb29raWU7CiAKLS8vIFRoZXNlIHR3byBmdW5jdGlv
bnMgaW1wbGVtZW50IGRvY3VtZW50LmNvb2tpZSBBUEksIHdpdGggc3BlY2lhbCBydWxlcyBmb3Ig
SHR0cE9ubHkgY29va2llcy4KLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYpOwotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYpOwotCi0vLyBUaGVzZSBtZXRob2RzIHVzZSBjdXJyZW50IGNvb2tpZSBzdG9yYWdlLCB0
aHVzIHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50LgotYm9vbCBjb29r
aWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotYm9vbCBnZXRSYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci12b2lk
IGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
KTsKLQotLy8gVGhlc2UgZnVuY3Rpb25zIGFsd2F5cyBhY2Nlc3MgZGVmYXVsdCBjb29raWUgc3Rv
cmFnZSwgbm90IHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50Lgotdm9p
ZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7Ci12
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKLXZv
aWQgZGVsZXRlQWxsQ29va2llcygpOworLy8gSWYgbmV0d29ya2luZyBjb250ZXh0IGlzIG51bGws
IGRlZmF1bHQgY29va2llIHN0b3JhZ2UgaXMgdXNlZC4KK1N0cmluZyBjb29raWVzRm9yRE9NKE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYpOwor
dm9pZCBzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZp
cnN0UGFydHksIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKK2Jvb2wgY29va2llc0VuYWJs
ZWQoTmV0d29ya2luZ0NvbnRleHQqKTsKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmKTsKK2Jvb2wgZ2V0UmF3Q29va2ll
cyhOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwordm9p
ZCBkZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJik7Cit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0Kiwg
SGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwordm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKK3ZvaWQgZGVs
ZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCopOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3Bw
CShyZXZpc2lvbiAxMzM5MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L0Nvb2tpZUphckNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjQsMTMgKzI0LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkNvb2tpZUphci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAKICNpZiBVU0Uo
Q0ZORVRXT1JLKQogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llU3RvcmFn
ZUNGTmV0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgpAQCAtOTUs
MTggKzk0LDE4IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmlsdGVyQ29va2kKICAg
ICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIHNl
dENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVzIGFu
IGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KICAgICBp
ZiAodmFsdWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXRhaW5QdHI8Q0ZI
VFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0
b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRD
RkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0Q0YsIHVybC5jcmVh
dGVDRlVSTCgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVz
Q0YoQWRvcHRDRiwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkuY3JlYXRlQ0ZVUkwo
KSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFkb3B0
Q0YsIGZpcnN0UGFydHkuY3JlYXRlQ0ZVUkwoKSk7CiAKICAgICAvLyA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KICAgICAvLyBj
b29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3aXRo
b3V0IGEgdmFsdWUKQEAgLTEyMyw5ICsxMjIsOSBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zCiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29va2ll
U3RvcmFnZS5nZXQoKSwgZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpLmdldCgpLCB1cmxD
Ri5nZXQoKSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5nZXQoKSk7CiB9CiAKLVN0cmluZyBjb29r
aWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmlu
ZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiwg
Y29uc3QgS1VSTCYgdXJsKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2Uo
KTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApA
QCAtMTM3LDkgKzEzNiw5IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3Vt
ZW4KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNG
LmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0
cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAg
ICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRl
eHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0
b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIApAQCAtMTUxLDE4ICsxNTAsMTkgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbgogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
aGVhZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNv
bnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIGNvb2tpZXNFbmFibGVkKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xp
Y3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRv
Y3VtZW50RG9tYWluOwotICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCisgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7
CisgICAgaWYgKGNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHBvbGljeSA9IENGSFRUUENvb2tpZVN0
b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgcmV0
dXJuIHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21NYWlu
RG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xp
Y3lBbHdheXM7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tp
ZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENv
b2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDog
ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTkzLDkgKzE5Myw5IEBAIGJvb2wgZ2V0UmF3Q29v
a2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBk
ZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZI
VFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0
b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRD
RkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTIxNCw5ICsyMTQsOSBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1
bWVudCosIGNvbnN0CiAgICAgfQogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhh
c2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7
Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBk
ZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2ll
U3RvcmFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzIsOSArMjMyLDkgQEAgdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIH0KIH0KIAotdm9pZCBkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29r
aWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAg
ICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjUxLDkgKzI1MSw5
IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICB9CiB9CiAK
LXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWY+IGNvb2tpZVN0b3JhZ2UgPSBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJl
dGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9t
aXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTMzOTIyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQ29va2llSmFyLmgiCi0KLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tp
ZXMoZG9jdW1lbnQsIHVybCwgdmFsdWUpOwotfQotCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1T
dXBwb3J0Ojpjb29raWVzKGRvY3VtZW50LCB1cmwpOwotfQotCi1TdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7Ci19Ci0KLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tp
ZXNFbmFibGVkKGRvY3VtZW50KTsKLX0KLQotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2ll
cykKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1
cmwsIHJhd0Nvb2tpZXMpOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewot
ICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBj
b29raWVOYW1lKTsKLX0KLQotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0
cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAot
fQotCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQotewotICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCi19Ci0KLXZvaWQgZGVsZXRl
QWxsQ29va2llcygpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAkocmV2aXNpb24gMTMzOTIy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNSwxMCArMTUsOSBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tp
ZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yOCw1MCArMjcsNTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2llSmFyOwogCi12b2lkIHNl
dENvb2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQordm9pZCBzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCos
IGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKIH0KIAotU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5n
IGNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgS1VS
TCYgdXJsKQogewogICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAK
LVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypk
b2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgLy8g
RklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llLgogICAgIHJldHVybiBjb29raWVKYXIuZ2V0
KHVybC5zdHJpbmcoKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQq
IC8qZG9jdW1lbnQqLykKK2Jvb2wgY29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqKQog
ewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1l
bnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJh
d0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4m
IHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICBy
YXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVu
IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29u
dGV4dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQogewogICAgIC8vIEZJWE1FOiBOb3Qg
eWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdv
cmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgLy8gRklY
TUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICAvLyBG
SVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQor
dm9pZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KikKIHsKICAgICAvLyBGSVhN
RTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQkocmV2aXNpb24gMTMzNzA1KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tOjEzMzcwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDb29raWVKYXIuaCIKKworI2lmICFVU0UoQ0ZO
RVRXT1JLKQorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkNvb2tpZS5o
IgorI2ltcG9ydCAiQ29va2llU3RvcmFnZS5oIgorI2ltcG9ydCAiQ29va2llU3RvcmFnZUNGTmV0
LmgiCisjaW1wb3J0ICJEb2N1bWVudC5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFj
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4g
ZmlsdGVyQ29va2llcyhOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcykKK3sKKyAgICBOU1VJbnRl
Z2VyIGNvdW50ID0gW3VuZmlsdGVyZWRDb29raWVzIGNvdW50XTsKKyAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IGZpbHRlcmVkQ29va2llcyhBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OmNvdW50XSk7CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5T
SFRUUENvb2tpZSAqKVt1bmZpbHRlcmVkQ29va2llcyBvYmplY3RBdEluZGV4OmldOworCisgICAg
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9y
YWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKKyAgICAgICAgLy8gd2hpY2ggd291bGQg
YmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2UgaGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29va2ll
cygpIHRvIHByZXZlbnQKKyAgICAgICAgLy8gdGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBhdm9p
ZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKKyAgICAg
ICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRvaW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNoIGEg
Y29va2llIGlzIG5ldmVyIHZhbGlkLgorICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0
aF0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoW2Nvb2tpZSBpc0hUVFBP
bmx5XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFtmaWx0ZXJlZENvb2tpZXMu
Z2V0KCkgYWRkT2JqZWN0OmNvb2tpZV07CisgICAgfQorCisgICAgcmV0dXJuIGZpbHRlcmVkQ29v
a2llczsKK30KKworU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1
cmwpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJheSAq
Y29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2Uo
KS5nZXQoKSwgdXJsKTsKKyAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZp
ZWxkc1dpdGhDb29raWVzOmZpbHRlckNvb2tpZXMoY29va2llcykuZ2V0KCldIG9iamVjdEZvcktl
eTpAIkNvb2tpZSJdOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVS
TChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOworICAgIHJldHVybiBb
W05TSFRUUENvb2tpZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6Y29va2llc10gb2Jq
ZWN0Rm9yS2V5OkAiQ29va2llIl07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKK3sKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYz
Mjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBj
b29raWUsCisgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KKyAgICBp
ZiAoY29va2llU3RyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gPGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+
CisgICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNv
b2tpZXMgd2l0aG91dCBhIHZhbHVlCisgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZVN0
ci5jb250YWlucygnPScpID8gY29va2llU3RyIDogY29va2llU3RyICsgIj0iOworCisgICAgTlNV
UkwgKmNvb2tpZVVSTCA9IHVybDsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29r
aWVzID0gZmlsdGVyQ29va2llcyhbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFk
ZXJGaWVsZHM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcg
Zm9yS2V5OkAiU2V0LUNvb2tpZSJdIGZvclVSTDpjb29raWVVUkxdKTsKKyAgICBBU1NFUlQoW2Zp
bHRlcmVkQ29va2llcy5nZXQoKSBjb3VudF0gPD0gMSk7CisKKyAgICB3a1NldEhUVFBDb29raWVz
Rm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIGZpbHRlcmVkQ29va2ll
cy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisK
KyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitib29sIGNvb2tpZXNFbmFibGVk
KGNvbnN0IERvY3VtZW50KikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisK
KyAgICBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGlj
X2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSkpOworICAgIHJldHVybiBjb29r
aWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIHx8IGNvb2tp
ZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1
bWVudERvbWFpbjsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIHJhd0Nvb2tpZXMu
Y2xlYXIoKTsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5
ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpLmdldCgpLCB1cmwpOworICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07
CisgICAgcmF3Q29va2llcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOworICAgIGZvciAoTlNVSW50
ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNIVFRQQ29va2llICpjb29r
aWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAg
TlNUaW1lSW50ZXJ2YWwgZXhwaXJlcyA9IFtbY29va2llIGV4cGlyZXNEYXRlXSB0aW1lSW50ZXJ2
YWxTaW5jZTE5NzBdICogMTAwMDsKKyAgICAgICAgcmF3Q29va2llcy51bmNoZWNrZWRBcHBlbmQo
Q29va2llKFtjb29raWUgbmFtZV0sIFtjb29raWUgdmFsdWVdLCBbY29va2llIGRvbWFpbl0sIFtj
b29raWUgcGF0aF0sIGV4cGlyZXMsCisgICAgICAgICAgICBbY29va2llIGlzSFRUUE9ubHldLCBb
Y29va2llIGlzU2VjdXJlXSwgW2Nvb2tpZSBpc1Nlc3Npb25Pbmx5XSkpOworICAgIH0KKworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGNvb2tpZU5hbWUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisg
ICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7Cisg
ICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5n
ZXQoKSwgY29va2llVVJMKTsKKworICAgIE5TU3RyaW5nICpjb29raWVOYW1lU3RyaW5nID0gY29v
a2llTmFtZTsKKworICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07CisgICAg
Zm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0hUVFBD
b29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbY29va2llcyBvYmplY3RBdEluZGV4Omld
OworICAgICAgICBpZiAoW1tjb29raWUgbmFtZV0gaXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5hbWVT
dHJpbmddKQorICAgICAgICAgICAgd2tEZWxldGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0
KCksIGNvb2tpZSk7CisgICAgfQorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30K
Kwordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5ICpj
b29raWVzID0gd2tIVFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgp
KTsKKyAgICAKKyAgICBmb3IgKE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpCisgICAg
ICAgIGhvc3RuYW1lcy5hZGQoW2Nvb2tpZSBkb21haW5dKTsKKyAgICAKKyAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0g
ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tI
VFRQQ29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKKyAgICBpZiAoIWNvb2tpZXMpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tp
ZXMpIHsKKyAgICAgICAgaWYgKGhvc3RuYW1lID09IFN0cmluZyhbY29va2llIGRvbWFpbl0pKQor
ICAgICAgICAgICAgd2tEZWxldGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tp
ZSk7CisgICAgfQorICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3Zv
aWQgZGVsZXRlQWxsQ29va2llcygpCit7CisgICAgd2tEZWxldGVBbGxIVFRQQ29va2llcyhkZWZh
dWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKTsKK30KKworfQorCisjZW5kaWYgLy8gIVVT
RShDRk5FVFdPUkspCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9D
b29raWVKYXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvQ29va2llSmFyTWFjLm1tCShyZXZpc2lvbiAxMzM3MDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkNv
b2tpZUphci5oIgorI2ltcG9ydCAiUGxhdGZvcm1Db29raWVKYXIuaCIKIAogI2lmICFVU0UoQ0ZO
RVRXT1JLKQogCkBAIC0zMiw3ICszMiw3IEBACiAjaW1wb3J0ICJDb29raWUuaCIKICNpbXBvcnQg
IkNvb2tpZVN0b3JhZ2UuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2ltcG9y
dCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIktVUkwuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsMjkgKzYxLDMxIEBAIHN0
YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2llcygKICAgICByZXR1cm4gZmlsdGVy
ZWRDb29raWVzOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmIHVybCkKK1N0cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKIAotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJM
KGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7CisgICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7Cisg
ICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5n
ZXQoKSwgdXJsKTsKICAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxk
c1dpdGhDb29raWVzOmZpbHRlckNvb2tpZXMoY29va2llcykuZ2V0KCldIG9iamVjdEZvcktleTpA
IkNvb2tpZSJdOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1cm4g
U3RyaW5nKCk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsKQog
ewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIE5TQXJyYXkgKmNvb2tp
ZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0
KCksIHVybCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0
b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRD
RkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tp
ZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJsKTsKICAgICByZXR1cm4gW1tOU0hUVFBD
b29raWUgcmVxdWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVzOmNvb2tpZXNdIG9iamVjdEZvcktl
eTpAIkNvb2tpZSJdOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1
cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCit2b2lkIHNldENvb2tpZXNG
cm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQogewogICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTAwLDI4ICsxMDIsMzEgQEAgdm9pZCBzZXRD
b29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIFJldGFpblB0cjxOU0FycmF5PiBm
aWx0ZXJlZENvb2tpZXMgPSBmaWx0ZXJDb29raWVzKFtOU0hUVFBDb29raWUgY29va2llc1dpdGhS
ZXNwb25zZUhlYWRlckZpZWxkczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OmNv
b2tpZVN0cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl0gZm9yVVJMOmNvb2tpZVVSTF0pOwogICAg
IEFTU0VSVChbZmlsdGVyZWRDb29raWVzLmdldCgpIGNvdW50XSA8PSAxKTsKIAotICAgIHdrU2V0
SFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmls
dGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3Rv
cmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENG
SFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0
b3JhZ2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBmaXJzdFBhcnR5
KTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLWJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqKQorYm9vbCBjb29raWVzRW5hYmxlZChOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAg
ICBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nh
c3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSkpOworICAgIFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIE5T
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgPSBzdGF0aWNfY2FzdDxO
U0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHdrR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShjb29r
aWVTdG9yYWdlLmdldCgpKSk7CiAgICAgcmV0dXJuIGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hU
VFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMgfHwgY29va2llQWNjZXB0UG9saWN5ID09IE5TSFRU
UENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogCiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgZ2V0
UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tp
ZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAg
ICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IAotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgTlNBcnJheSAq
Y29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJsKTsK
ICAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOwogICAgIHJhd0Nvb2tpZXMu
cmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7CkBAIC0xMzUsMTIgKzE0MCwxMiBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29u
c3QgRG9jdW1lbnQqLCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29v
a2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tp
ZU5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7CiAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogCiAgICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKLSAgICBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRD
RkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2Uo
KSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgTlNBcnJheSAqY29va2llcyA9
IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llVVJMKTsKIAog
ICAgIE5TU3RyaW5nICpjb29raWVOYW1lU3RyaW5nID0gY29va2llTmFtZTsKQEAgLTE1NSwxMSAr
MTYwLDEyIEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFt
ZXMpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgTlNBcnJheSAq
Y29va2llcyA9IHdrSFRUUENvb2tpZXMoZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQo
KSk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2Ug
PSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBD
b29raWVTdG9yYWdlKCk7CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMoY29v
a2llU3RvcmFnZS5nZXQoKSk7CiAgICAgCiAgICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBp
biBjb29raWVzKQogICAgICAgICBob3N0bmFtZXMuYWRkKFtjb29raWUgZG9tYWluXSk7CkBAIC0x
NjcsMTEgKzE3MywxMSBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGhvc3Ru
YW1lKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENv
b2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQ
Q29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKICAgICBpZiAoIWNvb2tpZXMpCiAgICAgICAg
IHJldHVybjsKQEAgLTE4NCw5ICsxOTAsMTAgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQg
ZGVsZXRlQWxsQ29va2llcygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRl
eHQqIGNvbnRleHQpCiB7Ci0gICAgd2tEZWxldGVBbGxIVFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICB3a0RlbGV0ZUFsbEhUVFBD
b29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0LmNwcAkocmV2aXNpb24g
MTMzOTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHA6
MTMzOTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDb29raWVKYXJRdC5oIgorCisjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAi
Q29va2llSmFyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5l
dHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgorI2lu
Y2x1ZGUgPFFEYXRlVGltZT4KKyNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CisjaW5j
bHVkZSA8UU5ldHdvcmtDb29raWU+CisjaW5jbHVkZSA8UVNxbFF1ZXJ5PgorI2luY2x1ZGUgPFFT
dHJpbmdMaXN0PgorI2luY2x1ZGUgPFFWYXJpYW50PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTaGFyZWRDb29raWVKYXJR
dCogc19zaGFyZWRDb29raWVKYXJRdCA9IDA7CisKK3N0YXRpYyBOZXR3b3JraW5nQ29udGV4dCog
bmV0d29ya2luZ0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIGlmICgh
ZG9jdW1lbnQpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1l
TG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7CisgICAgaWYgKCFsb2FkZXIpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Cit9
CisKK3ZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9
IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybjsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0Fj
Y2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisgICAgaWYgKCFqYXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOworICAgIFFVcmwgZmlyc3RQYXJ0eVVy
bChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgaWYgKCF0aGlyZFBhcnR5
Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJs
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMg
PSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvTGF0aW4xKCkp
OworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgaXQgPSBjb29raWVzLmJlZ2lu
KCk7CisgICAgd2hpbGUgKGl0ICE9IGNvb2tpZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKGl0LT5p
c0h0dHBPbmx5KCkpCisgICAgICAgICAgICBpdCA9IGNvb2tpZXMuZXJhc2UoaXQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICArK2l0OworICAgIH0KKworICAgIGphci0+c2V0Q29va2llc0Zy
b21VcmwoY29va2llcywgdXJsRm9yQ29va2llcyk7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOworICAgIGlmICgh
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIFFOZXR3b3JrQ29va2llSmFy
KiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKwor
ICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOworICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2ll
UG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tp
ZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwodXJsRm9yQ29va2llcyk7CisgICAgaWYgKGNvb2tpZXMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBRU3RyaW5nTGlzdCBy
ZXN1bHRDb29raWVzOworICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrQ29va2llJiBuZXR3b3Jr
Q29va2llLCBjb29raWVzKSB7CisgICAgICAgIGlmIChuZXR3b3JrQ29va2llLmlzSHR0cE9ubHko
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXN1bHRDb29raWVzLmFwcGVuZChR
U3RyaW5nOjpmcm9tTGF0aW4xKG5ldHdvcmtDb29raWUudG9SYXdGb3JtKFFOZXR3b3JrQ29va2ll
OjpOYW1lQW5kVmFsdWVPbmx5KS5jb25zdERhdGEoKSkpOworICAgIH0KKworICAgIHJldHVybiBy
ZXN1bHRDb29raWVzLmpvaW4oUUxhdGluMVN0cmluZygiOyAiKSk7Cit9CisKK1N0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwgJnVybCkKK3sKKyAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtp
bmdDb250ZXh0KGRvY3VtZW50KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0Fj
Y2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4g
Y29va2llcyA9IGphci0+Y29va2llc0ZvclVybChRVXJsKHVybCkpOworICAgIGlmIChjb29raWVz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUVN0cmluZ0xpc3Qg
cmVzdWx0Q29va2llczsKKyAgICBmb3JlYWNoIChRTmV0d29ya0Nvb2tpZSBuZXR3b3JrQ29va2ll
LCBjb29raWVzKQorICAgICAgICByZXN1bHRDb29raWVzLmFwcGVuZChRU3RyaW5nOjpmcm9tTGF0
aW4xKG5ldHdvcmtDb29raWUudG9SYXdGb3JtKFFOZXR3b3JrQ29va2llOjpOYW1lQW5kVmFsdWVP
bmx5KS5jb25zdERhdGEoKSkpOworCisgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0
aW4xU3RyaW5nKCI7ICIpKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQpCit7CisgICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3Jr
aW5nQ29udGV4dChkb2N1bWVudCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tp
ZUphcigpOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCit7CisgICAgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgcmV0dXJuIGZhbHNl
OyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCit9CisKK3ZvaWQgZGVsZXRlQ29va2ll
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK30KKwordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBTaGFyZWRDb29raWVKYXJR
dCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIGlmIChqYXIpCisgICAg
ICAgIGphci0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKK30KKwordm9pZCBk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBT
aGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAg
IGlmIChqYXIpCisgICAgICAgIGphci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1l
KTsKK30KKwordm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICBTaGFyZWRDb29raWVKYXJR
dCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIGlmIChqYXIpCisgICAg
ICAgIGphci0+ZGVsZXRlQWxsQ29va2llcygpOworfQorCitTaGFyZWRDb29raWVKYXJRdCogU2hh
cmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpCit7CisgICAgcmV0dXJuIHNfc2hhcmVkQ29va2llSmFy
UXQ7Cit9CisKK1NoYXJlZENvb2tpZUphclF0KiBTaGFyZWRDb29raWVKYXJRdDo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgY29va2llU3RvcmFnZURpcmVjdG9yeSkKK3sKKyAgICBpZiAoIXNfc2hhcmVk
Q29va2llSmFyUXQpCisgICAgICAgIHNfc2hhcmVkQ29va2llSmFyUXQgPSBuZXcgU2hhcmVkQ29v
a2llSmFyUXQoY29va2llU3RvcmFnZURpcmVjdG9yeSk7CisKKyAgICByZXR1cm4gc19zaGFyZWRD
b29raWVKYXJRdDsKK30KKwordm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVzdHJveSgpCit7Cisg
ICAgZGVsZXRlIHNfc2hhcmVkQ29va2llSmFyUXQ7CisgICAgc19zaGFyZWRDb29raWVKYXJRdCA9
IDA7Cit9CisKK3ZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIFFMaXN0PFFOZXR3b3JrQ29va2ll
PiBjb29raWVzID0gYWxsQ29va2llcygpOworICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrQ29v
a2llJiBuZXR3b3JrQ29va2llLCBjb29raWVzKQorICAgICAgICBob3N0bmFtZXMuYWRkKG5ldHdv
cmtDb29raWUuZG9tYWluKCkpOworfQorCitib29sIFNoYXJlZENvb2tpZUphclF0OjpkZWxldGVD
b29raWUoY29uc3QgUU5ldHdvcmtDb29raWUmIGNvb2tpZSkKK3sKKyAgICBpZiAoIVFOZXR3b3Jr
Q29va2llSmFyOjpkZWxldGVDb29raWUoY29va2llKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3FsUXVlcnkucHJlcGFy
ZShRTGF0aW4xU3RyaW5nKCJERUxFVEUgRlJPTSBjb29raWVzIFdIRVJFIGNvb2tpZUlkPTpjb29r
aWVJZHZhbHVlIikpOworICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29v
a2llSWR2YWx1ZSIpLCBjb29raWUuZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoY29va2ll
Lm5hbWUoKSkpKTsKKyAgICBzcWxRdWVyeS5leGVjKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0
IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGFsbENv
b2tpZXMoKTsKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGl0ID0gY29va2ll
cy5iZWdpbigpOworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgZW5kID0gY29v
a2llcy5lbmQoKTsKKyAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3Fs
UXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJERUxFVEUgRlJPTSBjb29raWVzIFdIRVJFIGNv
b2tpZUlkPTpjb29raWVJZHZhbHVlIikpOworICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKKyAgICAg
ICAgaWYgKGl0LT5kb21haW4oKSA9PSBRU3RyaW5nKGhvc3RuYW1lKSkgeworICAgICAgICAgICAg
c3FsUXVlcnkuYmluZFZhbHVlKFFMYXRpbjFTdHJpbmcoIjpjb29raWVJZHZhbHVlIiksIGl0LT5k
b21haW4oKS5hcHBlbmQoUUxhdGluMVN0cmluZyhpdC0+bmFtZSgpKSkpOworICAgICAgICAgICAg
c3FsUXVlcnkuZXhlYygpOworICAgICAgICAgICAgaXQgPSBjb29raWVzLmVyYXNlKGl0KTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBpdCsrOworICAgIH0KKyAgICBzZXRBbGxDb29raWVz
KGNvb2tpZXMpOworfQorCit2b2lkIFNoYXJlZENvb2tpZUphclF0OjpkZWxldGVBbGxDb29raWVz
KCkKK3sKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKKyAgICBzcWxRdWVyeS5wcmVwYXJl
KFFMYXRpbjFTdHJpbmcoIkRFTEVURSAqIEZST00gY29va2llcyIpKTsKKyAgICBzcWxRdWVyeS5l
eGVjKCk7CisgICAgc2V0QWxsQ29va2llcyhRTGlzdDxRTmV0d29ya0Nvb2tpZT4oKSk7Cit9CisK
K1NoYXJlZENvb2tpZUphclF0OjpTaGFyZWRDb29raWVKYXJRdChjb25zdCBTdHJpbmcmIGNvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnkpCit7CisgICAgbV9kYXRhYmFzZSA9IFFTcWxEYXRhYmFzZTo6YWRk
RGF0YWJhc2UoUUxhdGluMVN0cmluZygiUVNRTElURSIpKTsKKyAgICBjb25zdCBRU3RyaW5nIGNv
b2tpZVN0b3JhZ2VQYXRoID0gY29va2llU3RvcmFnZURpcmVjdG9yeTsKKyAgICBjb25zdCBRU3Ry
aW5nIGRhdGFCYXNlTmFtZSA9IGNvb2tpZVN0b3JhZ2VQYXRoICsgUUxhdGluMVN0cmluZygiL2Nv
b2tpZXMuZGIiKTsKKyAgICBtX2RhdGFiYXNlLnNldERhdGFiYXNlTmFtZShkYXRhQmFzZU5hbWUp
OworICAgIGVuc3VyZURhdGFiYXNlVGFibGUoKTsKKyAgICBsb2FkQ29va2llcygpOworfQorCitT
aGFyZWRDb29raWVKYXJRdDo6flNoYXJlZENvb2tpZUphclF0KCkKK3sKKyAgICBtX2RhdGFiYXNl
LmNsb3NlKCk7Cit9CisKK2Jvb2wgU2hhcmVkQ29va2llSmFyUXQ6OnNldENvb2tpZXNGcm9tVXJs
KGNvbnN0IFFMaXN0PFFOZXR3b3JrQ29va2llPiYgY29va2llTGlzdCwgY29uc3QgUVVybCYgdXJs
KQoreworICAgIGlmICghUU5ldHdvcmtDb29raWVKYXI6OnNldENvb2tpZXNGcm9tVXJsKGNvb2tp
ZUxpc3QsIHVybCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUVNxbFF1ZXJ5IHNxbFF1
ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGluMVN0cmluZygiSU5T
RVJUIE9SIFJFUExBQ0UgSU5UTyBjb29raWVzIChjb29raWVJZCwgY29va2llKSBWQUxVRVMgKDpj
b29raWVJZHZhbHVlLCA6Y29va2lldmFsdWUpIikpOworICAgIFFWYXJpYW50TGlzdCBjb29raWVz
SWRzOworICAgIFFWYXJpYW50TGlzdCBjb29raWVzVmFsdWVzOworICAgIGZvcmVhY2ggKGNvbnN0
IFFOZXR3b3JrQ29va2llICZjb29raWUsIGNvb2tpZXNGb3JVcmwodXJsKSkgeworICAgICAgICBp
ZiAoY29va2llLmlzU2Vzc2lvbkNvb2tpZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGNvb2tpZXNJZHMuYXBwZW5kKGNvb2tpZS5kb21haW4oKS5hcHBlbmQoUUxhdGluMVN0cmlu
Zyhjb29raWUubmFtZSgpKSkpOworICAgICAgICBjb29raWVzVmFsdWVzLmFwcGVuZChjb29raWUu
dG9SYXdGb3JtKCkpOworICAgIH0KKyAgICBzcWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0cmlu
ZygiOmNvb2tpZUlkdmFsdWUiKSwgY29va2llc0lkcyk7CisgICAgc3FsUXVlcnkuYmluZFZhbHVl
KFFMYXRpbjFTdHJpbmcoIjpjb29raWV2YWx1ZSIpLCBjb29raWVzVmFsdWVzKTsKKyAgICBzcWxR
dWVyeS5leGVjQmF0Y2goKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaGFyZWRDb29r
aWVKYXJRdDo6ZW5zdXJlRGF0YWJhc2VUYWJsZSgpCit7CisgICAgaWYgKCFtX2RhdGFiYXNlLm9w
ZW4oKSkgeworICAgICAgICBxV2FybmluZygiQ2FuJ3Qgb3BlbiBjb29raWUgZGF0YWJhc2UiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2RhdGFiYXNlLmV4ZWMoUUxhdGluMVN0cmlu
ZygiUFJBR01BIHN5bmNocm9ub3VzPU9GRiIpKTsKKworICAgIFFTcWxRdWVyeSBzcWxRdWVyeSht
X2RhdGFiYXNlKTsKKyAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIkNSRUFURSBU
QUJMRSBJRiBOT1QgRVhJU1RTIGNvb2tpZXMgKGNvb2tpZUlkIFZBUkNIQVIgUFJJTUFSWSBLRVks
IGNvb2tpZSBCTE9CKTsiKSk7CisgICAgc3FsUXVlcnkuZXhlYygpOworfQorCit2b2lkIFNoYXJl
ZENvb2tpZUphclF0Ojpsb2FkQ29va2llcygpCit7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQorICAgICAgICByZXR1cm47CisKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2ll
czsKKyAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3FsUXVlcnkucHJl
cGFyZShRTGF0aW4xU3RyaW5nKCJTRUxFQ1QgY29va2llIEZST00gY29va2llcyIpKTsKKyAgICBz
cWxRdWVyeS5leGVjKCk7CisgICAgd2hpbGUgKHNxbFF1ZXJ5Lm5leHQoKSkKKyAgICAgICAgY29v
a2llcy5hcHBlbmQoUU5ldHdvcmtDb29raWU6OnBhcnNlQ29va2llcyhzcWxRdWVyeS52YWx1ZSgw
KS50b0J5dGVBcnJheSgpKSk7CisgICAgc2V0QWxsQ29va2llcyhjb29raWVzKTsKK30KKworI2lu
Y2x1ZGUgIm1vY19Db29raWVKYXJRdC5jcHAiCisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2ll
SmFyUXQuY3BwCShyZXZpc2lvbiAxMzM5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDcg
QEAKICNpbmNsdWRlICJDb29raWVKYXJRdC5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5j
bHVkZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFt
ZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVK
YXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJUaGlyZFBhcnR5Q29va2llc1F0LmgiCkBAIC00OSwzMCArNDYsMTQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIHNfc2hhcmVkQ29v
a2llSmFyUXQgPSAwOwogCi1zdGF0aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250
ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBGcmFtZUxvYWRlciogbG9hZGVy
ID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpOwotfQotCi12b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29u
dGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAg
UU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkt
PmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29u
dGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29raWVK
YXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIFFV
cmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgUVVybCBmaXJzdFBhcnR5VXJsKGZpcnN0UGFy
dHkpOwogICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMoY29udGV4dCwgdXJs
Rm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtODgsMTUg
KzY5LDE0IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBq
YXItPnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZXMsIHVybEZvckNvb2tpZXMpOwogfQogCi1TdHJp
bmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0
cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9
IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3
b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFn
ZXIoKS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CisgICAgaWYg
KCFqYXIpCisgICAgICAgIHJldHVybjsKIAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwot
ICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7
CisgICAgUVVybCBmaXJzdFBhcnR5VXJsKGZpcnN0UGFydHkpOwogICAgIGlmICghdGhpcmRQYXJ0
eUNvb2tpZVBvbGljeVBlcm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVy
bCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMTE0LDEyICs5NCwxMSBAQCBTdHJp
bmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsCiAgICAgcmV0dXJuIHJlc3VsdENv
b2tpZXMuam9pbihRTGF0aW4xU3RyaW5nKCI7ICIpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAm
dXJsKQorU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMICZ1cmwpCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0
KQorICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29y
a0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVk
KCk7CisgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBRTmV0d29y
a0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2ll
SmFyKCk7CiAKICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2ll
c0ZvclVybChRVXJsKHVybCkpOwogICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkKQEAgLTEzMiw0
MyArMTExLDQxIEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAg
ICByZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1i
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgY29va2ll
c0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFj
b250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRleHQtPm5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBq
YXIgPSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFy
KCkgOiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CisgICAgcmV0dXJuICEhamFyOwogfQog
Ci1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9y
PENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRl
eHQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAg
cmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYp
Cit2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZv
aWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBTaGFyZWRDb29raWVKYXJRdCogamFy
ID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBq
YXIgPSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFy
KCkgOiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKICAgICAgICAg
amFyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOwogfQogCi12b2lkIGRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgaG9zdG5hbWUpCiB7Ci0gICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNoYXJlZENvb2tp
ZUphclF0OjpzaGFyZWQoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dCA/
IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpIDogU2hhcmVkQ29v
a2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkK
K3ZvaWQgZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKIHsKLSAg
ICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwor
ICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29ya0Fj
Y2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7
CiAgICAgaWYgKGphcikKICAgICAgICAgamFyLT5kZWxldGVBbGxDb29raWVzKCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tp
ZUphclNvdXAuY3BwCShyZXZpc2lvbiAxMzM5MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDkg
KzIyLDcgQEAKICNpbmNsdWRlICJDb29raWVKYXJTb3VwLmgiCiAKICNpbmNsdWRlICJDb29raWUu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogI2luY2x1ZGUg
IkdPd25QdHJTb3VwLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdD
b250ZXh0LmgiCkBAIC0zNCwxOSArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBTb3VwQ29va2llSmFyKiBjb29raWVKYXJGb3JEb2N1bWVudChjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQpCitzdGF0aWMgU291cENvb2tpZUphciogY29va2llSmFyRm9yQ29udGV4dChOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBjb25zdCBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBGcmFtZUxvYWRlciog
bG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBjb25zdCBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IGxvYWRlci0+bmV0
d29ya2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBTT1VQX0NPT0tJRV9KQVIoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKGNvbnRl
eHQtPnNvdXBTZXNzaW9uKCksIFNPVVBfVFlQRV9DT09LSUVfSkFSKSk7CiB9CiAKQEAgLTg2LDE0
ICs3MywxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaHR0cE9ubHlDb29raWVFeGlzdHMoCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIHNldENvb2tpZXNGcm9t
RE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgU291cENvb2tpZUph
ciogamFyID0gY29va2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIFNvdXBDb29raWVK
YXIqIGphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENv
b2tpZUphcigpOwogICAgIGlmICghamFyKQogICAgICAgICByZXR1cm47CiAKICAgICBHT3duUHRy
PFNvdXBVUkk+IG9yaWdpbihzb3VwX3VyaV9uZXcodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
KTsKLSAgICBHT3duUHRyPFNvdXBVUkk+IGZpcnN0UGFydHkoc291cF91cmlfbmV3KGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBH
T3duUHRyPFNvdXBVUkk+IGZpcnN0UGFydHkoc291cF91cmlfbmV3KGZpcnN0UGFydHkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSkpOwogCiAgICAgLy8gR2V0IGV4aXN0aW5nIGNvb2tpZXMgZm9yIHRo
aXMgb3JpZ2luLgogICAgIEdTTGlzdCogZXhpc3RpbmdDb29raWVzID0gc291cF9jb29raWVfamFy
X2dldF9jb29raWVfbGlzdChqYXIsIG9yaWdpbi5nZXQoKSwgVFJVRSk7CkBAIC0xMjAsOSArMTA3
LDkgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIHNvdXBf
Y29va2llc19mcmVlKGV4aXN0aW5nQ29va2llcyk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgY29va2ll
c0ZvckRvY3VtZW50KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBi
b29sIGZvckhUVFBIZWFkZXIpCitzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JDb250ZXh0KE5ldHdv
cmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgZm9ySFRUUEhlYWRl
cikKIHsKLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1
bWVudCk7CisgICAgU291cENvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvb2tpZUphckZvckNv
bnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIApAQCAtMTMxLDI1ICsxMTgsMjUgQEAgc3RhdGljIFN0cmluZyBj
b29raWVzRm9yRG9jdW1lbnQoY29uc3QgRAogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGNv
b2tpZXMuZ2V0KCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIHJldHVy
biBjb29raWVzRm9yRG9jdW1lbnQoZG9jdW1lbnQsIHVybCwgZmFsc2UpOworICAgIHJldHVybiBj
b29raWVzRm9yQ29udGV4dChjb250ZXh0LCB1cmwsIGZhbHNlKTsKIH0KIAotU3RyaW5nIGNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsKQorU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIGNvb2tp
ZXNGb3JEb2N1bWVudChkb2N1bWVudCwgdXJsLCB0cnVlKTsKKyAgICByZXR1cm4gY29va2llc0Zv
ckNvbnRleHQoY29udGV4dCwgdXJsLCB0cnVlKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIGNvb2tpZXNFbmFibGVkKE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiAhIWNvb2tpZUphckZvckRvY3VtZW50KGRv
Y3VtZW50KTsKKyAgICByZXR1cm4gISFjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpOwogfQog
Ci1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRSYXdDb29raWVzKE5l
dHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBTb3VwQ29va2ll
SmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAgU291cENvb2tp
ZUphciogamFyID0gY29udGV4dCA/IGNvb2tpZUphckZvckNvbnRleHQoY29udGV4dCkgOiBzb3Vw
Q29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MTcwLDkgKzE1Nyw5IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgZGVs
ZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJG
b3JEb2N1bWVudChkb2N1bWVudCk7CisgICAgU291cENvb2tpZUphciogamFyID0gY29udGV4dCA/
IGNvb2tpZUphckZvckNvbnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgaWYg
KCFqYXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTkxLDkgKzE3OCw5IEBAIHZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWUKICAgICB9CiB9CiAKLXZvaWQgZ2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKIHsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBzb3VwQ29v
a2llSmFyKCk7CisgICAgU291cENvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvb2tpZUphckZv
ckNvbnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgR093blB0cjxHU0xpc3Q+
IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOwogICAgIGZv
ciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4
dChpdGVtKSkgewogICAgICAgICBHT3duUHRyPFNvdXBDb29raWU+IGNvb2tpZShzdGF0aWNfY2Fz
dDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkpOwpAQCAtMjAzLDEwICsxOTAsMTAgQEAgdm9pZCBn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIH0KIH0KIAotdm9pZCBkZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIGhvc3RuYW1lKQogewogICAgIENTdHJpbmcgaG9zdE5hbWVTdHJpbmcgPSBob3N0bmFtZS51
dGY4KCk7Ci0gICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc291cENvb2tpZUphcigpOwor
ICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNv
bnRleHQpIDogc291cENvb2tpZUphcigpOwogICAgIEdPd25QdHI8R1NMaXN0PiBjb29raWVzKHNv
dXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpKTsKICAgICBmb3IgKEdTTGlzdCog
aXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsK
ICAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0
ZW0tPmRhdGEpOwpAQCAtMjE2LDkgKzIwMyw5IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGNvbnN0IFN0cmkKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lk
IGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgU291
cENvb2tpZUphciogY29va2llSmFyID0gc291cENvb2tpZUphcigpOworICAgIFNvdXBDb29raWVK
YXIqIGphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENv
b2tpZUphcigpOwogICAgIEdPd25QdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9h
bGxfY29va2llcyhjb29raWVKYXIpKTsKICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMu
Z2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKICAgICAgICAgU291cENv
b2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2ll
SmFyU291cC5oCShyZXZpc2lvbiAxMzM5MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2
IEBACiAjaWZuZGVmIENvb2tpZUphclNvdXBfaAogI2RlZmluZSBDb29raWVKYXJTb3VwX2gKIAot
I2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dp
bi9Db29raWVKYXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAJKHJldmlzaW9uIDEzMzkyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDExICsyNCwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogCiAj
aW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAj
aW5jbHVkZSA8V2luaW5ldC5oPgpAQCAtMzYsMTYgKzM1LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0
d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewotICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggZG9jdW1lbnQtPmZpcnN0UGFy
dHlGb3JDb29raWVzKCkuCisgICAgLy8gRklYTUU6IERlYWwgd2l0aCBmaXJzdFBhcnR5IGFyZ3Vt
ZW50LgogICAgIFN0cmluZyBzdHIgPSB1cmwuc3RyaW5nKCk7CiAgICAgU3RyaW5nIHZhbCA9IHZh
bHVlOwogICAgIEludGVybmV0U2V0Q29va2llKHN0ci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLCAwLCB2YWwuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLVN0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVy
bCkKK1N0cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYs
IGNvbnN0IEtVUkwmIHVybCkKIHsKKyAgICAvLyBGSVhNRTogRGVhbCB3aXRoIGZpcnN0UGFydHkg
YXJndW1lbnQuCisKICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogCiAgICAgRFdPUkQg
Y291bnQgPSAwOwpAQCAtNjMsNDAgKzY0LDQwIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3Vt
ZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwogfQogCi1T
dHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgLy8gRklYTUU6
IGluY2x1ZGUgSHR0cE9ubHkgY29va2llCi0gICAgcmV0dXJuIGNvb2tpZXMoZG9jdW1lbnQsIHVy
bCk7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JET00oY29udGV4dCwgdXJsKTsKIH0KIAotYm9vbCBj
b29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBjb29raWVz
RW5hYmxlZChOZXR3b3JraW5nQ29udGV4dCopCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKK2Jvb2wgZ2V0UmF3Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCos
IGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhN
RTogTm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1
cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxl
dGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3Zv
aWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQg
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQog
Ci12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQor
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9
CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29y
a2luZ0NvbnRleHQqKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCShyZXZpc2lv
biAxMzM5MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJDb29raWVKYXJRdC5oIgotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ29va2ll
SmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIk5ldHdvcmtp
bmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgotI2luY2x1ZGUg
PFFEYXRlVGltZT4KLSNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+Ci0jaW5jbHVkZSA8
UU5ldHdvcmtDb29raWU+Ci0jaW5jbHVkZSA8UVNxbFF1ZXJ5PgotI2luY2x1ZGUgPFFTdHJpbmdM
aXN0PgotI2luY2x1ZGUgPFFWYXJpYW50PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBTaGFyZWRDb29raWVKYXJRdCogc19z
aGFyZWRDb29raWVKYXJRdCA9IDA7Ci0KLXN0YXRpYyBOZXR3b3JraW5nQ29udGV4dCogbmV0d29y
a2luZ0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGlmICghZG9jdW1l
bnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFt
ZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lTG9hZGVy
KiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Ci19Ci0KLXZv
aWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdv
cmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVy
bjsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01h
bmFnZXIoKS0+Y29va2llSmFyKCk7Ci0gICAgaWYgKCFqYXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29va2ll
UG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBRTmV0
d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvTGF0aW4xKCkpOwotICAg
IFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgaXQgPSBjb29raWVzLmJlZ2luKCk7Ci0g
ICAgd2hpbGUgKGl0ICE9IGNvb2tpZXMuZW5kKCkpIHsKLSAgICAgICAgaWYgKGl0LT5pc0h0dHBP
bmx5KCkpCi0gICAgICAgICAgICBpdCA9IGNvb2tpZXMuZXJhc2UoaXQpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICArK2l0OwotICAgIH0KLQotICAgIGphci0+c2V0Q29va2llc0Zyb21Vcmwo
Y29va2llcywgdXJsRm9yQ29va2llcyk7Ci19Ci0KLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQotewotICAgIE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4
dCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIg
PSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKLQotICAgIFFV
cmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5
UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBq
YXItPmNvb2tpZXNGb3JVcmwodXJsRm9yQ29va2llcyk7Ci0gICAgaWYgKGNvb2tpZXMuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBRU3RyaW5nTGlzdCByZXN1bHRD
b29raWVzOwotICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrQ29va2llJiBuZXR3b3JrQ29va2ll
LCBjb29raWVzKSB7Ci0gICAgICAgIGlmIChuZXR3b3JrQ29va2llLmlzSHR0cE9ubHkoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXN1bHRDb29raWVzLmFwcGVuZChRU3RyaW5n
Ojpmcm9tTGF0aW4xKG5ldHdvcmtDb29raWUudG9SYXdGb3JtKFFOZXR3b3JrQ29va2llOjpOYW1l
QW5kVmFsdWVPbmx5KS5jb25zdERhdGEoKSkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHRD
b29raWVzLmpvaW4oUUxhdGluMVN0cmluZygiOyAiKSk7Ci19Ci0KLVN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwg
JnVybCkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250
ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01h
bmFnZXIoKS0+Y29va2llSmFyKCk7Ci0KLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2ll
cyA9IGphci0+Y29va2llc0ZvclVybChRVXJsKHVybCkpOwotICAgIGlmIChjb29raWVzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgUVN0cmluZ0xpc3QgcmVzdWx0
Q29va2llczsKLSAgICBmb3JlYWNoIChRTmV0d29ya0Nvb2tpZSBuZXR3b3JrQ29va2llLCBjb29r
aWVzKQotICAgICAgICByZXN1bHRDb29raWVzLmFwcGVuZChRU3RyaW5nOjpmcm9tTGF0aW4xKG5l
dHdvcmtDb29raWUudG9SYXdGb3JtKFFOZXR3b3JrQ29va2llOjpOYW1lQW5kVmFsdWVPbmx5KS5j
b25zdERhdGEoKSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3Ry
aW5nKCI7ICIpKTsKLX0KLQotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29u
dGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigp
OwotfQotCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwg
VmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1w
bGVtZW50ZWQKLSAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgcmV0dXJuIGZhbHNlOyAvLyBy
ZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCi19Ci0KLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0
IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLX0KLQotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBTaGFyZWRDb29raWVKYXJRdCogamFy
ID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwotICAgIGlmIChqYXIpCi0gICAgICAgIGph
ci0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKLX0KLQotdm9pZCBkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKLXsKLSAgICBTaGFyZWRD
b29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwotICAgIGlmIChq
YXIpCi0gICAgICAgIGphci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKLX0K
LQotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKLXsKLSAgICBTaGFyZWRDb29raWVKYXJRdCogamFy
ID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwotICAgIGlmIChqYXIpCi0gICAgICAgIGph
ci0+ZGVsZXRlQWxsQ29va2llcygpOwotfQotCi1TaGFyZWRDb29raWVKYXJRdCogU2hhcmVkQ29v
a2llSmFyUXQ6OnNoYXJlZCgpCi17Ci0gICAgcmV0dXJuIHNfc2hhcmVkQ29va2llSmFyUXQ7Ci19
Ci0KLVNoYXJlZENvb2tpZUphclF0KiBTaGFyZWRDb29raWVKYXJRdDo6Y3JlYXRlKGNvbnN0IFN0
cmluZyYgY29va2llU3RvcmFnZURpcmVjdG9yeSkKLXsKLSAgICBpZiAoIXNfc2hhcmVkQ29va2ll
SmFyUXQpCi0gICAgICAgIHNfc2hhcmVkQ29va2llSmFyUXQgPSBuZXcgU2hhcmVkQ29va2llSmFy
UXQoY29va2llU3RvcmFnZURpcmVjdG9yeSk7Ci0KLSAgICByZXR1cm4gc19zaGFyZWRDb29raWVK
YXJRdDsKLX0KLQotdm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVzdHJveSgpCi17Ci0gICAgZGVs
ZXRlIHNfc2hhcmVkQ29va2llSmFyUXQ7Ci0gICAgc19zaGFyZWRDb29raWVKYXJRdCA9IDA7Ci19
Ci0KLXZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29r
aWVzID0gYWxsQ29va2llcygpOwotICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrQ29va2llJiBu
ZXR3b3JrQ29va2llLCBjb29raWVzKQotICAgICAgICBob3N0bmFtZXMuYWRkKG5ldHdvcmtDb29r
aWUuZG9tYWluKCkpOwotfQotCi1ib29sIFNoYXJlZENvb2tpZUphclF0OjpkZWxldGVDb29raWUo
Y29uc3QgUU5ldHdvcmtDb29raWUmIGNvb2tpZSkKLXsKLSAgICBpZiAoIVFOZXR3b3JrQ29va2ll
SmFyOjpkZWxldGVDb29raWUoY29va2llKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBR
U3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnkucHJlcGFyZShRTGF0
aW4xU3RyaW5nKCJERUxFVEUgRlJPTSBjb29raWVzIFdIRVJFIGNvb2tpZUlkPTpjb29raWVJZHZh
bHVlIikpOwotICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29va2llSWR2
YWx1ZSIpLCBjb29raWUuZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoY29va2llLm5hbWUo
KSkpKTsKLSAgICBzcWxRdWVyeS5leGVjKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmlu
ZyYgaG9zdG5hbWUpCi17Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGFsbENvb2tpZXMo
KTsKLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGl0ID0gY29va2llcy5iZWdp
bigpOwotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgZW5kID0gY29va2llcy5l
bmQoKTsKLSAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnku
cHJlcGFyZShRTGF0aW4xU3RyaW5nKCJERUxFVEUgRlJPTSBjb29raWVzIFdIRVJFIGNvb2tpZUlk
PTpjb29raWVJZHZhbHVlIikpOwotICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKLSAgICAgICAgaWYg
KGl0LT5kb21haW4oKSA9PSBRU3RyaW5nKGhvc3RuYW1lKSkgewotICAgICAgICAgICAgc3FsUXVl
cnkuYmluZFZhbHVlKFFMYXRpbjFTdHJpbmcoIjpjb29raWVJZHZhbHVlIiksIGl0LT5kb21haW4o
KS5hcHBlbmQoUUxhdGluMVN0cmluZyhpdC0+bmFtZSgpKSkpOwotICAgICAgICAgICAgc3FsUXVl
cnkuZXhlYygpOwotICAgICAgICAgICAgaXQgPSBjb29raWVzLmVyYXNlKGl0KTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBpdCsrOwotICAgIH0KLSAgICBzZXRBbGxDb29raWVzKGNvb2tp
ZXMpOwotfQotCi12b2lkIFNoYXJlZENvb2tpZUphclF0OjpkZWxldGVBbGxDb29raWVzKCkKLXsK
LSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFT
cWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKLSAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRp
bjFTdHJpbmcoIkRFTEVURSAqIEZST00gY29va2llcyIpKTsKLSAgICBzcWxRdWVyeS5leGVjKCk7
Ci0gICAgc2V0QWxsQ29va2llcyhRTGlzdDxRTmV0d29ya0Nvb2tpZT4oKSk7Ci19Ci0KLVNoYXJl
ZENvb2tpZUphclF0OjpTaGFyZWRDb29raWVKYXJRdChjb25zdCBTdHJpbmcmIGNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkpCi17Ci0gICAgbV9kYXRhYmFzZSA9IFFTcWxEYXRhYmFzZTo6YWRkRGF0YWJh
c2UoUUxhdGluMVN0cmluZygiUVNRTElURSIpKTsKLSAgICBjb25zdCBRU3RyaW5nIGNvb2tpZVN0
b3JhZ2VQYXRoID0gY29va2llU3RvcmFnZURpcmVjdG9yeTsKLSAgICBjb25zdCBRU3RyaW5nIGRh
dGFCYXNlTmFtZSA9IGNvb2tpZVN0b3JhZ2VQYXRoICsgUUxhdGluMVN0cmluZygiL2Nvb2tpZXMu
ZGIiKTsKLSAgICBtX2RhdGFiYXNlLnNldERhdGFiYXNlTmFtZShkYXRhQmFzZU5hbWUpOwotICAg
IGVuc3VyZURhdGFiYXNlVGFibGUoKTsKLSAgICBsb2FkQ29va2llcygpOwotfQotCi1TaGFyZWRD
b29raWVKYXJRdDo6flNoYXJlZENvb2tpZUphclF0KCkKLXsKLSAgICBtX2RhdGFiYXNlLmNsb3Nl
KCk7Ci19Ci0KLWJvb2wgU2hhcmVkQ29va2llSmFyUXQ6OnNldENvb2tpZXNGcm9tVXJsKGNvbnN0
IFFMaXN0PFFOZXR3b3JrQ29va2llPiYgY29va2llTGlzdCwgY29uc3QgUVVybCYgdXJsKQotewot
ICAgIGlmICghUU5ldHdvcmtDb29raWVKYXI6OnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZUxpc3Qs
IHVybCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9kYXRhYmFzZS5pc09w
ZW4oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1f
ZGF0YWJhc2UpOwotICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGluMVN0cmluZygiSU5TRVJUIE9S
IFJFUExBQ0UgSU5UTyBjb29raWVzIChjb29raWVJZCwgY29va2llKSBWQUxVRVMgKDpjb29raWVJ
ZHZhbHVlLCA6Y29va2lldmFsdWUpIikpOwotICAgIFFWYXJpYW50TGlzdCBjb29raWVzSWRzOwot
ICAgIFFWYXJpYW50TGlzdCBjb29raWVzVmFsdWVzOwotICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3
b3JrQ29va2llICZjb29raWUsIGNvb2tpZXNGb3JVcmwodXJsKSkgewotICAgICAgICBpZiAoY29v
a2llLmlzU2Vzc2lvbkNvb2tpZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNv
b2tpZXNJZHMuYXBwZW5kKGNvb2tpZS5kb21haW4oKS5hcHBlbmQoUUxhdGluMVN0cmluZyhjb29r
aWUubmFtZSgpKSkpOwotICAgICAgICBjb29raWVzVmFsdWVzLmFwcGVuZChjb29raWUudG9SYXdG
b3JtKCkpOwotICAgIH0KLSAgICBzcWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0cmluZygiOmNv
b2tpZUlkdmFsdWUiKSwgY29va2llc0lkcyk7Ci0gICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRp
bjFTdHJpbmcoIjpjb29raWV2YWx1ZSIpLCBjb29raWVzVmFsdWVzKTsKLSAgICBzcWxRdWVyeS5l
eGVjQmF0Y2goKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTaGFyZWRDb29raWVKYXJR
dDo6ZW5zdXJlRGF0YWJhc2VUYWJsZSgpCi17Ci0gICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oKSkg
ewotICAgICAgICBxV2FybmluZygiQ2FuJ3Qgb3BlbiBjb29raWUgZGF0YWJhc2UiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2RhdGFiYXNlLmV4ZWMoUUxhdGluMVN0cmluZygiUFJB
R01BIHN5bmNocm9ub3VzPU9GRiIpKTsKLQotICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFi
YXNlKTsKLSAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIkNSRUFURSBUQUJMRSBJ
RiBOT1QgRVhJU1RTIGNvb2tpZXMgKGNvb2tpZUlkIFZBUkNIQVIgUFJJTUFSWSBLRVksIGNvb2tp
ZSBCTE9CKTsiKSk7Ci0gICAgc3FsUXVlcnkuZXhlYygpOwotfQotCi12b2lkIFNoYXJlZENvb2tp
ZUphclF0Ojpsb2FkQ29va2llcygpCi17Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llczsKLSAg
ICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnkucHJlcGFyZShR
TGF0aW4xU3RyaW5nKCJTRUxFQ1QgY29va2llIEZST00gY29va2llcyIpKTsKLSAgICBzcWxRdWVy
eS5leGVjKCk7Ci0gICAgd2hpbGUgKHNxbFF1ZXJ5Lm5leHQoKSkKLSAgICAgICAgY29va2llcy5h
cHBlbmQoUU5ldHdvcmtDb29raWU6OnBhcnNlQ29va2llcyhzcWxRdWVyeS52YWx1ZSgwKS50b0J5
dGVBcnJheSgpKSk7Ci0gICAgc2V0QWxsQ29va2llcyhjb29raWVzKTsKLX0KLQotI2luY2x1ZGUg
Im1vY19Db29raWVKYXJRdC5jcHAiCi0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHJldmlzaW9uIDEz
MzkyMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgIldLUHJvdGVjdGlvblNwYWNl
VHlwZXMuaCIKICNpbmNsdWRlICJXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAi
V0tTaGFyZWRBUElDYXN0LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db29raWVKYXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVy
VHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25TcGFjZS5oPgo=
</data>
<flag name="commit-queue"
          id="187653"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173113</attachid>
            <date>2012-11-08 13:52:50 -0800</date>
            <delta_ts>2012-11-08 14:29:21 -0800</delta_ts>
            <desc>patch for review</desc>
            <filename>CookieJar.txt</filename>
            <type>text/plain</type>
            <size>128556</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzkzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBAQAorMjAxMi0xMS0wOCAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBDb29raWVKYXIgdXNlcyBE
b2N1bWVudCBjbGFzcywgd2hpY2ggaXMgYSBsYXllcmluZyB2aW9sYXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTYyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IENvb2tpZUphciBpbiB0
d28gcGFydHMsIG9uZSB0aGF0IHRha2VzIGEgRG9jdW1lbnQsIGFuZCBhbm90aGVyIHRoYXQgaXMg
YSBwdXJlCisgICAgICAgIHBsYXRmb3JtIG9uZSwgdXNpbmcgTmV0d29ya2luZ0NvbnRleHQgdG8g
YWNjZXNzIHRoZSBjb3JyZWN0IHBsYXRmb3JtIHN0b3JhZ2UuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgIFVwZGF0ZWQuCisKKyAgICAgICAgKiBsb2FkZXIvQ29v
a2llSmFyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpuZXR3b3JraW5nQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tp
ZXMpOgorICAgICAgICAqIGxvYWRlci9Db29raWVKYXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmguCisgICAgICAgIFRoaXMgaXMgYW4gYWRhcHRvciBm
b3IgcHVyZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMuIENsaWVudHMgY29udGludWUgdG8gdXNl
IHRoZQorICAgICAgICBvbGQgaW50ZXJmYWNlIHVuY2hhbmdlZC4KKworICAgICAgICAqIHBsYXRm
b3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogbG9hZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5j
cHAuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1
bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9t
aXVtLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAuCisgICAgICAgIFRoZXNlIHBsYXRmb3JtcyBkbyBu
b3QgaGF2ZSBhIHB1cmUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24geWV0LCBzbyB0aGV5IGp1c3Qg
a2VlcAorICAgICAgICB0byB1c2Ugb3JpZ2luYWwgaW1wbGVtZW50YXRpb25zLiBTaW5jZSB0aGUg
Y29kZSBpcyBub3QgaW4gcGxhdGZvcm0vIGFueSBtb3JlLCB0aGUKKyAgICAgICAgdmlvbGF0aW9u
IGlzIHJlc29sdmVkIGZvciBDaHJvbWl1bSBhbmQgQmxhY2tiZXJyeSwgdG9vLgorCisgICAgICAg
ICogcGxhdGZvcm0vQ29va2llSmFyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9QbGF0Zm9ybUNvb2tpZUphci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db29raWVKYXIuaC4KKyAgICAgICAgVGhlIHBsYXRmb3JtIGludGVyZmFjZSBpcyBub3cg
bW9yZSB1bmlmb3JtIC0gYWxsIGZ1bmN0aW9ucyB0YWtlIGEgTmV0d29ya2luZ0NvbnRleHQKKyAg
ICAgICAgaW5zdGVhZCBvZiBoYXJkY29kaW5nIHdoaWNoIGNvb2tpZSBzdG9yYWdlIHRvIHVzZSBp
biBzb21lIGNhc2VzLgorICAgICAgICBSZW5hbWVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBvbmx5IHVz
ZWZ1bCBmb3IgZG9jdW1lbnQuY29va2llIGltcGxlbWVudGF0aW9uIHRvIGxvb2sKKyAgICAgICAg
bGVzcyBnZW5lcmljLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbTogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW06IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0uCisgICAg
ICAgIChXZWJDb3JlOjpjb29raWVzRm9yRE9NKTogVGhpcyBub3cgdGFrZXMgYSBjb250ZXh0IGlu
c3RlYWQgb2YgRG9jdW1lbnQsIGFuZCBhbHNvCisgICAgICAgIHRha2VzIGEgZmlyc3RQYXJ0eSBV
UkwgKHVudXNlZCBvbiBNYWMsIGJ1dCB1c2VkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zKS4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKTogR2V0IGNvb2tp
ZSBzdG9yYWdlIGZyb20gY29udGV4dCAoYW5kCisgICAgICAgIHVzZSBzaGFyZWQgb25lIGlmIGNv
bnRleHQgaXMgbnVsbCkuCisgICAgICAgIChXZWJDb3JlOjpzZXRDb29raWVzRnJvbURPTSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0
ZUNvb2tpZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMpOiBEaXR0by4gVGhpcyB1c2VkIHRvIG9ubHkgc3VwcG9ydCBkZWZhdWx0IHN0b3JhZ2UsCisg
ICAgICAgIGJ1dCBpdHMgY2xlYW5lciB0byBoYXZlIGEgdW5pZm9ybSBpbnRlcmZhY2UuCisgICAg
ICAgIChXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3BwOgorICAgICAgICBTYW1lIGNoYW5nZXMgYXMg
b24gTWFjLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwu
Y3BwOgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgaW50ZXJmYWNlLiBJbXBsZW1lbnRhdGlvbiBp
cyBsYXJnZWx5IGEgZHVtbXkgb25lLgorCisgICAgICAgICogcGxhdGZvcm0vcXQvQ29va2llSmFy
UXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0Lmgu
CisgICAgICAgIE1vdmVkIHRvIGEgY29tbW9uIGxvY2F0aW9uLCBtb3N0IGNvb2tpZSBmaWxlcyB3
ZXJlIGluIG5ldHdvcmsvIGFscmVhZHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVK
YXJRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVK
YXJRdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUph
clF0LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKTogVXNlIGNvbnRl
eHQncyBvciBzaGFyZWQgY29va2UgamFyIGFzIGFwcHJvcHJpYXRlLgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llc0ZvckRPTSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFi
bGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpnZXRSYXdDb29raWVzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29raWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKTogQmFjay1lbmQgaW1wbGVtZW50YXRpb24gY2FuIG9u
bHkgaGFuZGxlIHNoYXJlZAorICAgICAgICBqYXIgaGVyZSwgYXNzZXJ0IHRoYXQgYXJndW1lbnQg
ZG9lcyBub3QgcmVxdWVzdCBhbm90aGVyIG9uZS4KKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQWxsQ29v
a2llcyk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUph
clNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llSmFyRm9yQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRDb29raWVzRnJvbURPTSk6CisgICAgICAgIChXZWJDb3JlOjpjb29r
aWVzRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9yRE9NKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAg
ICAgVXBkYXRlZCBmb3IgbmV3IGZ1bmN0aW9uIHNpZ25hdHVyZXMsIGFuZCB1c2UgdGhlIHNhbWUg
Y3Jvc3MtcGxhdGZvcm0gbG9naWMgZm9yCisgICAgICAgIGNob29zaW5nIGEgY29va2llIGphci4K
KworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmg6IERvbid0
IGluY2x1ZGUgdW5uZWNlc3NhcnkgQ29vaWVKYXIuaC4KKyAgICAgICAgCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dENvb2tpZXNGcm9tRE9NKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JET00pOgorICAg
ICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UmF3Q29va2ll
cyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAg
ICAgICBVcGRhdGVkIGZvciBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlcy4KKwogMjAxMi0xMS0wOCAg
RWxsaW90dCBTcHJlaG4gIDxlc3ByZWhuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTa2lwIGZy
YW1lIG93bmVyIGRpc2Nvbm5lY3Qgd2hlbiB0aGVyZSdzIG5vIGZyYW1lcwpJbmRleDogU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zODU3LDYgKzM4NTcsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZVBvbGljeS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkTWV0YWRhdGEuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaCBcCisJU291cmNlL1dlYkNv
cmUvbG9hZGVyL0Nvb2tpZUphci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVK
YXIuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCBc
CiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUu
Y3BwIFwKQEAgLTQyNDcsNyArNDI0OSw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0Nvb2tpZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVzU3RyYXRl
Z3kuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q3Vyc29yLmNwcCBcCkBAIC00NzE1LDYgKzQ3MTYsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJveHlTZXJ2ZXIuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuaCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFjZUhhc2guaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2UuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFjZS5oIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UJKHJldmlzaW9uIDEzMzkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQkod29ya2luZyBjb3B5
KQpAQCAtMTQxLDYgKzE0MSw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RP
UklFUwogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9ibGFja2JlcnJ5
L0VkaXRvckJsYWNrQmVycnkuY3BwCiAgICAgZWRpdGluZy9ibGFja2JlcnJ5L1NtYXJ0UmVwbGFj
ZUJsYWNrQmVycnkuY3BwCisgICAgbG9hZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJy
eS5jcHAKICAgICBwYWdlL2JsYWNrYmVycnkvQWNjZXNzaWJpbGl0eU9iamVjdEJsYWNrQmVycnku
Y3BwCiAgICAgcGFnZS9ibGFja2JlcnJ5L0RyYWdDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAKICAg
ICBwYWdlL2JsYWNrYmVycnkvRXZlbnRIYW5kbGVyQmxhY2tCZXJyeS5jcHAKQEAgLTE0OCw3ICsx
NDksNiBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ibGFja2Jl
cnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuY3BwCiAgICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9Db250
ZXh0TWVudUJsYWNrQmVycnkuY3BwCiAgICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9Db250ZXh0TWVu
dUl0ZW1CbGFja0JlcnJ5LmNwcAotICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxh
Y2tCZXJyeS5jcHAKICAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5L0N1cnNvckJsYWNrQmVycnkuY3Bw
CiAgICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9EcmFnRGF0YUJsYWNrQmVycnkuY3BwCiAgICAgcGxh
dGZvcm0vYmxhY2tiZXJyeS9EcmFnSW1hZ2VCbGFja0JlcnJ5LmNwcApJbmRleDogU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5n
IGNvcHkpCkBAIC04MTcsNiArODE3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgbG9hZGVyL2NhY2hl
L0NhY2hlZFNWR0RvY3VtZW50LmNwcCBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3Vt
ZW50LmggXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCBcCisgICAg
bG9hZGVyL0Nvb2tpZUphci5jcHAgXAogICAgIGxvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRy
b2wuY3BwIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAg
XAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgXApAQCAtMTk0OSw2
ICsxOTUwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3Vt
ZW50LmggXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmggXAogICAgIGxv
YWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oIFwKKyAgICBsb2FkZXIvQ29va2llSmFyLmggXAogICAg
IGxvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCBcCiAgICAgbG9hZGVyL0Nyb3NzT3Jp
Z2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmggXApAQCAtMjIzOCw2ICsyMjQwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxh
dGZvcm0vbmV0d29yay9NSU1FU25pZmZpbmcuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JraW5nQ29udGV4dC5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlm
aWVyLmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaCBcCiAgICAg
cGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2UuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9Qcm94eVNlcnZlci5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3F0L1F0TUlNRVR5cGVTbmlm
ZmVyLmggXApAQCAtMjI1MCw2ICsyMjUzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXNwb25zZUJhc2UuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9OZXR3b3JrU3Rh
dGVOb3RpZmllclByaXZhdGUuaCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJR
dC5oIFwKICAgICBwbGF0Zm9ybS9QbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIFwKICAgICBwbGF0Zm9y
bS9QbGF0Zm9ybU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIFwKICAgICBwbGF0Zm9ybS9QbGF0Zm9y
bVRvdWNoRXZlbnQuaCBcCkBAIC0yMjU3LDcgKzIyNjEsNiBAQCBIRUFERVJTICs9IFwKICAgICBw
bGF0Zm9ybS9Qb3B1cE1lbnUuaCBcCiAgICAgcGxhdGZvcm0vUmVmZXJyZXJQb2xpY3kuaCBcCiAg
ICAgcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaCBcCi0gICAgcGxhdGZvcm0vcXQvQ29va2llSmFy
UXQuaCBcCiAgICAgcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaCBcCiAgICAgcGxhdGZvcm0v
cXQvUVN0eWxlRmFjYWRlLmggXAogICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmgg
XApAQCAtMjgwNCw2ICsyODA3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
RE5TUmVzb2x2ZVF1ZXVlLmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9NSU1FU25pZmZpbmcu
Y3BwIFwKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0LmNwcCBcCiAgICAgcGxh
dGZvcm0vbmV0d29yay9xdC9DcmVkZW50aWFsU3RvcmFnZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0v
bmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9x
dC9SZXNvdXJjZVJlcXVlc3RRdC5jcHAgXApAQCAtMjgxNyw3ICsyODIxLDYgQEAgU09VUkNFUyAr
PSBcCiAgICAgcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9D
b250ZXh0TWVudUl0ZW1RdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0NvbnRleHRNZW51UXQuY3Bw
IFwKLSAgICBwbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0N1
cnNvclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvRHJhZ0RhdGFRdC5jcHAgXAogICAgIHBsYXRm
b3JtL3F0L0RyYWdJbWFnZVF0LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAx
MzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTE1OSw2ICsxNTksNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaCcsCisgICAgICAgICAgICAnbG9h
ZGVyL0Nvb2tpZUphci5oJywKICAgICAgICAgICAgICdsb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZS5oJywKICAgICAgICAgICAgICdsb2FkZXIvRG9jdW1lbnRMb2FkVGltaW5n
LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9Eb2N1bWVudExvYWRlci5oJywKQEAgLTI3Myw3ICsy
NzQsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRleHRNZW51LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9D
b29raWUuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vQ29va2llSmFyLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL0Nvb2tpZXNTdHJhdGVneS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9D
dXJzb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaCcsCkBAIC0z
MTIsNiArMzEyLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L1BsYXRmb3JtQ29va2llSmFyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtV2hl
ZWxFdmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Qb3B1cE1lbnUuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgnLApAQCAtMjk1NSw2ICsyOTU2LDcgQEAK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmgnLAogICAgICAgICAg
ICAgJ2xvYWRlci9DYWNoZWRNZXRhZGF0YS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9DYWNo
ZWRNZXRhZGF0YS5oJywKKyAgICAgICAgICAgICdsb2FkZXIvQ29va2llSmFyLmNwcCcsCiAgICAg
ICAgICAgICAnbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAnLAogICAgICAgICAg
ICAgJ2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCcsCiAgICAgICAgICAgICAnbG9h
ZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwJywKQEAgLTMwNjIsNiArMzA2
NCw3IEBACiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCcsCiAgICAg
ICAgICAgICAnbG9hZGVyL2NmL1Jlc291cmNlTG9hZGVyQ0ZOZXQuY3BwJywKICAgICAgICAgICAg
ICdsb2FkZXIvY2hyb21pdW0vQ2FjaGVkUmF3UmVzb3VyY2VDaHJvbWl1bS5jcHAnLAorICAgICAg
ICAgICAgJ2xvYWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAg
ICAgJ2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHAn
LAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9SZXNvdXJjZUxvYWRlckNocm9taXVtLmNw
cCcsCiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL1N1YnJlc291cmNlTG9hZGVyQ2hyb21p
dW0uY3BwJywKQEAgLTU0NjYsNyArNTQ2OSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vbWFj
L0NsaXBib2FyZE1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0NvbnRleHRNZW51
SXRlbU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1t
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9tYWMvQ3Vyc29yTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMv
RHJhZ0RhdGFNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMu
bW0nLApAQCAtNTU4NCw3ICs1NTg2LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
bmV0d29yay9jaHJvbWl1bS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2hyb21p
dW0uY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUph
ckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9E
TlNDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0v
UmVzb3VyY2VFcnJvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVt
L1Jlc291cmNlSGFuZGxlLmNwcCcsCkBAIC01NjEyLDYgKzU2MTMsNyBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbScsCisg
ICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVTdG9yYWdlTWFjLm1tJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbScsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0nLApA
QCAtNTYyMiw2ICs1NjI0LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL21hYy9S
ZXNvdXJjZVJlc3BvbnNlTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL21h
Yy9XZWJDb3JlVVJMUmVzcG9uc2UubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsv
cXQvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbmV0
d29yay9xdC9Db29raWVKYXJRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsv
cXQvQ3JlZGVudGlhbFN0b3JhZ2VRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvcXQvTmV0d29ya1N0YXRlTm90aWZpZXJQcml2YXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL25ldHdvcmsvcXQvTmV0d29ya1N0YXRlTm90aWZpZXJRdC5jcHAnLApAQCAtNTY3Miw3ICs1
Njc1LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9xdC9Db250ZXh0TWVudUl0ZW1RdC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL3F0L0NvbnRleHRNZW51UXQuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9x
dC9Db29raWVKYXJRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3F0L0N1cnNvclF0LmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvRHJhZ0RhdGFRdC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTMzOTI2KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkK
QEAgLTI3NDE1LDYgKzI3NDE1LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxDb29raWVKYXIuY3BwIgorCQkJCT4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ29va2llSmFyLmgiCisJ
CQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxD
cm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTI4Mjg3
LDEwICsyODI5NSw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXENvb2tpZUphci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxDb29raWVzU3RyYXRlZ3kuaCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CkBAIC0zMjUxOCw2ICszMjUyMiwxMCBAQAogCQkJCQk+CiAJCQkJPC9G
aWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xQ
bGF0Zm9ybUNvb2tpZUphci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xQcm90ZWN0aW9uU3BhY2UuY3BwIgog
CQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMzOTI2KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjcxLDggKzMyNzEsNiBAQAogCQk5MzUwMEYzMjEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3Jv
bGxlckltcERldGFpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzNTAwRjMxMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5o
ICovOyB9OwogCQk5MzUyMDdCRTA5QkQ0MTBBMDBGMjAzOEQgLyogTG9jYWxpemVkU3RyaW5ncy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MjA3QkQw
OUJENDEwQTAwRjIwMzhEIC8qIExvY2FsaXplZFN0cmluZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzUyMDg0NTA5QkQ0M0I5MDBGMjAzOEQg
LyogTGFuZ3VhZ2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzUyMDg0NDA5QkQ0M0I5MDBGMjAzOEQgLyogTGFuZ3VhZ2UubW0gKi87IH07Ci0JCTkz
NTIwODc3MDlCRDQ1MzQwMEYyMDM4RCAvKiBDb29raWVKYXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzUyMDg3NjA5QkQ0NTM0MDBGMjAzOEQgLyog
Q29va2llSmFyLm1tICovOyB9OwotCQk5MzUyMDg4MjA5QkQ0NUU5MDBGMjAzOEQgLyogQ29va2ll
SmFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzUy
MDg4MTA5QkQ0NUU5MDBGMjAzOEQgLyogQ29va2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM1MzY3NkIwOUFFRDg4QjAwRDM1Q0Q2IC8q
IFNjcm9sbFZpZXdNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzUzNjc2QTA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5tbSAqLzsg
fTsKIAkJOTM1QzQ3NjMwOUFDNENFNjAwQTZBQUI0IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
NUM0NzYyMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgg
Ki87IH07CiAJCTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUM0
NzY2MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjA0Nyw2ICs2MDQ1LDEw
IEBACiAJCUUxMzk4NjYzMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMzk4NjYxMTU0Nzg0
NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmNwcCAqLzsgfTsKIAkJRTEzOTg2NjQxNTQ3ODQ3
NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxMzk4NjYyMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29s
dmVyLmggKi87IH07CiAJCUUxM0YwMUYxMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdl
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEz
RjAxRjAxMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMubW0gKi87IH07CisJCUUx
NDI0QzhBMTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDODkxNjRCM0I0RTAwRjMy
RDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggKi87IH07CisJCUUxNDI0QzkwMTY0QjQ2MEIwMEYz
MkQ0MCAvKiBDb29raWVKYXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1t
ICovOyB9OworCQlFMTQyNEM5MzE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0QzkxMTY0QjUy
QzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuY3BwICovOyB9OworCQlFMTQyNEM5NDE2NEI1MkM4MDBG
MzJENDAgLyogQ29va2llSmFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTQyNEM5MjE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE0RjFDNDQxNEI1
REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0RjFDNDIxNEI1REFD
NjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwICovOyB9Owog
CQlFMTRGMUM0NTE0QjVEQUM2MDBFQTkwMDkgLyogSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0
RjFDNDMxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTVB
MzZENzExMDQ1NzIwMDBCN0I2MzkgLyogWE1MTlNOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1QTM2RDYxMTA0NTcyMDAwQjdCNjM5IC8qIFhN
TE5TTmFtZXMuaCAqLzsgfTsKQEAgLTEwNDk2LDggKzEwNDk4LDYgQEAKIAkJOTM1MDBGMzExM0ZE
RTNCRTAwOTlFQzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzNTIwN0JEMDlCRDQxMEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsaXplZFN0cmluZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM1MjA4NDQwOUJENDNCOTAwRjIwMzhEIC8q
IExhbmd1YWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTGFu
Z3VhZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzNTIwODc2MDlCRDQ1MzQw
MEYyMDM4RCAvKiBDb29raWVKYXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBDb29raWVKYXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzNTIw
ODgxMDlCRDQ1RTkwMEYyMDM4RCAvKiBDb29raWVKYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29va2llSmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
NTM2NzZBMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsVmlld01hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTM1QzQ3NjIwOUFDNENFNjAwQTZBQUI0IC8qIE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzVDNDc2NjA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM0NDgsNiArMTM0NDgsMTAgQEAKIAkJRTEz
OTg2NjIxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTNGMDFFQTEyNzBFMTBEMDBERkJBNzEgLyogQ29va2llU3RvcmFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29raWVTdG9yYWdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9y
YWdlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2ll
U3RvcmFnZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE0MjRDODkxNjRC
M0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFBsYXRmb3JtQ29va2llSmFyLmg7IHBhdGggPSBuZXR3b3JrL1BsYXRmb3Jt
Q29va2llSmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNDI0QzhGMTY0QjQ2
MEIwMEYzMkQ0MCAvKiBDb29raWVKYXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBDb29raWVKYXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29va2llSmFyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTE0MjRDOTIxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29raWVKYXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTE0RjFDNDIxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxNEYxQzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTE1QTM2RDYxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MTlNOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTU3MTMsNiArMTU3MTcsNyBAQAogCQkJCTUxNEM3NjQ0MENFOTIzNEUwMDdF
RjNDRCAvKiBGb3JtRGF0YVN0cmVhbU1hYy5oICovLAogCQkJCTUxNEM3NjQ1MENFOTIzNEUwMDdF
RjNDRCAvKiBGb3JtRGF0YVN0cmVhbU1hYy5tbSAqLywKIAkJCQkxQTdGQTY0NzBEREEzQ0JBMDAy
OEY4QTUgLyogTmV0d29ya1N0YXRlTm90aWZpZXJNYWMuY3BwICovLAorCQkJCUUxNDI0QzhGMTY0
QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVKYXJNYWMubW0gKi8sCiAJCQkJNTE0Qzc2NDYwQ0U5MjM0
RTAwN0VGM0NEIC8qIFJlc291cmNlRXJyb3JNYWMubW0gKi8sCiAJCQkJNTE0Qzc2NDcwQ0U5MjM0
RTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlTWFjLm1tICovLAogCQkJCTUxNEM3NjQ5MENFOTIz
NEUwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RNYWMubW0gKi8sCkBAIC0xNTczNSw3ICsxNTc0
MCw2IEBACiAJCQkJMkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5tbSAq
LywKIAkJCQkwNjAyN0NCMjBCMUNDMDNEMDA4ODRCMkQgLyogQ29udGV4dE1lbnVJdGVtTWFjLm1t
ICovLAogCQkJCTkzQjZBMEU5MEIwQkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSAq
LywKLQkJCQk5MzUyMDg3NjA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tICovLAogCQkJ
CUY1ODc4NEYwMDJERTM3NTkwMUVBNDEyMiAvKiBDdXJzb3JNYWMubW0gKi8sCiAJCQkJNUQ4QzRE
QkQxNDI4MjIyQzAwMjZDRTcyIC8qIERpc3BsYXlTbGVlcERpc2FibGVyLmNwcCAqLywKIAkJCQk1
RDhDNERCRTE0MjgyMjJDMDAyNkNFNzIgLyogRGlzcGxheVNsZWVwRGlzYWJsZXIuaCAqLywKQEAg
LTIwNjk2LDYgKzIwNzAwLDggQEAKIAkJCQlFMUM0MTYxNjBGNjU2MzE4MDA5MkQyRkIgLyogQ3Jv
c3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCAqLywKIAkJCQk0RkM4NTM0OTE2NDQyNzFCMDBEMUMy
NzUgLyogQ2FjaGVkTWV0YWRhdGEuY3BwICovLAogCQkJCTRGQzg1MzRBMTY0NDI3MUIwMEQxQzI3
NSAvKiBDYWNoZWRNZXRhZGF0YS5oICovLAorCQkJCUUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAv
KiBDb29raWVKYXIuY3BwICovLAorCQkJCUUxNDI0QzkyMTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29r
aWVKYXIuaCAqLywKIAkJCQlFMUM0MTYxMTBGNjU2MkZEMDA5MkQyRkIgLyogQ3Jvc3NPcmlnaW5B
Y2Nlc3NDb250cm9sLmggKi8sCiAJCQkJRTFDNDE1REQwRjY1NUQ3QzAwOTJEMkZCIC8qIENyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwICovLAogCQkJCUUxQzQxNUQ5MEY2NTVENkYw
MDkyRDJGQiAvKiBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmggKi8sCkBAIC0yMDg2
MCw3ICsyMDg2Niw2IEBACiAJCQkJOTNCNkEwRTUwQjBCQ0E1QzAwRjUwMjdBIC8qIENvbnRleHRN
ZW51LmggKi8sCiAJCQkJMDYwMjdDQUMwQjFDQkZDMDAwODg0QjJEIC8qIENvbnRleHRNZW51SXRl
bS5oICovLAogCQkJCUQ4QjYxNTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCAqLywKLQkJ
CQk5MzUyMDg4MTA5QkQ0NUU5MDBGMjAzOEQgLyogQ29va2llSmFyLmggKi8sCiAJCQkJMzM5QjVC
NjIxMzFEQUEzMjAwRjQ4RDAyIC8qIENvb2tpZXNTdHJhdGVneS5oICovLAogCQkJCTJFNDM0NjU2
MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi8sCiAJCQkJMkU0MzQ2
NTcwRjU0NkE5OTAwQjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi8sCkBAIC0yMDkyMyw2
ICsyMDkyOCw3IEBACiAJCQkJOThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVu
dGVkLmggKi8sCiAJCQkJNEIyNzA4QzUwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCAq
LywKIAkJCQlDNUY3NjVCNDE0RTFENDE0MDA2Qzg5OUIgLyogUGFzdGVib2FyZFN0cmF0ZWd5Lmgg
Ki8sCisJCQkJRTE0MjRDODkxNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmgg
Ki8sCiAJCQkJQkM1Qzc2MjgxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQuY3BwICov
LAogCQkJCUJDNUM3NjI5MTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9ybUV2ZW50LmggKi8sCiAJ
CQkJQTcyM0Y3N0ExNDg0Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggKi8s
CkBAIC0yMjYyNyw3ICsyMjYzMyw2IEBACiAJCQkJN0FERTcyMjYxMENCQkI5QjAwNkIzQjNBIC8q
IENvbnRleHRNZW51UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDI5MTJCMDI2
NzYwMEMxQTM1OSAvKiBDb252b2x2ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlEOEI2MTUy
RjEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggaW4gSGVhZGVycyAqLywKLQkJCQk5MzUyMDg4
MjA5QkQ0NUU5MDBGMjAzOEQgLyogQ29va2llSmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMzlC
NUI2MzEzMURBQTMyMDBGNDhEMDIgLyogQ29va2llc1N0cmF0ZWd5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkzM0QwMjEyRDEzMURCMzdCMDA0MDkxQTggLyogQ29va2llU3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0VFNjg0NjQxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0b3JhZ2VDRk5l
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTY4Nyw2ICsyNTY5Miw4IEBACiAJCQkJM0ZGRkY5QTkx
NTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNDMzhCRkYxNjQ0NzNDNzAwMDkxRUIyIC8qIFNjcm9sbGluZ1N0YXRlRml4ZWROb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0MzOEMwMzE2NDQ3M0REMDAwOTFFQjIgLyogU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTE0MjRDOEExNjRCM0I0RTAw
RjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTQyNEM5
NDE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDEx
RENCMTE2NEMzOUE4MDBENDlCQzEgLyogV2lkdGhDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0yNjIwNiw3
ICsyNjIxMyw2IEBACiAJCQkJMDYwMjdDQjMwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRleHRNZW51
SXRlbU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzQjZBMEVBMEIwQkNBODQwMEY1MDI3QSAv
KiBDb250ZXh0TWVudU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI4MTJCMDI2NzYw
MEMxQTM1OSAvKiBDb252b2x2ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzNTIwODc3
MDlCRDQ1MzQwMEYyMDM4RCAvKiBDb29raWVKYXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk3RUU2
ODQ2MjEyRDI2RTM4MDBFNzk0MTUgLyogQ29va2llSmFyQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0VFNjg0NjMxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0b3JhZ2VDRk5ldC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3Rv
cmFnZU1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMjg3NzQsNiArMjg3ODAsOCBAQAogCQkJCTkz
QzM4QkZFMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5M0MzOEMwNDE2NDQ3M0REMDAwOTFFQjIgLyogU2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTRGQzg1MzRDMTY0NDI3MjMwMEQxQzI3
NSAvKiBDYWNoZWRNZXRhZGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTQyNEM5MDE2NEI0
NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTE0MjRD
OTMxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29va2llSmFyLmgi
CisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Db29raWVKYXIuaCIKKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9S
TShCTEFDS0JFUlJZKQorI2Vycm9yIENocm9taXVtIGFuZCBCbGFja2JlcnJ5IGN1cnJlbnRseSB1
c2UgYSBmb3JrIG9mIHRoaXMgZmlsZSBiZWNhdXNlIG9mIGxheWVyaW5nIHZpb2xhdGlvbnMKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBOZXR3b3JraW5nQ29udGV4dCog
bmV0d29ya2luZ0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIGlmICgh
ZG9jdW1lbnQpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1l
TG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7CisgICAgaWYgKCFsb2FkZXIpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Cit9
CisKK1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsKQoreworICAgIHJldHVybiBjb29raWVzRm9yRE9NKG5ldHdvcmtpbmdDb250ZXh0KGRvY3Vt
ZW50KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHVybCk7Cit9CisKK3ZvaWQg
c2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBjb29raWVTdHJpbmcpCit7CisgICAgc2V0Q29va2llc0Zyb21ET00obmV0d29ya2luZ0Nv
bnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJsLCBj
b29raWVTdHJpbmcpOworfQorCitib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCkKK3sKKyAgICByZXR1cm4gY29va2llc0VuYWJsZWQobmV0d29ya2luZ0NvbnRleHQo
ZG9jdW1lbnQpKTsKK30KKworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCks
IHVybCk7Cit9CisKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMpCit7CisgICAgcmV0dXJu
IGdldFJhd0Nvb2tpZXMobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZXMp
OworfQorCit2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQoreworICAgIGRlbGV0ZUNvb2tp
ZShuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIHVybCwgY29va2llTmFtZSk7Cit9CisKK3Zv
aWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7
CisgICAgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoMCwgaG9zdG5hbWVzKTsKK30KKwordm9pZCBk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoMCwgaG9zdG5hbWUpOworfQorCit2b2lkIGRlbGV0ZUFs
bENvb2tpZXMoKQoreworICAgIGRlbGV0ZUFsbENvb2tpZXMoMCk7Cit9CisKK30KClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvQ29va2llSmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzM5MjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0Nvb2tpZUphci5oOjEzMzkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVK
YXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENvb2tpZUphcl9oCisjZGVmaW5lIENvb2tpZUphcl9oCisKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgS1VSTDsKK3N0cnVjdCBDb29raWU7CisK
Ky8vIFRoZXNlIHR3byBmdW5jdGlvbnMgaW1wbGVtZW50IGRvY3VtZW50LmNvb2tpZSBBUEksIHdp
dGggc3BlY2lhbCBydWxlcyBmb3IgSHR0cE9ubHkgY29va2llcy4KK1N0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwordm9pZCBzZXRDb29raWVzKERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworCisvLyBUaGVzZSBtZXRob2RzIHVzZSBjdXJy
ZW50IGNvb2tpZSBzdG9yYWdlLCB0aHVzIHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50
byBhY2NvdW50LgorYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOworU3RyaW5n
IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYpOworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZl
Y3RvcjxDb29raWU+Jik7Cit2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKworLy8gVGhlc2UgZnVuY3Rpb25zIGFsd2F5cyBhY2Nl
c3MgZGVmYXVsdCBjb29raWUgc3RvcmFnZSwgbm90IHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1v
ZGUgaW50byBhY2NvdW50Lgordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0
cmluZz4mIGhvc3RuYW1lcyk7Cit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKTsKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygpOworCit9CisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuaAkocmV2aXNpb24gMTMzOTI2KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDgs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOSwxMyArMzksMTMgQEAgc3RydWN0IENvb2tpZTsKIAogLy8gVGhl
c2UgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgZG9jdW1lbnQuY29va2llIEFQSSwgd2l0aCBzcGVj
aWFsIHJ1bGVzIGZvciBIdHRwT25seSBjb29raWVzLgogU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJik7Ci12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJik7Cit2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpOwogCiAvLyBUaGVzZSBtZXRob2RzIHVz
ZSBjdXJyZW50IGNvb2tpZSBzdG9yYWdlLCB0aHVzIHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1v
ZGUgaW50byBhY2NvdW50LgogYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwog
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYpOwogYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYsIFZlY3RvcjxDb29raWU+Jik7Ci12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKK3ZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7CiAKIC8vIFRo
ZXNlIGZ1bmN0aW9ucyBhbHdheXMgYWNjZXNzIGRlZmF1bHQgY29va2llIHN0b3JhZ2UsIG5vdCB0
YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4KIHZvaWQgZ2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tC
ZXJyeS5jcHAJKHJldmlzaW9uIDEzMzkyNikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcDoxMzM5MjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMu
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLTIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgorCisjaW5jbHVkZSAi
Q29va2llLmgiCisjaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnkuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwTG9hZERlZmVycmVyLmgiCisj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIGNvb2tpZXMoRG9jdW1lbnQgY29uc3QqIGRvY3Vt
ZW50LCBLVVJMIGNvbnN0JiB1cmwpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7CisKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmICghKGZyYW1l
ICYmIGZyYW1lLT5sb2FkZXIoKSAmJiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKCFzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNs
aWVudEJsYWNrQmVycnkqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+Y29va2llc0VuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgQVNTRVJUKGRvY3VtZW50ICYm
IHVybCA9PSBkb2N1bWVudC0+Y29va2llVVJMKCkpOworICAgIC8vICdIdHRwT25seScgY29va2ll
cyBzaG91bGQgbm8gYmUgYWNjZXNzaWJsZSBmcm9tIHNjcmlwdHMsIHNvIHdlIGZpbHRlciB0aGVt
IG91dCBoZXJlCisgICAgcmV0dXJuIGNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWUodXJsLCBOb0h0
dHBPbmx5Q29va2llKTsKK30KKwordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwg
S1VSTCBjb25zdCYgdXJsLCBTdHJpbmcgY29uc3QmIHZhbHVlKQoreworICAgIEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5w
YWdlKCkgOiAwOworCisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IShmcmFtZSAmJiBmcmFtZS0+bG9hZGVyKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGll
bnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPmNvb2tpZXNFbmFibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChkb2N1bWVudCAmJiB1cmwgPT0gZG9j
dW1lbnQtPmNvb2tpZVVSTCgpKTsKKyAgICBjb29raWVNYW5hZ2VyKCkuc2V0Q29va2llcyh1cmws
IHZhbHVlLCBOb0h0dHBPbmx5Q29va2llKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChEb2N1
bWVudCBjb25zdCopCit7CisgICAgLy8gRklYTUUuIEN1cnJlbnRseSBjb29raWUgaXMgZW5hYmxl
ZCBieSBkZWZhdWx0LCBubyBzZXR0aW5nIG9uIHByb3BlcnR5IHBhZ2UuCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCit7CisgICAgVmVjdG9y
PFBhcnNlZENvb2tpZSo+IHJlc3VsdDsKKyAgICBjb29raWVNYW5hZ2VyKCkuZ2V0UmF3Q29va2ll
cyhyZXN1bHQsIHVybCwgV2l0aEh0dHBPbmx5Q29va2llcyk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyBpKyspCisgICAgICAgIHJlc3VsdFtpXS0+YXBwZW5kV2Vi
Q29yZUNvb2tpZShyYXdDb29raWVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBkZWxl
dGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgY29va2llTmFtZSkKK3sKKyAgICAvLyBDb29raWVzIGFyZSBub3QgYm91bmQgdG8g
dGhlIGRvY3VtZW50LiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8gcGFzcworICAgIC8vIGlu
IHRoZSBkb2N1bWVudCBvYmplY3QgdG8gZmluZCB0aGUgdGFyZ2V0ZWQgY29va2llcyBpbiBjb29r
aWUgbWFuYWdlci4KKyAgICBjb29raWVNYW5hZ2VyKCkucmVtb3ZlQ29va2llV2l0aE5hbWUodXJs
LCBjb29raWVOYW1lKTsKK30KKworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQoreworICAgIEFTU0VS
VChkb2N1bWVudCk7CisKKyAgICBpZiAoIShkb2N1bWVudC0+ZnJhbWUoKSAmJiBkb2N1bWVudC0+
ZnJhbWUoKS0+bG9hZGVyKCkgJiYgZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQo
KSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmICghc3RhdGljX2Nhc3Q8RnJh
bWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5j
bGllbnQoKSktPmNvb2tpZXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIHJldHVybiBjb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llKHVybCwgV2l0aEh0dHBPbmx5Q29v
a2llcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3Bw
CShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYmxhY2tiZXJyeS9D
b29raWVKYXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBVbmZvcmsuIFRoaXMgZmlsZSBpcyBm
b3JrZWQgYmVjYXVzZSBhbGwgb3RoZXIgcGxhdGZvcm1zIHVzZSBOZXR3b3JraW5nQ29udGV4dCB0
byBhY2Nlc3MgY29va2llIGphciwgbm90IERvY3VtZW50IG9yIEZyYW1lLgorCiBTdHJpbmcgY29v
a2llcyhEb2N1bWVudCBjb25zdCogZG9jdW1lbnQsIEtVUkwgY29uc3QmIHVybCkKIHsKICAgICBG
cmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24g
MTMzOTI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nv
b2tpZUphckNocm9taXVtLmNwcDoxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hy
b21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICog
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgorCisjaW5j
bHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIHNldENvb2tpZXMoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGRvY3VtZW50LCB1cmwsIHZhbHVlKTsK
K30KKworU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhkb2N1bWVudCwg
dXJsKTsKK30KKworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBQbGF0Zm9y
bVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOwor
fQorCitib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAg
ICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChkb2N1bWVudCk7Cit9CisK
K2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCit7CisgICAgcmV0dXJuIFBsYXRmb3Jt
U3VwcG9ydDo6cmF3Q29va2llcyhkb2N1bWVudCwgdXJsLCByYXdDb29raWVzKTsKK30KKwordm9p
ZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0
OjpkZWxldGVDb29raWUoZG9jdW1lbnQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAg
Ly8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK30KKwordm9pZCBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICAvLyBGSVhNRTogTm90IHll
dCBpbXBsZW1lbnRlZAorfQorCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQoreworICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNo
cm9taXVtLmNwcAkocmV2aXNpb24gMTMzOTI2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2No
cm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBVbmZvcmsuIFRoaXMgZmls
ZSBpcyBmb3JrZWQgYmVjYXVzZSBhbGwgb3RoZXIgcGxhdGZvcm1zIHVzZSBOZXR3b3JraW5nQ29u
dGV4dCB0byBhY2Nlc3MgY29va2llIGphciwgbm90IERvY3VtZW50IG9yIEZyYW1lLgorCiB2b2lk
IHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7CiAgICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGRvY3VtZW50
LCB1cmwsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZp
c2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IENvb2tpZUphcl9oCi0jZGVmaW5lIENvb2tpZUphcl9oCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIERvY3VtZW50OwotY2xhc3MgS1VSTDsKLXN0cnVjdCBDb29raWU7Ci0KLS8vIFRoZXNl
IHR3byBmdW5jdGlvbnMgaW1wbGVtZW50IGRvY3VtZW50LmNvb2tpZSBBUEksIHdpdGggc3BlY2lh
bCBydWxlcyBmb3IgSHR0cE9ubHkgY29va2llcy4KLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYpOwotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiwgY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYpOwotCi0vLyBUaGVzZSBtZXRob2RzIHVzZSBjdXJyZW50IGNvb2tp
ZSBzdG9yYWdlLCB0aHVzIHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50
LgotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotU3RyaW5nIGNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29r
aWU+Jik7Ci12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmKTsKLQotLy8gVGhlc2UgZnVuY3Rpb25zIGFsd2F5cyBhY2Nlc3MgZGVmYXVs
dCBjb29raWUgc3RvcmFnZSwgbm90IHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBh
Y2NvdW50Lgotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhv
c3RuYW1lcyk7Ci12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKTsKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpOwotCi19Ci0KLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tp
ZUphckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDExMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAtMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCi0KLSNpbmNsdWRlICJDb29r
aWUuaCIKLSNpbmNsdWRlICJDb29raWVNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJy
eS5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKLSNpbmNs
dWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1TdHJpbmcgY29va2llcyhEb2N1bWVudCBjb25zdCogZG9jdW1lbnQs
IEtVUkwgY29uc3QmIHVybCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWUgPyBmcmFtZS0+cGFnZSgpIDogMDsKLQotICAgIGlm
ICghcGFnZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKCEoZnJhbWUgJiYg
ZnJhbWUtPmxvYWRlcigpICYmIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoIXN0YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50
QmxhY2tCZXJyeSo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5jb29raWVzRW5hYmxlZCgp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBBU1NFUlQoZG9jdW1lbnQgJiYgdXJs
ID09IGRvY3VtZW50LT5jb29raWVVUkwoKSk7Ci0gICAgLy8gJ0h0dHBPbmx5JyBjb29raWVzIHNo
b3VsZCBubyBiZSBhY2Nlc3NpYmxlIGZyb20gc2NyaXB0cywgc28gd2UgZmlsdGVyIHRoZW0gb3V0
IGhlcmUKLSAgICByZXR1cm4gY29va2llTWFuYWdlcigpLmdldENvb2tpZSh1cmwsIE5vSHR0cE9u
bHlDb29raWUpOwotfQotCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBLVVJM
IGNvbnN0JiB1cmwsIFN0cmluZyBjb25zdCYgdmFsdWUpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2Uo
KSA6IDA7Ci0KLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghKGZy
YW1lICYmIGZyYW1lLT5sb2FkZXIoKSAmJiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEJs
YWNrQmVycnkqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+Y29va2llc0VuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGRvY3VtZW50ICYmIHVybCA9PSBkb2N1bWVu
dC0+Y29va2llVVJMKCkpOwotICAgIGNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKHVybCwgdmFs
dWUsIE5vSHR0cE9ubHlDb29raWUpOwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVkKERvY3VtZW50
IGNvbnN0KikKLXsKLSAgICAvLyBGSVhNRS4gQ3VycmVudGx5IGNvb2tpZSBpcyBlbmFibGVkIGJ5
IGRlZmF1bHQsIG5vIHNldHRpbmcgb24gcHJvcGVydHkgcGFnZS4KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKLXsKLSAgICBWZWN0b3I8UGFy
c2VkQ29va2llKj4gcmVzdWx0OwotICAgIGNvb2tpZU1hbmFnZXIoKS5nZXRSYXdDb29raWVzKHJl
c3VsdCwgdXJsLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJlc3VsdC5zaXplKCk7IGkrKykKLSAgICAgICAgcmVzdWx0W2ldLT5hcHBlbmRXZWJDb3Jl
Q29va2llKHJhd0Nvb2tpZXMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIGRlbGV0ZUNv
b2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBjb29raWVOYW1lKQotewotICAgIC8vIENvb2tpZXMgYXJlIG5vdCBib3VuZCB0byB0aGUg
ZG9jdW1lbnQuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCB0byBwYXNzCi0gICAgLy8gaW4gdGhl
IGRvY3VtZW50IG9iamVjdCB0byBmaW5kIHRoZSB0YXJnZXRlZCBjb29raWVzIGluIGNvb2tpZSBt
YW5hZ2VyLgotICAgIGNvb2tpZU1hbmFnZXIoKS5yZW1vdmVDb29raWVXaXRoTmFtZSh1cmwsIGNv
b2tpZU5hbWUpOwotfQotCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMICZ1cmwpCi17Ci0gICAgQVNTRVJUKGRv
Y3VtZW50KTsKLQotICAgIGlmICghKGRvY3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5mcmFt
ZSgpLT5sb2FkZXIoKSAmJiBkb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpKSkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKCFzdGF0aWNfY2FzdDxGcmFtZUxv
YWRlckNsaWVudEJsYWNrQmVycnkqPihkb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVu
dCgpKS0+Y29va2llc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
cmV0dXJuIGNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWUodXJsLCBXaXRoSHR0cE9ubHlDb29raWVz
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0Nvb2tpZUphci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvQ29va2llSmFyLm1tCShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4LCAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIkNvb2tpZUphci5oIgotCi0jaWYgIVVTRShDRk5FVFdPUkspCi0KLSNpbXBvcnQgIkJsb2Nr
RXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiQ29va2llLmgiCi0jaW1wb3J0ICJDb29raWVTdG9yYWdl
LmgiCi0jaW1wb3J0ICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKLSNpbXBvcnQgIkRvY3VtZW50Lmgi
Ci0jaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJDb29raWVzKE5TQXJyYXkgKnVu
ZmlsdGVyZWRDb29raWVzKQotewotICAgIE5TVUludGVnZXIgY291bnQgPSBbdW5maWx0ZXJlZENv
b2tpZXMgY291bnRdOwotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gZmlsdGVyZWRDb29r
aWVzKEFkb3B0TlMsIFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y291
bnRdKTsKLQotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW3VuZmlsdGVyZWRD
b29raWVzIG9iamVjdEF0SW5kZXg6aV07Ci0KLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2
MzI4ODM+IE9uIDEwLjUsIE5TSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkg
Y29va2llLAotICAgICAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLiBX
ZSBoYXZlIGEgd29ya2Fyb3VuZCBpbiBzZXRDb29raWVzKCkgdG8gcHJldmVudAotICAgICAgICAv
LyB0aGF0LCBidXQgd2UgYWxzbyBuZWVkIHRvIGF2b2lkIHNlbmRpbmcgY29va2llcyB0aGF0IHdl
cmUgcHJldmlvdXNseSBzdG9yZWQsIGFuZAotICAgICAgICAvLyB0aGVyZSdzIG5vIGhhcm0gdG8g
ZG9pbmcgdGhpcyBjaGVjayBiZWNhdXNlIHN1Y2ggYSBjb29raWUgaXMgbmV2ZXIgdmFsaWQuCi0g
ICAgICAgIGlmICghW1tjb29raWUgbmFtZV0gbGVuZ3RoXSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGlmIChbY29va2llIGlzSFRUUE9ubHldKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgW2ZpbHRlcmVkQ29va2llcy5nZXQoKSBhZGRPYmplY3Q6Y29va2llXTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwotfQotCi1TdHJpbmcgY29va2ll
cyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0Zv
clVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOwotICAgIHJldHVy
biBbW05TSFRUUENvb2tpZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6ZmlsdGVyQ29v
a2llcyhjb29raWVzKS5nZXQoKV0gb2JqZWN0Rm9yS2V5OkAiQ29va2llIl07Ci0KLSAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5n
IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYgdXJsKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TQXJy
YXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9y
YWdlKCkuZ2V0KCksIHVybCk7Ci0gICAgcmV0dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFk
ZXJGaWVsZHNXaXRoQ29va2llczpjb29raWVzXSBvYmplY3RGb3JLZXk6QCJDb29raWUiXTsKLQot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQot
Ci12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llU3RyKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLQotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29r
aWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKLSAgICAvLyB3aGljaCB3b3Vs
ZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgotICAgIGlmIChjb29raWVTdHIuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KLSAgICAvLyBjb29raWVzV2l0aFJlc3Bv
bnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEgdmFsdWUKLSAg
ICBTdHJpbmcgY29va2llU3RyaW5nID0gY29va2llU3RyLmNvbnRhaW5zKCc9JykgPyBjb29raWVT
dHIgOiBjb29raWVTdHIgKyAiPSI7Ci0KLSAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwotICAg
IFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJlZENvb2tpZXMgPSBmaWx0ZXJDb29raWVzKFtOU0hU
VFBDb29raWUgY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkczpbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0OmNvb2tpZVN0cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl0gZm9y
VVJMOmNvb2tpZVVSTF0pOwotICAgIEFTU0VSVChbZmlsdGVyZWRDb29raWVzLmdldCgpIGNvdW50
XSA8PSAxKTsKLQotICAgIHdrU2V0SFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGRvY3Vt
ZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci19Ci0KLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQotewotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBjb29raWVBY2NlcHRQb2xpY3kgPSBzdGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQ
b2xpY3k+KHdrR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShjdXJyZW50Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpLmdldCgpKSk7Ci0gICAgcmV0dXJuIGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBD
b29raWVBY2NlcHRQb2xpY3lBbHdheXMgfHwgY29va2llQWNjZXB0UG9saWN5ID09IE5TSFRUUENv
b2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwotCi0gICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4m
IHJhd0Nvb2tpZXMpCi17Ci0gICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVz
Rm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7Ci0gICAgTlNV
SW50ZWdlciBjb3VudCA9IFtjb29raWVzIGNvdW50XTsKLSAgICByYXdDb29raWVzLnJlc2VydmVD
YXBhY2l0eShjb3VudCk7Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbY29v
a2llcyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBOU1RpbWVJbnRlcnZhbCBleHBpcmVzID0g
W1tjb29raWUgZXhwaXJlc0RhdGVdIHRpbWVJbnRlcnZhbFNpbmNlMTk3MF0gKiAxMDAwOwotICAg
ICAgICByYXdDb29raWVzLnVuY2hlY2tlZEFwcGVuZChDb29raWUoW2Nvb2tpZSBuYW1lXSwgW2Nv
b2tpZSB2YWx1ZV0sIFtjb29raWUgZG9tYWluXSwgW2Nvb2tpZSBwYXRoXSwgZXhwaXJlcywKLSAg
ICAgICAgICAgIFtjb29raWUgaXNIVFRQT25seV0sIFtjb29raWUgaXNTZWN1cmVdLCBbY29va2ll
IGlzU2Vzc2lvbk9ubHldKSk7Ci0gICAgfQotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1l
bnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU1VSTCAqY29va2llVVJMID0gdXJs
OwotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tI
VFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWVVUkwpOwotCi0gICAg
TlNTdHJpbmcgKmNvb2tpZU5hbWVTdHJpbmcgPSBjb29raWVOYW1lOwotCi0gICAgTlNVSW50ZWdl
ciBjb3VudCA9IFtjb29raWVzIGNvdW50XTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7Ci0gICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENv
b2tpZSAqKVtjb29raWVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIGlmIChbW2Nvb2tpZSBu
YW1lXSBpc0VxdWFsVG9TdHJpbmc6Y29va2llTmFtZVN0cmluZ10pCi0gICAgICAgICAgICB3a0Rl
bGV0ZUhUVFBDb29raWUoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llKTsKLSAgICB9Ci0KLSAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi12b2lkIGdldEhvc3RuYW1lc1dpdGhD
b29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLQotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzKGRl
ZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCkpOwotICAgIAotICAgIGZvciAoTlNIVFRQ
Q29va2llKiBjb29raWUgaW4gY29va2llcykKLSAgICAgICAgaG9zdG5hbWVzLmFkZChbY29va2ll
IGRvbWFpbl0pOwotICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXZv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCi17Ci0g
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpOwotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzKGNvb2tpZVN0b3JhZ2Uu
Z2V0KCkpOwotICAgIGlmICghY29va2llcykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGZv
ciAoTlNIVFRQQ29va2llKiBjb29raWUgaW4gY29va2llcykgewotICAgICAgICBpZiAoaG9zdG5h
bWUgPT0gU3RyaW5nKFtjb29raWUgZG9tYWluXSkpCi0gICAgICAgICAgICB3a0RlbGV0ZUhUVFBD
b29raWUoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llKTsKLSAgICB9Ci0gICAgCi0gICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKLXsK
LSAgICB3a0RlbGV0ZUFsbEhUVFBDb29raWVzKGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCku
Z2V0KCkpOwotfQotCi19Ci0KLSNlbmRpZiAvLyAhVVNFKENGTkVUV09SSykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2llSmFyLmgJ
KHJldmlzaW9uIDEzMzkyNikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFy
Lmg6MTMzOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNv
b2tpZUphci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ29va2llSmFyX2gKKyNkZWZpbmUgQ29va2llSmFyX2gKKworI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBLVVJMOworc3RydWN0IENvb2tp
ZTsKKworLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgZG9jdW1lbnQuY29va2llIEFQ
SSwgd2l0aCBzcGVjaWFsIHJ1bGVzIGZvciBIdHRwT25seSBjb29raWVzLgorU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Cit2b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisKKy8vIFRoZXNlIG1ldGhvZHMgdXNl
IGN1cnJlbnQgY29va2llIHN0b3JhZ2UsIHRodXMgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9k
ZSBpbnRvIGFjY291bnQuCitib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7CitT
dHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJik7Citib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiwgVmVjdG9yPENvb2tpZT4mKTsKK3ZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworCisvLyBUaGVzZSBmdW5jdGlvbnMgYWx3YXlz
IGFjY2VzcyBkZWZhdWx0IGNvb2tpZSBzdG9yYWdlLCBub3QgdGFraW5nIHByaXZhdGUgYnJvd3Np
bmcgbW9kZSBpbnRvIGFjY291bnQuCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmluZyYgaG9zdG5hbWUpOwordm9pZCBkZWxldGVBbGxDb29raWVzKCk7CisKK30KKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29v
a2llSmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Q
bGF0Zm9ybUNvb2tpZUphci5oCShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2llSmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDM0ICsyMywzMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIENvb2tpZUphcl9o
Ci0jZGVmaW5lIENvb2tpZUphcl9oCisjaWZuZGVmIFBsYXRmb3JtQ29va2llSmFyX2gKKyNkZWZp
bmUgUGxhdGZvcm1Db29raWVKYXJfaAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKIGNsYXNzIEtVUkw7CitjbGFz
cyBOZXR3b3JraW5nQ29udGV4dDsKIHN0cnVjdCBDb29raWU7CiAKLS8vIFRoZXNlIHR3byBmdW5j
dGlvbnMgaW1wbGVtZW50IGRvY3VtZW50LmNvb2tpZSBBUEksIHdpdGggc3BlY2lhbCBydWxlcyBm
b3IgSHR0cE9ubHkgY29va2llcy4KLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYpOwotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYpOwotCi0vLyBUaGVzZSBtZXRob2RzIHVzZSBjdXJyZW50IGNvb2tpZSBzdG9yYWdl
LCB0aHVzIHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50LgotYm9vbCBj
b29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotYm9vbCBnZXRSYXdD
b29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci12
b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmKTsKLQotLy8gVGhlc2UgZnVuY3Rpb25zIGFsd2F5cyBhY2Nlc3MgZGVmYXVsdCBjb29raWUg
c3RvcmFnZSwgbm90IHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50Lgot
dm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7
Ci12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsK
LXZvaWQgZGVsZXRlQWxsQ29va2llcygpOworLy8gSWYgbmV0d29ya2luZyBjb250ZXh0IGlzIG51
bGwsIGRlZmF1bHQgY29va2llIHN0b3JhZ2UgaXMgdXNlZC4KK1N0cmluZyBjb29raWVzRm9yRE9N
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYp
Owordm9pZCBzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwm
IGZpcnN0UGFydHksIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKK2Jvb2wgY29va2llc0Vu
YWJsZWQoTmV0d29ya2luZ0NvbnRleHQqKTsKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmKTsKK2Jvb2wgZ2V0UmF3Q29v
a2llcyhOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwor
dm9pZCBkZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
U3RyaW5nJik7Cit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0
KiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwordm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKK3ZvaWQg
ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCopOwogCiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQu
Y3BwCShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL0Nvb2tpZUphckNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjQsMTMgKzI0LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAKICNpZiBV
U0UoQ0ZORVRXT1JLKQogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llU3Rv
cmFnZUNGTmV0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgpAQCAt
OTUsMTggKzk0LDE4IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmlsdGVyQ29va2kK
ICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lk
IHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVz
IGFuIGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KICAg
ICBpZiAodmFsdWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tp
ZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1
bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAg
ICByZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0Q0YsIHVybC5j
cmVhdGVDRlVSTCgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29r
aWVzQ0YoQWRvcHRDRiwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkuY3JlYXRlQ0ZV
UkwoKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFk
b3B0Q0YsIGZpcnN0UGFydHkuY3JlYXRlQ0ZVUkwoKSk7CiAKICAgICAvLyA8aHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KICAgICAv
LyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3
aXRob3V0IGEgdmFsdWUKQEAgLTEyMyw5ICsxMjIsOSBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zCiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29v
a2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpLmdldCgpLCB1
cmxDRi5nZXQoKSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5nZXQoKSk7CiB9CiAKLVN0cmluZyBj
b29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0
cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJM
JiwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQg
PyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3Jh
Z2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IApAQCAtMTM3LDkgKzEzNiw5IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRv
Y3VtZW4KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRl
ckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkK
K1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsK
KyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNv
bnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKIApAQCAtMTUxLDE4ICsxNTAsMTkgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbgogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoaGVhZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVk
KGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIGNvb2tpZXNFbmFibGVkKE5ldHdv
cmtpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQ
b2xpY3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFp
bkRvY3VtZW50RG9tYWluOwotICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCisgICAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdl
KCk7CisgICAgaWYgKGNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHBvbGljeSA9IENGSFRUUENvb2tp
ZVN0b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAg
cmV0dXJuIHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21N
YWluRG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQ
b2xpY3lBbHdheXM7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nv
b2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9y
PENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIFJl
dGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgp
IDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTkzLDkgKzE5Myw5IEBAIGJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tp
ZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1
bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTIxNCw5ICsyMTQsOSBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBE
b2N1bWVudCosIGNvbnN0CiAgICAgfQogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMp
CiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2Ug
PSBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29v
a2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzIsOSArMjMyLDkgQEAgdm9pZCBn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIH0KIH0KIAotdm9pZCBkZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIGhvc3RuYW1lKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
b29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsK
ICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjUxLDkgKzI1
MSw5IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICB9CiB9
CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAg
IFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4
dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9t
aXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2No
cm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTMzOTI2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAx
MCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQ29va2llSmFyLmgiCi0KLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJE
b2N1bWVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENv
b2tpZXMoZG9jdW1lbnQsIHVybCwgdmFsdWUpOwotfQotCi1TdHJpbmcgY29va2llcyhjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICByZXR1cm4gUGxhdGZv
cm1TdXBwb3J0Ojpjb29raWVzKGRvY3VtZW50LCB1cmwpOwotfQotCi1TdHJpbmcgY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7Ci19Ci0KLWJvb2wgY29va2llc0VuYWJsZWQoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNv
b2tpZXNFbmFibGVkKGRvY3VtZW50KTsKLX0KLQotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29v
a2llcykKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50
LCB1cmwsIHJhd0Nvb2tpZXMpOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQot
ewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJs
LCBjb29raWVOYW1lKTsKLX0KLQotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRl
ZAotfQotCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3Ru
YW1lKQotewotICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCi19Ci0KLXZvaWQgZGVs
ZXRlQWxsQ29va2llcygpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAkocmV2aXNpb24gMTMz
OTI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1
cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNSwxMCArMTUsOSBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNv
b2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yOCw1MCArMjcsNTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2llSmFyOwogCi12b2lk
IHNldENvb2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQordm9pZCBzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7
CiAgICAgY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKIH0KIAotU3RyaW5nIGNv
b2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3Ry
aW5nIGNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
S1VSTCYgdXJsKQogewogICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9
CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCog
Lypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAg
Ly8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llLgogICAgIHJldHVybiBjb29raWVKYXIu
Z2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1l
bnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgY29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQq
KQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdl
dFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tp
ZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAg
ICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3
aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5n
Q29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQogewogICAgIC8vIEZJWE1FOiBO
b3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFz
aFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5l
dHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICAv
LyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMo
KQordm9pZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KikKIHsKICAgICAvLyBG
SVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQkocmV2aXNpb24gMTMzOTI2
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tOjEzMzkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDb29raWVKYXIuaCIKKworI2lmICFVU0Uo
Q0ZORVRXT1JLKQorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkNvb2tp
ZS5oIgorI2ltcG9ydCAiQ29va2llU3RvcmFnZS5oIgorI2ltcG9ydCAiQ29va2llU3RvcmFnZUNG
TmV0LmgiCisjaW1wb3J0ICJEb2N1bWVudC5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVy
ZmFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJh
eT4gZmlsdGVyQ29va2llcyhOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcykKK3sKKyAgICBOU1VJ
bnRlZ2VyIGNvdW50ID0gW3VuZmlsdGVyZWRDb29raWVzIGNvdW50XTsKKyAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IGZpbHRlcmVkQ29va2llcyhBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvdW50XSk7CisKKyAgICBmb3IgKE5TVUludGVnZXIg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0g
KE5TSFRUUENvb2tpZSAqKVt1bmZpbHRlcmVkQ29va2llcyBvYmplY3RBdEluZGV4OmldOworCisg
ICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVT
dG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKKyAgICAgICAgLy8gd2hpY2ggd291
bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2UgaGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29v
a2llcygpIHRvIHByZXZlbnQKKyAgICAgICAgLy8gdGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBh
dm9pZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKKyAg
ICAgICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRvaW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNo
IGEgY29va2llIGlzIG5ldmVyIHZhbGlkLgorICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxl
bmd0aF0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoW2Nvb2tpZSBpc0hU
VFBPbmx5XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFtmaWx0ZXJlZENvb2tp
ZXMuZ2V0KCkgYWRkT2JqZWN0OmNvb2tpZV07CisgICAgfQorCisgICAgcmV0dXJuIGZpbHRlcmVk
Q29va2llczsKK30KKworU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiB1cmwpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJh
eSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3Jh
Z2UoKS5nZXQoKSwgdXJsKTsKKyAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRl
ckZpZWxkc1dpdGhDb29raWVzOmZpbHRlckNvb2tpZXMoY29va2llcykuZ2V0KCldIG9iamVjdEZv
cktleTpAIkNvb2tpZSJdOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0Zv
clVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOworICAgIHJldHVy
biBbW05TSFRUUENvb2tpZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6Y29va2llc10g
b2JqZWN0Rm9yS2V5OkAiQ29va2llIl07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKK3sKKyAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0v
NTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0
eSBjb29raWUsCisgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KKyAg
ICBpZiAoY29va2llU3RyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gPGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkw
MzQ+CisgICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNl
IGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCisgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvb2tp
ZVN0ci5jb250YWlucygnPScpID8gY29va2llU3RyIDogY29va2llU3RyICsgIj0iOworCisgICAg
TlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRD
b29raWVzID0gZmlsdGVyQ29va2llcyhbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VI
ZWFkZXJGaWVsZHM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJp
bmcgZm9yS2V5OkAiU2V0LUNvb2tpZSJdIGZvclVSTDpjb29raWVVUkxdKTsKKyAgICBBU1NFUlQo
W2ZpbHRlcmVkQ29va2llcy5nZXQoKSBjb3VudF0gPD0gMSk7CisKKyAgICB3a1NldEhUVFBDb29r
aWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIGZpbHRlcmVkQ29v
a2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7
CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitib29sIGNvb2tpZXNFbmFi
bGVkKGNvbnN0IERvY3VtZW50KikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisKKyAgICBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3Rh
dGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3koY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSkpOworICAgIHJldHVybiBj
b29raWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIHx8IGNv
b2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5E
b2N1bWVudERvbWFpbjsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIHJhd0Nvb2tp
ZXMuY2xlYXIoKTsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0Fy
cmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpLmdldCgpLCB1cmwpOworICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3Vu
dF07CisgICAgcmF3Q29va2llcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOworICAgIGZvciAoTlNV
SW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNIVFRQQ29va2llICpj
b29raWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAg
ICAgTlNUaW1lSW50ZXJ2YWwgZXhwaXJlcyA9IFtbY29va2llIGV4cGlyZXNEYXRlXSB0aW1lSW50
ZXJ2YWxTaW5jZTE5NzBdICogMTAwMDsKKyAgICAgICAgcmF3Q29va2llcy51bmNoZWNrZWRBcHBl
bmQoQ29va2llKFtjb29raWUgbmFtZV0sIFtjb29raWUgdmFsdWVdLCBbY29va2llIGRvbWFpbl0s
IFtjb29raWUgcGF0aF0sIGV4cGlyZXMsCisgICAgICAgICAgICBbY29va2llIGlzSFRUUE9ubHld
LCBbY29va2llIGlzU2VjdXJlXSwgW2Nvb2tpZSBpc1Nlc3Npb25Pbmx5XSkpOworICAgIH0KKwor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
CisgICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7
CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFn
ZS5nZXQoKSwgY29va2llVVJMKTsKKworICAgIE5TU3RyaW5nICpjb29raWVOYW1lU3RyaW5nID0g
Y29va2llTmFtZTsKKworICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07Cisg
ICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0hU
VFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbY29va2llcyBvYmplY3RBdEluZGV4
OmldOworICAgICAgICBpZiAoW1tjb29raWUgbmFtZV0gaXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5h
bWVTdHJpbmddKQorICAgICAgICAgICAgd2tEZWxldGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2Uu
Z2V0KCksIGNvb2tpZSk7CisgICAgfQorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
K30KKwordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3Ru
YW1lcykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5
ICpjb29raWVzID0gd2tIVFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdl
dCgpKTsKKyAgICAKKyAgICBmb3IgKE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpCisg
ICAgICAgIGhvc3RuYW1lcy5hZGQoW2Nvb2tpZSBkb21haW5dKTsKKyAgICAKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShj
b25zdCBTdHJpbmcmIGhvc3RuYW1lKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdl
ID0gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0FycmF5ICpjb29raWVzID0g
d2tIVFRQQ29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKKyAgICBpZiAoIWNvb2tpZXMpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKE5TSFRUUENvb2tpZSogY29va2llIGluIGNv
b2tpZXMpIHsKKyAgICAgICAgaWYgKGhvc3RuYW1lID09IFN0cmluZyhbY29va2llIGRvbWFpbl0p
KQorICAgICAgICAgICAgd2tEZWxldGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNv
b2tpZSk7CisgICAgfQorICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisK
K3ZvaWQgZGVsZXRlQWxsQ29va2llcygpCit7CisgICAgd2tEZWxldGVBbGxIVFRQQ29va2llcyhk
ZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKTsKK30KKworfQorCisjZW5kaWYgLy8g
IVVTRShDRk5FVFdPUkspCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9Db29raWVKYXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IkNvb2tpZUphci5oIgorI2ltcG9ydCAiUGxhdGZvcm1Db29raWVKYXIuaCIKIAogI2lmICFVU0Uo
Q0ZORVRXT1JLKQogCkBAIC0zMiw3ICszMiw3IEBACiAjaW1wb3J0ICJDb29raWUuaCIKICNpbXBv
cnQgIkNvb2tpZVN0b3JhZ2UuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2lt
cG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIktVUkwuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsMjkgKzYxLDMxIEBA
IHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2llcygKICAgICByZXR1cm4gZmls
dGVyZWRDb29raWVzOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIAotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9y
VVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7CisgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7
CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFn
ZS5nZXQoKSwgdXJsKTsKICAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZp
ZWxkc1dpdGhDb29raWVzOmZpbHRlckNvb2tpZXMoY29va2llcykuZ2V0KCldIG9iamVjdEZvcktl
eTpAIkNvb2tpZSJdOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1
cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJs
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIE5TQXJyYXkgKmNv
b2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCku
Z2V0KCksIHVybCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tp
ZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1
bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENv
b2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJsKTsKICAgICByZXR1cm4gW1tOU0hU
VFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVzOmNvb2tpZXNdIG9iamVjdEZv
cktleTpAIkNvb2tpZSJdOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCit2b2lkIHNldENvb2tp
ZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQogewogICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTAwLDI4ICsxMDIsMzEgQEAgdm9pZCBz
ZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIFJldGFpblB0cjxOU0FycmF5
PiBmaWx0ZXJlZENvb2tpZXMgPSBmaWx0ZXJDb29raWVzKFtOU0hUVFBDb29raWUgY29va2llc1dp
dGhSZXNwb25zZUhlYWRlckZpZWxkczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
OmNvb2tpZVN0cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl0gZm9yVVJMOmNvb2tpZVVSTF0pOwog
ICAgIEFTU0VSVChbZmlsdGVyZWRDb29raWVzLmdldCgpIGNvdW50XSA8PSAxKTsKIAotICAgIHdr
U2V0SFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwg
ZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVs
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGNvb2tp
ZVN0b3JhZ2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBmaXJzdFBh
cnR5KTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLWJvb2wgY29va2ll
c0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQorYm9vbCBjb29raWVzRW5hYmxlZChOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAK
LSAgICBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGlj
X2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSkpOworICAgIFJldGFpblB0cjxD
RkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRD
RkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAg
IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgPSBzdGF0aWNfY2Fz
dDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHdrR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShj
b29raWVTdG9yYWdlLmdldCgpKSk7CiAgICAgcmV0dXJuIGNvb2tpZUFjY2VwdFBvbGljeSA9PSBO
U0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMgfHwgY29va2llQWNjZXB0UG9saWN5ID09IE5T
SFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogCiAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
Z2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENv
b2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7
CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKIAotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRD
RkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7CisgICAgUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgTlNBcnJh
eSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJs
KTsKICAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOwogICAgIHJhd0Nvb2tp
ZXMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CkBAIC0xMzUsMTIgKzE0MCwxMiBAQCBib29sIGdldFJhd0Nvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNv
b2tpZU5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7CiAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCiAgICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKLSAg
ICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJl
bnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3Jh
Z2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgTlNBcnJheSAqY29va2ll
cyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llVVJMKTsK
IAogICAgIE5TU3RyaW5nICpjb29raWVOYW1lU3RyaW5nID0gY29va2llTmFtZTsKQEAgLTE1NSwx
MSArMTYwLDEyIEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhD
b29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0
bmFtZXMpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgTlNBcnJh
eSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMoZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKS5n
ZXQoKSk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3Jh
Z2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMo
Y29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgCiAgICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tp
ZSBpbiBjb29raWVzKQogICAgICAgICBob3N0bmFtZXMuYWRkKFtjb29raWUgZG9tYWluXSk7CkBA
IC0xNjcsMTEgKzE3MywxMSBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8
U3RyCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDog
ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBOU0FycmF5ICpjb29raWVzID0gd2tI
VFRQQ29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKICAgICBpZiAoIWNvb2tpZXMpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE4NCw5ICsxOTAsMTAgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoY29uc3QgU3RyaQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZv
aWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgd2tEZWxldGVBbGxIVFRQQ29va2llcyhkZWZhdWx0Q0ZI
VFRQQ29va2llU3RvcmFnZSgpLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICB3a0RlbGV0ZUFsbEhU
VFBDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0LmNwcAkocmV2aXNp
b24gMTMzOTI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5j
cHA6MTMzOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVK
YXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDb29raWVKYXJRdC5oIgorCisjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVk
ZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgor
I2luY2x1ZGUgPFFEYXRlVGltZT4KKyNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+Cisj
aW5jbHVkZSA8UU5ldHdvcmtDb29raWU+CisjaW5jbHVkZSA8UVNxbFF1ZXJ5PgorI2luY2x1ZGUg
PFFTdHJpbmdMaXN0PgorI2luY2x1ZGUgPFFWYXJpYW50PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTaGFyZWRDb29raWVK
YXJRdCogc19zaGFyZWRDb29raWVKYXJRdCA9IDA7CisKK3N0YXRpYyBOZXR3b3JraW5nQ29udGV4
dCogbmV0d29ya2luZ0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIGlm
ICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIEZy
YW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7CisgICAgaWYgKCFsb2FkZXIpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7
Cit9CisKK3ZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybjsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29y
a0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisgICAgaWYgKCFqYXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOworICAgIFFVcmwgZmlyc3RQYXJ0
eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgaWYgKCF0aGlyZFBh
cnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5
VXJsKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tp
ZXMgPSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvTGF0aW4x
KCkpOworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgaXQgPSBjb29raWVzLmJl
Z2luKCk7CisgICAgd2hpbGUgKGl0ICE9IGNvb2tpZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKGl0
LT5pc0h0dHBPbmx5KCkpCisgICAgICAgICAgICBpdCA9IGNvb2tpZXMuZXJhc2UoaXQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICArK2l0OworICAgIH0KKworICAgIGphci0+c2V0Q29va2ll
c0Zyb21VcmwoY29va2llcywgdXJsRm9yQ29va2llcyk7Cit9CisKK1N0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOworICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIFFOZXR3b3JrQ29va2ll
SmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsK
KworICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOworICAgIFFVcmwgZmlyc3RQYXJ0eVVybChk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29v
a2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNv
b2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwodXJsRm9yQ29va2llcyk7CisgICAgaWYgKGNvb2tp
ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBRU3RyaW5nTGlz
dCByZXN1bHRDb29raWVzOworICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrQ29va2llJiBuZXR3
b3JrQ29va2llLCBjb29raWVzKSB7CisgICAgICAgIGlmIChuZXR3b3JrQ29va2llLmlzSHR0cE9u
bHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXN1bHRDb29raWVzLmFwcGVu
ZChRU3RyaW5nOjpmcm9tTGF0aW4xKG5ldHdvcmtDb29raWUudG9SYXdGb3JtKFFOZXR3b3JrQ29v
a2llOjpOYW1lQW5kVmFsdWVPbmx5KS5jb25zdERhdGEoKSkpOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHRDb29raWVzLmpvaW4oUUxhdGluMVN0cmluZygiOyAiKSk7Cit9CisKK1N0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwgJnVybCkKK3sKKyAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdv
cmtpbmdDb250ZXh0KGRvY3VtZW50KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29y
a0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tp
ZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVybChRVXJsKHVybCkpOworICAgIGlmIChjb29r
aWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUVN0cmluZ0xp
c3QgcmVzdWx0Q29va2llczsKKyAgICBmb3JlYWNoIChRTmV0d29ya0Nvb2tpZSBuZXR3b3JrQ29v
a2llLCBjb29raWVzKQorICAgICAgICByZXN1bHRDb29raWVzLmFwcGVuZChRU3RyaW5nOjpmcm9t
TGF0aW4xKG5ldHdvcmtDb29raWUudG9SYXdGb3JtKFFOZXR3b3JrQ29va2llOjpOYW1lQW5kVmFs
dWVPbmx5KS5jb25zdERhdGEoKSkpOworCisgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihR
TGF0aW4xU3RyaW5nKCI7ICIpKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQpCit7CisgICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3
b3JraW5nQ29udGV4dChkb2N1bWVudCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNv
b2tpZUphcigpOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCit7CisgICAgLy8gRklYTUU6IE5v
dCB5ZXQgaW1wbGVtZW50ZWQKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgcmV0dXJuIGZh
bHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCit9CisKK3ZvaWQgZGVsZXRlQ29v
a2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit7CisgICAg
Ly8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK30KKwordm9pZCBnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBTaGFyZWRDb29raWVK
YXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIGlmIChqYXIpCisg
ICAgICAgIGphci0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKK30KKwordm9p
ZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAg
ICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwor
ICAgIGlmIChqYXIpCisgICAgICAgIGphci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3Ru
YW1lKTsKK30KKwordm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICBTaGFyZWRDb29raWVK
YXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIGlmIChqYXIpCisg
ICAgICAgIGphci0+ZGVsZXRlQWxsQ29va2llcygpOworfQorCitTaGFyZWRDb29raWVKYXJRdCog
U2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpCit7CisgICAgcmV0dXJuIHNfc2hhcmVkQ29va2ll
SmFyUXQ7Cit9CisKK1NoYXJlZENvb2tpZUphclF0KiBTaGFyZWRDb29raWVKYXJRdDo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgY29va2llU3RvcmFnZURpcmVjdG9yeSkKK3sKKyAgICBpZiAoIXNfc2hh
cmVkQ29va2llSmFyUXQpCisgICAgICAgIHNfc2hhcmVkQ29va2llSmFyUXQgPSBuZXcgU2hhcmVk
Q29va2llSmFyUXQoY29va2llU3RvcmFnZURpcmVjdG9yeSk7CisKKyAgICByZXR1cm4gc19zaGFy
ZWRDb29raWVKYXJRdDsKK30KKwordm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVzdHJveSgpCit7
CisgICAgZGVsZXRlIHNfc2hhcmVkQ29va2llSmFyUXQ7CisgICAgc19zaGFyZWRDb29raWVKYXJR
dCA9IDA7Cit9CisKK3ZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIFFMaXN0PFFOZXR3b3JrQ29v
a2llPiBjb29raWVzID0gYWxsQ29va2llcygpOworICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3Jr
Q29va2llJiBuZXR3b3JrQ29va2llLCBjb29raWVzKQorICAgICAgICBob3N0bmFtZXMuYWRkKG5l
dHdvcmtDb29raWUuZG9tYWluKCkpOworfQorCitib29sIFNoYXJlZENvb2tpZUphclF0OjpkZWxl
dGVDb29raWUoY29uc3QgUU5ldHdvcmtDb29raWUmIGNvb2tpZSkKK3sKKyAgICBpZiAoIVFOZXR3
b3JrQ29va2llSmFyOjpkZWxldGVDb29raWUoY29va2llKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3FsUXVlcnkucHJl
cGFyZShRTGF0aW4xU3RyaW5nKCJERUxFVEUgRlJPTSBjb29raWVzIFdIRVJFIGNvb2tpZUlkPTpj
b29raWVJZHZhbHVlIikpOworICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6
Y29va2llSWR2YWx1ZSIpLCBjb29raWUuZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoY29v
a2llLm5hbWUoKSkpKTsKKyAgICBzcWxRdWVyeS5leGVjKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGFs
bENvb2tpZXMoKTsKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGl0ID0gY29v
a2llcy5iZWdpbigpOworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgZW5kID0g
Y29va2llcy5lbmQoKTsKKyAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAg
c3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJERUxFVEUgRlJPTSBjb29raWVzIFdIRVJF
IGNvb2tpZUlkPTpjb29raWVJZHZhbHVlIikpOworICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKKyAg
ICAgICAgaWYgKGl0LT5kb21haW4oKSA9PSBRU3RyaW5nKGhvc3RuYW1lKSkgeworICAgICAgICAg
ICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRpbjFTdHJpbmcoIjpjb29raWVJZHZhbHVlIiksIGl0
LT5kb21haW4oKS5hcHBlbmQoUUxhdGluMVN0cmluZyhpdC0+bmFtZSgpKSkpOworICAgICAgICAg
ICAgc3FsUXVlcnkuZXhlYygpOworICAgICAgICAgICAgaXQgPSBjb29raWVzLmVyYXNlKGl0KTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpdCsrOworICAgIH0KKyAgICBzZXRBbGxDb29r
aWVzKGNvb2tpZXMpOworfQorCit2b2lkIFNoYXJlZENvb2tpZUphclF0OjpkZWxldGVBbGxDb29r
aWVzKCkKK3sKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKKyAgICBzcWxRdWVyeS5wcmVw
YXJlKFFMYXRpbjFTdHJpbmcoIkRFTEVURSAqIEZST00gY29va2llcyIpKTsKKyAgICBzcWxRdWVy
eS5leGVjKCk7CisgICAgc2V0QWxsQ29va2llcyhRTGlzdDxRTmV0d29ya0Nvb2tpZT4oKSk7Cit9
CisKK1NoYXJlZENvb2tpZUphclF0OjpTaGFyZWRDb29raWVKYXJRdChjb25zdCBTdHJpbmcmIGNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkpCit7CisgICAgbV9kYXRhYmFzZSA9IFFTcWxEYXRhYmFzZTo6
YWRkRGF0YWJhc2UoUUxhdGluMVN0cmluZygiUVNRTElURSIpKTsKKyAgICBjb25zdCBRU3RyaW5n
IGNvb2tpZVN0b3JhZ2VQYXRoID0gY29va2llU3RvcmFnZURpcmVjdG9yeTsKKyAgICBjb25zdCBR
U3RyaW5nIGRhdGFCYXNlTmFtZSA9IGNvb2tpZVN0b3JhZ2VQYXRoICsgUUxhdGluMVN0cmluZygi
L2Nvb2tpZXMuZGIiKTsKKyAgICBtX2RhdGFiYXNlLnNldERhdGFiYXNlTmFtZShkYXRhQmFzZU5h
bWUpOworICAgIGVuc3VyZURhdGFiYXNlVGFibGUoKTsKKyAgICBsb2FkQ29va2llcygpOworfQor
CitTaGFyZWRDb29raWVKYXJRdDo6flNoYXJlZENvb2tpZUphclF0KCkKK3sKKyAgICBtX2RhdGFi
YXNlLmNsb3NlKCk7Cit9CisKK2Jvb2wgU2hhcmVkQ29va2llSmFyUXQ6OnNldENvb2tpZXNGcm9t
VXJsKGNvbnN0IFFMaXN0PFFOZXR3b3JrQ29va2llPiYgY29va2llTGlzdCwgY29uc3QgUVVybCYg
dXJsKQoreworICAgIGlmICghUU5ldHdvcmtDb29raWVKYXI6OnNldENvb2tpZXNGcm9tVXJsKGNv
b2tpZUxpc3QsIHVybCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9kYXRh
YmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUVNxbFF1ZXJ5IHNx
bFF1ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGluMVN0cmluZygi
SU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBjb29raWVzIChjb29raWVJZCwgY29va2llKSBWQUxVRVMg
KDpjb29raWVJZHZhbHVlLCA6Y29va2lldmFsdWUpIikpOworICAgIFFWYXJpYW50TGlzdCBjb29r
aWVzSWRzOworICAgIFFWYXJpYW50TGlzdCBjb29raWVzVmFsdWVzOworICAgIGZvcmVhY2ggKGNv
bnN0IFFOZXR3b3JrQ29va2llICZjb29raWUsIGNvb2tpZXNGb3JVcmwodXJsKSkgeworICAgICAg
ICBpZiAoY29va2llLmlzU2Vzc2lvbkNvb2tpZSgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGNvb2tpZXNJZHMuYXBwZW5kKGNvb2tpZS5kb21haW4oKS5hcHBlbmQoUUxhdGluMVN0
cmluZyhjb29raWUubmFtZSgpKSkpOworICAgICAgICBjb29raWVzVmFsdWVzLmFwcGVuZChjb29r
aWUudG9SYXdGb3JtKCkpOworICAgIH0KKyAgICBzcWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0
cmluZygiOmNvb2tpZUlkdmFsdWUiKSwgY29va2llc0lkcyk7CisgICAgc3FsUXVlcnkuYmluZFZh
bHVlKFFMYXRpbjFTdHJpbmcoIjpjb29raWV2YWx1ZSIpLCBjb29raWVzVmFsdWVzKTsKKyAgICBz
cWxRdWVyeS5leGVjQmF0Y2goKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaGFyZWRD
b29raWVKYXJRdDo6ZW5zdXJlRGF0YWJhc2VUYWJsZSgpCit7CisgICAgaWYgKCFtX2RhdGFiYXNl
Lm9wZW4oKSkgeworICAgICAgICBxV2FybmluZygiQ2FuJ3Qgb3BlbiBjb29raWUgZGF0YWJhc2Ui
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2RhdGFiYXNlLmV4ZWMoUUxhdGluMVN0
cmluZygiUFJBR01BIHN5bmNocm9ub3VzPU9GRiIpKTsKKworICAgIFFTcWxRdWVyeSBzcWxRdWVy
eShtX2RhdGFiYXNlKTsKKyAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIkNSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIGNvb2tpZXMgKGNvb2tpZUlkIFZBUkNIQVIgUFJJTUFSWSBL
RVksIGNvb2tpZSBCTE9CKTsiKSk7CisgICAgc3FsUXVlcnkuZXhlYygpOworfQorCit2b2lkIFNo
YXJlZENvb2tpZUphclF0Ojpsb2FkQ29va2llcygpCit7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29v
a2llczsKKyAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3FsUXVlcnku
cHJlcGFyZShRTGF0aW4xU3RyaW5nKCJTRUxFQ1QgY29va2llIEZST00gY29va2llcyIpKTsKKyAg
ICBzcWxRdWVyeS5leGVjKCk7CisgICAgd2hpbGUgKHNxbFF1ZXJ5Lm5leHQoKSkKKyAgICAgICAg
Y29va2llcy5hcHBlbmQoUU5ldHdvcmtDb29raWU6OnBhcnNlQ29va2llcyhzcWxRdWVyeS52YWx1
ZSgwKS50b0J5dGVBcnJheSgpKSk7CisgICAgc2V0QWxsQ29va2llcyhjb29raWVzKTsKK30KKwor
I2luY2x1ZGUgIm1vY19Db29raWVKYXJRdC5jcHAiCisKK30KKworLy8gdmltOiB0cz00IHN3PTQg
ZXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29v
a2llSmFyUXQuY3BwCShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMw
LDkgQEAKICNpbmNsdWRlICJDb29raWVKYXJRdC5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0j
aW5jbHVkZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIu
aCIKICNpbmNsdWRlICJUaGlyZFBhcnR5Q29va2llc1F0LmgiCiAjaW5jbHVkZSA8UURhdGVUaW1l
PgogI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KQEAgLTQ5LDMwICs0NiwxNCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBTaGFyZWRDb29raWVKYXJRdCogc19zaGFyZWRD
b29raWVKYXJRdCA9IDA7CiAKLXN0YXRpYyBOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0Nv
bnRleHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBzZXRDb29raWVzRnJvbURPTShO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghZG9jdW1lbnQpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwot
ICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lTG9hZGVyKiBsb2Fk
ZXIgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgc2V0
Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdD
b250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIo
KS0+Y29va2llSmFyKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQgPyBj
b250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKSA6IFNoYXJlZENvb2tp
ZUphclF0OjpzaGFyZWQoKTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UVVybCB1cmxGb3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZmlyc3RQ
YXJ0eSk7CiAgICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1
cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04OCwx
NSArNjksMTQgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAg
IGphci0+c2V0Q29va2llc0Zyb21VcmwoY29va2llcywgdXJsRm9yQ29va2llcyk7CiB9CiAKLVN0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQor
U3RyaW5nIGNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRl
eHQpCisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQgPyBjb250ZXh0LT5uZXR3
b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKSA6IFNoYXJlZENvb2tpZUphclF0OjpzaGFy
ZWQoKTsKKyAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFFOZXR3
b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKIAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQ
YXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgUVVybCBmaXJz
dFBhcnR5VXJsKGZpcnN0UGFydHkpOwogICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBl
cm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIApAQCAtMTE0LDEyICs5NCwxMSBAQCBTdHJpbmcgY29va2llcyhjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQsCiAgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0
aW4xU3RyaW5nKCI7ICIpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQorU3RyaW5nIGNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBLVVJMICZ1cmwpCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3
b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIFFOZXR3b3Jr
Q29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIo
KS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CisgICAgaWYgKCFq
YXIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFy
ID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiAKICAgICBR
TGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVybChRVXJsKHVy
bCkpOwogICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkKQEAgLTEzMiw0MiArMTExLDQzIEBAIFN0
cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAgICByZXR1cm4gcmVzdWx0
Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1ib29sIGNvb2tpZXNFbmFi
bGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgY29va2llc0VuYWJsZWQoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQg
PSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8g
Y29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29r
aWVKYXJRdDo6c2hhcmVkKCk7CisgICAgcmV0dXJuICEhamFyOwogfQogCi1ib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nv
b2tpZXMpCitib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJM
JiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAv
LyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIGRlbGV0ZUNv
b2tpZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQogewog
ICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmluZz4m
IGhvc3RuYW1lcykKIHsKKyAgICBBU1NFUlRfVU5VU0VEKCFjb250ZXh0KTsgLy8gTm90IHlldCBp
bXBsZW1lbnRlZCBmb3IgY29va2llIGphcnMgb3RoZXIgdGhhbiB0aGUgc2hhcmVkIG9uZS4KICAg
ICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwog
ICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5h
bWVzKTsKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBo
b3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogeworICAgIEFTU0VSVF9VTlVTRUQo
IWNvbnRleHQpOyAvLyBOb3QgeWV0IGltcGxlbWVudGVkIGZvciBjb29raWUgamFycyBvdGhlciB0
aGFuIHRoZSBzaGFyZWQgb25lLgogICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRD
b29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKICAgICAgICAgamFyLT5kZWxldGVD
b29raWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpOwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMo
KQordm9pZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQogewor
ICAgIEFTU0VSVF9VTlVTRUQoIWNvbnRleHQpOyAvLyBOb3QgeWV0IGltcGxlbWVudGVkIGZvciBj
b29raWUgamFycyBvdGhlciB0aGFuIHRoZSBzaGFyZWQgb25lLgogICAgIFNoYXJlZENvb2tpZUph
clF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKICAg
ICAgICAgamFyLT5kZWxldGVBbGxDb29raWVzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5oCShyZXZpc2lvbiAxMzM5MjYpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0Lmg6MTMzOTI2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIENvb2tp
ZUphclF0X2gKKyNkZWZpbmUgQ29va2llSmFyUXRfaAorCisjaW5jbHVkZSA8UXRDb3JlL1FPYmpl
Y3Q+CisjaW5jbHVkZSA8UXROZXR3b3JrL1FOZXR3b3JrQ29va2llSmFyPgorI2luY2x1ZGUgPFF0
U3FsL1FTcWxEYXRhYmFzZT4KKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hh
cmVkQ29va2llSmFyUXQgOiBwdWJsaWMgUU5ldHdvcmtDb29raWVKYXIgeworICAgIFFfT0JKRUNU
CitwdWJsaWM6CisgICAgc3RhdGljIFNoYXJlZENvb2tpZUphclF0KiBzaGFyZWQoKTsKKyAgICBz
dGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIGNyZWF0ZShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IGRlc3Ryb3koKTsKKworICAgIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxT
dHJpbmc+Jik7CisgICAgYm9vbCBkZWxldGVDb29raWUoY29uc3QgUU5ldHdvcmtDb29raWUmKTsK
KyAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICB2
b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBib29sIHNldENvb2tpZXNGcm9tVXJsKGNvbnN0
IFFMaXN0PFFOZXR3b3JrQ29va2llPiYsIGNvbnN0IFFVcmwmKTsKKyAgICB2b2lkIGxvYWRDb29r
aWVzKCk7CisKK3ByaXZhdGU6CisgICAgU2hhcmVkQ29va2llSmFyUXQoY29uc3QgU3RyaW5nJik7
CisgICAgflNoYXJlZENvb2tpZUphclF0KCk7CisgICAgdm9pZCBlbnN1cmVEYXRhYmFzZVRhYmxl
KCk7CisKKyAgICBRU3FsRGF0YWJhc2UgbV9kYXRhYmFzZTsKK307CisKK30KKworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nv
b2tpZUphclNvdXAuY3BwCShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDMxICsyMiwxOCBAQAogI2luY2x1ZGUgIkNvb2tpZUphclNvdXAuaCIKIAogI2luY2x1ZGUgIkNv
b2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkdPd25QdHJTb3VwLmgiCiAjaW5jbHVkZSAi
S1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1Db29raWVKYXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFNvdXBDb29raWVKYXIqIGNvb2tpZUphckZvckRv
Y3VtZW50KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3N0YXRpYyBTb3VwQ29va2llSmFyKiBj
b29raWVKYXJGb3JDb250ZXh0KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIGlm
ICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IEZyYW1lKiBmcmFtZSA9
IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIGNvbnN0IEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgaWYg
KCFsb2FkZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0ID0gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpOwotICAgIGlmICghY29udGV4
dCkKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIFNPVVBfQ09PS0lFX0pBUihzb3VwX3Nl
c3Npb25fZ2V0X2ZlYXR1cmUoY29udGV4dC0+c291cFNlc3Npb24oKSwgU09VUF9UWVBFX0NPT0tJ
RV9KQVIpKTsKIH0KIApAQCAtODYsMTQgKzczLDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodHRw
T25seUNvb2tpZUV4aXN0cygKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgc2V0Q29va2ll
cyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3ZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1
bWVudCk7CisgICAgU291cENvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvb2tpZUphckZvckNv
bnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEdPd25QdHI8U291cFVSST4gb3JpZ2luKHNvdXBfdXJpX25ldyh1cmwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOwotICAgIEdPd25QdHI8U291cFVSST4gZmlyc3RQYXJ0
eShzb3VwX3VyaV9uZXcoZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSkpOworICAgIEdPd25QdHI8U291cFVSST4gZmlyc3RQYXJ0eVVSSShzb3Vw
X3VyaV9uZXcoZmlyc3RQYXJ0eS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CiAKICAgICAvLyBH
ZXQgZXhpc3RpbmcgY29va2llcyBmb3IgdGhpcyBvcmlnaW4uCiAgICAgR1NMaXN0KiBleGlzdGlu
Z0Nvb2tpZXMgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGphciwgb3JpZ2luLmdl
dCgpLCBUUlVFKTsKQEAgLTExNCwxNSArMTAxLDE1IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnMKICAgICAgICAgaWYgKGh0dHBPbmx5Q29va2llRXhpc3RzKGV4aXN0
aW5nQ29va2llcywgc291cF9jb29raWVfZ2V0X25hbWUoY29va2llLmdldCgpKSwgc291cF9jb29r
aWVfZ2V0X3BhdGgoY29va2llLmdldCgpKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBzb3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZV93aXRoX2ZpcnN0X3BhcnR5KGphciwgZmly
c3RQYXJ0eS5nZXQoKSwgY29va2llLnJlbGVhc2UoKSk7CisgICAgICAgIHNvdXBfY29va2llX2ph
cl9hZGRfY29va2llX3dpdGhfZmlyc3RfcGFydHkoamFyLCBmaXJzdFBhcnR5VVJJLmdldCgpLCBj
b29raWUucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBzb3VwX2Nvb2tpZXNfZnJlZShleGlzdGlu
Z0Nvb2tpZXMpOwogfQogCi1zdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JEb2N1bWVudChjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBmb3JIVFRQSGVhZGVyKQor
c3RhdGljIFN0cmluZyBjb29raWVzRm9yQ29udGV4dChOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCwgY29uc3QgS1VSTCYgdXJsLCBib29sIGZvckhUVFBIZWFkZXIpCiB7Ci0gICAgU291cENvb2tp
ZUphciogamFyID0gY29va2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIFNvdXBDb29r
aWVKYXIqIGphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291
cENvb2tpZUphcigpOwogICAgIGlmICghamFyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
QEAgLTEzMSwyNSArMTE4LDI1IEBAIHN0YXRpYyBTdHJpbmcgY29va2llc0ZvckRvY3VtZW50KGNv
bnN0IEQKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChjb29raWVzLmdldCgpKTsKIH0KIAot
U3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwp
CitTdHJpbmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
S1VSTCYsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICByZXR1cm4gY29va2llc0ZvckRvY3VtZW50
KGRvY3VtZW50LCB1cmwsIGZhbHNlKTsKKyAgICByZXR1cm4gY29va2llc0ZvckNvbnRleHQoY29u
dGV4dCwgdXJsLCBmYWxzZSk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
Y29uc3QgS1VSTCYgdXJsKQogewotICAgIHJldHVybiBjb29raWVzRm9yRG9jdW1lbnQoZG9jdW1l
bnQsIHVybCwgdHJ1ZSk7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JDb250ZXh0KGNvbnRleHQsIHVy
bCwgdHJ1ZSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50KQorYm9vbCBjb29raWVzRW5hYmxlZChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKIHsK
LSAgICByZXR1cm4gISFjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAgcmV0dXJu
ICEhY29va2llSmFyRm9yQ29udGV4dChjb250ZXh0KTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVz
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2ll
PiYgcmF3Q29va2llcykKK2Jvb2wgZ2V0UmF3Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAg
ICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFy
Rm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvbnRleHQg
PyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENvb2tpZUphcigpOwogICAgIGlm
ICghamFyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3MCw5ICsxNTcsOSBAQCBib29s
IGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7
Ci0gICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQp
OworICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0
KGNvbnRleHQpIDogc291cENvb2tpZUphcigpOwogICAgIGlmICghamFyKQogICAgICAgICByZXR1
cm47CiAKQEAgLTE5MSw5ICsxNzgsOSBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCogZG9jdW1lCiAgICAgfQogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0g
ICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc291cENvb2tpZUphcigpOworICAgIFNvdXBD
b29raWVKYXIqIGNvb2tpZUphciA9IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRl
eHQpIDogc291cENvb2tpZUphcigpOwogICAgIEdPd25QdHI8R1NMaXN0PiBjb29raWVzKHNvdXBf
Y29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpKTsKICAgICBmb3IgKEdTTGlzdCogaXRl
bSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKICAg
ICAgICAgR093blB0cjxTb3VwQ29va2llPiBjb29raWUoc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+
KGl0ZW0tPmRhdGEpKTsKQEAgLTIwMywxMCArMTkwLDEwIEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkK
IHsKICAgICBDU3RyaW5nIGhvc3ROYW1lU3RyaW5nID0gaG9zdG5hbWUudXRmOCgpOwotICAgIFNv
dXBDb29raWVKYXIqIGNvb2tpZUphciA9IHNvdXBDb29raWVKYXIoKTsKKyAgICBTb3VwQ29va2ll
SmFyKiBjb29raWVKYXIgPSBjb250ZXh0ID8gY29va2llSmFyRm9yQ29udGV4dChjb250ZXh0KSA6
IHNvdXBDb29raWVKYXIoKTsKICAgICBHT3duUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tp
ZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKSk7CiAgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBj
b29raWVzLmdldCgpOyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CiAgICAgICAg
IFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRh
KTsKQEAgLTIxNiw5ICsyMDMsOSBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25z
dCBTdHJpCiAgICAgfQogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBkZWxldGVB
bGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIFNvdXBDb29raWVK
YXIqIGNvb2tpZUphciA9IHNvdXBDb29raWVKYXIoKTsKKyAgICBTb3VwQ29va2llSmFyKiBjb29r
aWVKYXIgPSBjb250ZXh0ID8gY29va2llSmFyRm9yQ29udGV4dChjb250ZXh0KSA6IHNvdXBDb29r
aWVKYXIoKTsKICAgICBHT3duUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxs
X2Nvb2tpZXMoY29va2llSmFyKSk7CiAgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzLmdl
dCgpOyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CiAgICAgICAgIFNvdXBDb29r
aWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUph
clNvdXAuaAkocmV2aXNpb24gMTMzOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL0Nvb2tpZUphclNvdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBA
QAogI2lmbmRlZiBDb29raWVKYXJTb3VwX2gKICNkZWZpbmUgQ29va2llSmFyU291cF9oCiAKLSNp
bmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4v
Q29va2llSmFyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKIAogI2lu
Y2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2lu
Y2x1ZGUgPFdpbmluZXQuaD4KQEAgLTM2LDE2ICszNSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdv
cmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKIHsKLSAgICAvLyBGSVhNRTogRGVhbCB3aXRoIGRvY3VtZW50LT5maXJzdFBhcnR5
Rm9yQ29va2llcygpLgorICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggZmlyc3RQYXJ0eSBhcmd1bWVu
dC4KICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogICAgIFN0cmluZyB2YWwgPSB2YWx1
ZTsKICAgICBJbnRlcm5ldFNldENvb2tpZShzdHIuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSwgMCwgdmFsLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwogfQogCi1TdHJp
bmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwp
CitTdHJpbmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBj
b25zdCBLVVJMJiB1cmwpCiB7CisgICAgLy8gRklYTUU6IERlYWwgd2l0aCBmaXJzdFBhcnR5IGFy
Z3VtZW50LgorCiAgICAgU3RyaW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKIAogICAgIERXT1JEIGNv
dW50ID0gMDsKQEAgLTYzLDQwICs2NCw0MCBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVu
dCogLypkb2N1bWVuCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKIH0KIAotU3Ry
aW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIC8vIEZJWE1FOiBp
bmNsdWRlIEh0dHBPbmx5IGNvb2tpZQotICAgIHJldHVybiBjb29raWVzKGRvY3VtZW50LCB1cmwp
OworICAgIHJldHVybiBjb29raWVzRm9yRE9NKGNvbnRleHQsIHVybCk7CiB9CiAKLWJvb2wgY29v
a2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgY29va2llc0Vu
YWJsZWQoTmV0d29ya2luZ0NvbnRleHQqKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tp
ZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBj
b25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJu
IGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lk
IGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+
JiBob3N0bmFtZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3Zv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQog
Ci12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtp
bmdDb250ZXh0KikKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAkocmV2aXNpb24g
MTMzOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Q29va2llSmFyUXQuaCIKLQotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkNvb2tpZUph
ci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJOZXR3b3JraW5n
Q29udGV4dC5oIgotI2luY2x1ZGUgIlRoaXJkUGFydHlDb29raWVzUXQuaCIKLSNpbmNsdWRlIDxR
RGF0ZVRpbWU+Ci0jaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgotI2luY2x1ZGUgPFFO
ZXR3b3JrQ29va2llPgotI2luY2x1ZGUgPFFTcWxRdWVyeT4KLSNpbmNsdWRlIDxRU3RyaW5nTGlz
dD4KLSNpbmNsdWRlIDxRVmFyaWFudD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIHNfc2hh
cmVkQ29va2llSmFyUXQgPSAwOwotCi1zdGF0aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtp
bmdDb250ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBpZiAoIWRvY3VtZW50
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBGcmFtZUxvYWRlciog
bG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpOwotfQotCi12b2lk
IHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3Jr
aW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47
Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5h
Z2VyKCktPmNvb2tpZUphcigpOwotICAgIGlmICghamFyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBRVXJsIHVybEZvckNvb2tpZXModXJsKTsKLSAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9jdW1l
bnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBv
bGljeVBlcm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gUU5ldHdv
cmtDb29raWU6OnBhcnNlQ29va2llcyhRU3RyaW5nKHZhbHVlKS50b0xhdGluMSgpKTsKLSAgICBR
TGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGl0ID0gY29va2llcy5iZWdpbigpOwotICAg
IHdoaWxlIChpdCAhPSBjb29raWVzLmVuZCgpKSB7Ci0gICAgICAgIGlmIChpdC0+aXNIdHRwT25s
eSgpKQotICAgICAgICAgICAgaXQgPSBjb29raWVzLmVyYXNlKGl0KTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgKytpdDsKLSAgICB9Ci0KLSAgICBqYXItPnNldENvb2tpZXNGcm9tVXJsKGNv
b2tpZXMsIHVybEZvckNvb2tpZXMpOwotfQotCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0g
Y29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7Ci0KLSAgICBRVXJs
IHVybEZvckNvb2tpZXModXJsKTsKLSAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBl
cm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFy
LT5jb29raWVzRm9yVXJsKHVybEZvckNvb2tpZXMpOwotICAgIGlmIChjb29raWVzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgUVN0cmluZ0xpc3QgcmVzdWx0Q29v
a2llczsKLSAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya0Nvb2tpZSYgbmV0d29ya0Nvb2tpZSwg
Y29va2llcykgewotICAgICAgICBpZiAobmV0d29ya0Nvb2tpZS5pc0h0dHBPbmx5KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVzdWx0Q29va2llcy5hcHBlbmQoUVN0cmluZzo6
ZnJvbUxhdGluMShuZXR3b3JrQ29va2llLnRvUmF3Rm9ybShRTmV0d29ya0Nvb2tpZTo6TmFtZUFu
ZFZhbHVlT25seSkuY29uc3REYXRhKCkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0Q29v
a2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwotfQotCi1TdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMICZ1
cmwpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4
dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5h
Z2VyKCktPmNvb2tpZUphcigpOwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMg
PSBqYXItPmNvb2tpZXNGb3JVcmwoUVVybCh1cmwpKTsKLSAgICBpZiAoY29va2llcy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFFTdHJpbmdMaXN0IHJlc3VsdENv
b2tpZXM7Ci0gICAgZm9yZWFjaCAoUU5ldHdvcmtDb29raWUgbmV0d29ya0Nvb2tpZSwgY29va2ll
cykKLSAgICAgICAgcmVzdWx0Q29va2llcy5hcHBlbmQoUVN0cmluZzo6ZnJvbUxhdGluMShuZXR3
b3JrQ29va2llLnRvUmF3Rm9ybShRTmV0d29ya0Nvb2tpZTo6TmFtZUFuZFZhbHVlT25seSkuY29u
c3REYXRhKCkpKTsKLQotICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxhdGluMVN0cmlu
ZygiOyAiKSk7Ci19Ci0KLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50KQotewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRl
eHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsK
LX0KLQotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZl
Y3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxl
bWVudGVkCi0gICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIHJldHVybiBmYWxzZTsgLy8gcmV0
dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQotewotICAgIC8vIEZJWE1FOiBO
b3QgeWV0IGltcGxlbWVudGVkCi19Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFz
aFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCi17Ci0gICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9
IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKLSAgICBpZiAoamFyKQotICAgICAgICBqYXIt
PmdldEhvc3RuYW1lc1dpdGhDb29raWVzKGhvc3RuYW1lcyk7Ci19Ci0KLXZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCi17Ci0gICAgU2hhcmVkQ29v
a2llSmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKLSAgICBpZiAoamFy
KQotICAgICAgICBqYXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7Ci19Ci0K
LXZvaWQgZGVsZXRlQWxsQ29va2llcygpCi17Ci0gICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9
IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKLSAgICBpZiAoamFyKQotICAgICAgICBqYXIt
PmRlbGV0ZUFsbENvb2tpZXMoKTsKLX0KLQotU2hhcmVkQ29va2llSmFyUXQqIFNoYXJlZENvb2tp
ZUphclF0OjpzaGFyZWQoKQotewotICAgIHJldHVybiBzX3NoYXJlZENvb2tpZUphclF0OwotfQot
Ci1TaGFyZWRDb29raWVKYXJRdCogU2hhcmVkQ29va2llSmFyUXQ6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpCi17Ci0gICAgaWYgKCFzX3NoYXJlZENvb2tpZUph
clF0KQotICAgICAgICBzX3NoYXJlZENvb2tpZUphclF0ID0gbmV3IFNoYXJlZENvb2tpZUphclF0
KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpOwotCi0gICAgcmV0dXJuIHNfc2hhcmVkQ29va2llSmFy
UXQ7Ci19Ci0KLXZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmRlc3Ryb3koKQotewotICAgIGRlbGV0
ZSBzX3NoYXJlZENvb2tpZUphclF0OwotICAgIHNfc2hhcmVkQ29va2llSmFyUXQgPSAwOwotfQot
Ci12b2lkIFNoYXJlZENvb2tpZUphclF0OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2ll
cyA9IGFsbENvb2tpZXMoKTsKLSAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya0Nvb2tpZSYgbmV0
d29ya0Nvb2tpZSwgY29va2llcykKLSAgICAgICAgaG9zdG5hbWVzLmFkZChuZXR3b3JrQ29va2ll
LmRvbWFpbigpKTsKLX0KLQotYm9vbCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQ29va2llKGNv
bnN0IFFOZXR3b3JrQ29va2llJiBjb29raWUpCi17Ci0gICAgaWYgKCFRTmV0d29ya0Nvb2tpZUph
cjo6ZGVsZXRlQ29va2llKGNvb2tpZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUVNx
bFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOwotICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGlu
MVN0cmluZygiREVMRVRFIEZST00gY29va2llcyBXSEVSRSBjb29raWVJZD06Y29va2llSWR2YWx1
ZSIpKTsKLSAgICBzcWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0cmluZygiOmNvb2tpZUlkdmFs
dWUiKSwgY29va2llLmRvbWFpbigpLmFwcGVuZChRTGF0aW4xU3RyaW5nKGNvb2tpZS5uYW1lKCkp
KSk7Ci0gICAgc3FsUXVlcnkuZXhlYygpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
U2hhcmVkQ29va2llSmFyUXQ6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQotewotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBhbGxDb29raWVzKCk7
Ci0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJdGVyYXRvciBpdCA9IGNvb2tpZXMuYmVnaW4o
KTsKLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGVuZCA9IGNvb2tpZXMuZW5k
KCk7Ci0gICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOwotICAgIHNxbFF1ZXJ5LnBy
ZXBhcmUoUUxhdGluMVN0cmluZygiREVMRVRFIEZST00gY29va2llcyBXSEVSRSBjb29raWVJZD06
Y29va2llSWR2YWx1ZSIpKTsKLSAgICB3aGlsZSAoaXQgIT0gZW5kKSB7Ci0gICAgICAgIGlmIChp
dC0+ZG9tYWluKCkgPT0gUVN0cmluZyhob3N0bmFtZSkpIHsKLSAgICAgICAgICAgIHNxbFF1ZXJ5
LmJpbmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29va2llSWR2YWx1ZSIpLCBpdC0+ZG9tYWluKCku
YXBwZW5kKFFMYXRpbjFTdHJpbmcoaXQtPm5hbWUoKSkpKTsKLSAgICAgICAgICAgIHNxbFF1ZXJ5
LmV4ZWMoKTsKLSAgICAgICAgICAgIGl0ID0gY29va2llcy5lcmFzZShpdCk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgaXQrKzsKLSAgICB9Ci0gICAgc2V0QWxsQ29va2llcyhjb29raWVz
KTsKLX0KLQotdm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQWxsQ29va2llcygpCi17Ci0g
ICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRU3Fs
UXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4x
U3RyaW5nKCJERUxFVEUgKiBGUk9NIGNvb2tpZXMiKSk7Ci0gICAgc3FsUXVlcnkuZXhlYygpOwot
ICAgIHNldEFsbENvb2tpZXMoUUxpc3Q8UU5ldHdvcmtDb29raWU+KCkpOwotfQotCi1TaGFyZWRD
b29raWVKYXJRdDo6U2hhcmVkQ29va2llSmFyUXQoY29uc3QgU3RyaW5nJiBjb29raWVTdG9yYWdl
RGlyZWN0b3J5KQotewotICAgIG1fZGF0YWJhc2UgPSBRU3FsRGF0YWJhc2U6OmFkZERhdGFiYXNl
KFFMYXRpbjFTdHJpbmcoIlFTUUxJVEUiKSk7Ci0gICAgY29uc3QgUVN0cmluZyBjb29raWVTdG9y
YWdlUGF0aCA9IGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgY29uc3QgUVN0cmluZyBkYXRh
QmFzZU5hbWUgPSBjb29raWVTdG9yYWdlUGF0aCArIFFMYXRpbjFTdHJpbmcoIi9jb29raWVzLmRi
Iik7Ci0gICAgbV9kYXRhYmFzZS5zZXREYXRhYmFzZU5hbWUoZGF0YUJhc2VOYW1lKTsKLSAgICBl
bnN1cmVEYXRhYmFzZVRhYmxlKCk7Ci0gICAgbG9hZENvb2tpZXMoKTsKLX0KLQotU2hhcmVkQ29v
a2llSmFyUXQ6On5TaGFyZWRDb29raWVKYXJRdCgpCi17Ci0gICAgbV9kYXRhYmFzZS5jbG9zZSgp
OwotfQotCi1ib29sIFNoYXJlZENvb2tpZUphclF0OjpzZXRDb29raWVzRnJvbVVybChjb25zdCBR
TGlzdDxRTmV0d29ya0Nvb2tpZT4mIGNvb2tpZUxpc3QsIGNvbnN0IFFVcmwmIHVybCkKLXsKLSAg
ICBpZiAoIVFOZXR3b3JrQ29va2llSmFyOjpzZXRDb29raWVzRnJvbVVybChjb29raWVMaXN0LCB1
cmwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVu
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2Rh
dGFiYXNlKTsKLSAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIklOU0VSVCBPUiBS
RVBMQUNFIElOVE8gY29va2llcyAoY29va2llSWQsIGNvb2tpZSkgVkFMVUVTICg6Y29va2llSWR2
YWx1ZSwgOmNvb2tpZXZhbHVlKSIpKTsKLSAgICBRVmFyaWFudExpc3QgY29va2llc0lkczsKLSAg
ICBRVmFyaWFudExpc3QgY29va2llc1ZhbHVlczsKLSAgICBmb3JlYWNoIChjb25zdCBRTmV0d29y
a0Nvb2tpZSAmY29va2llLCBjb29raWVzRm9yVXJsKHVybCkpIHsKLSAgICAgICAgaWYgKGNvb2tp
ZS5pc1Nlc3Npb25Db29raWUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb29r
aWVzSWRzLmFwcGVuZChjb29raWUuZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoY29va2ll
Lm5hbWUoKSkpKTsKLSAgICAgICAgY29va2llc1ZhbHVlcy5hcHBlbmQoY29va2llLnRvUmF3Rm9y
bSgpKTsKLSAgICB9Ci0gICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRpbjFTdHJpbmcoIjpjb29r
aWVJZHZhbHVlIiksIGNvb2tpZXNJZHMpOwotICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0aW4x
U3RyaW5nKCI6Y29va2lldmFsdWUiKSwgY29va2llc1ZhbHVlcyk7Ci0gICAgc3FsUXVlcnkuZXhl
Y0JhdGNoKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2hhcmVkQ29va2llSmFyUXQ6
OmVuc3VyZURhdGFiYXNlVGFibGUoKQotewotICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKCkpIHsK
LSAgICAgICAgcVdhcm5pbmcoIkNhbid0IG9wZW4gY29va2llIGRhdGFiYXNlIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgbV9kYXRhYmFzZS5leGVjKFFMYXRpbjFTdHJpbmcoIlBSQUdN
QSBzeW5jaHJvbm91cz1PRkYiKSk7Ci0KLSAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFz
ZSk7Ci0gICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJDUkVBVEUgVEFCTEUgSUYg
Tk9UIEVYSVNUUyBjb29raWVzIChjb29raWVJZCBWQVJDSEFSIFBSSU1BUlkgS0VZLCBjb29raWUg
QkxPQik7IikpOwotICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKLX0KLQotdm9pZCBTaGFyZWRDb29raWVK
YXJRdDo6bG9hZENvb2tpZXMoKQotewotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXM7Ci0gICAg
UVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOwotICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxh
dGluMVN0cmluZygiU0VMRUNUIGNvb2tpZSBGUk9NIGNvb2tpZXMiKSk7Ci0gICAgc3FsUXVlcnku
ZXhlYygpOwotICAgIHdoaWxlIChzcWxRdWVyeS5uZXh0KCkpCi0gICAgICAgIGNvb2tpZXMuYXBw
ZW5kKFFOZXR3b3JrQ29va2llOjpwYXJzZUNvb2tpZXMoc3FsUXVlcnkudmFsdWUoMCkudG9CeXRl
QXJyYXkoKSkpOwotICAgIHNldEFsbENvb2tpZXMoY29va2llcyk7Ci19Ci0KLSNpbmNsdWRlICJt
b2NfQ29va2llSmFyUXQuY3BwIgotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmgJKHJldmlzaW9uIDEzMzkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgQ29va2llSmFy
UXRfaAotI2RlZmluZSBDb29raWVKYXJRdF9oCi0KLSNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4K
LSNpbmNsdWRlIDxRdE5ldHdvcmsvUU5ldHdvcmtDb29raWVKYXI+Ci0jaW5jbHVkZSA8UXRTcWwv
UVNxbERhdGFiYXNlPgotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTaGFyZWRD
b29raWVKYXJRdCA6IHB1YmxpYyBRTmV0d29ya0Nvb2tpZUphciB7Ci0gICAgUV9PQkpFQ1QKLXB1
YmxpYzoKLSAgICBzdGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIHNoYXJlZCgpOwotICAgIHN0YXRp
YyBTaGFyZWRDb29raWVKYXJRdCogY3JlYXRlKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgZGVz
dHJveSgpOwotCi0gICAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmlu
Zz4mKTsKLSAgICBib29sIGRlbGV0ZUNvb2tpZShjb25zdCBRTmV0d29ya0Nvb2tpZSYpOwotICAg
IHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQg
ZGVsZXRlQWxsQ29va2llcygpOwotICAgIGJvb2wgc2V0Q29va2llc0Zyb21VcmwoY29uc3QgUUxp
c3Q8UU5ldHdvcmtDb29raWU+JiwgY29uc3QgUVVybCYpOwotICAgIHZvaWQgbG9hZENvb2tpZXMo
KTsKLQotcHJpdmF0ZToKLSAgICBTaGFyZWRDb29raWVKYXJRdChjb25zdCBTdHJpbmcmKTsKLSAg
ICB+U2hhcmVkQ29va2llSmFyUXQoKTsKLSAgICB2b2lkIGVuc3VyZURhdGFiYXNlVGFibGUoKTsK
LQotICAgIFFTcWxEYXRhYmFzZSBtX2RhdGFiYXNlOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEzMzkzNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTExLTA4ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIENvb2tpZUphciB1c2VzIERvY3VtZW50
IGNsYXNzLCB3aGljaCBpcyBhIGxheWVyaW5nIHZpb2xhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNjIxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0
Lmg6IERvbid0IGluY2x1ZGUgQ29va2llSmFyLmgsIGl0cyBjb21wbGV0ZWx5IHVubmVjZXNzYXJ5
LgorCiAyMDEyLTExLTA4ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgog
CiAgICAgICAgIFtXSzJdIFByaW50IHByZXZpZXcgc2hvdWxkIHZlbmQgaW1hZ2VzIHRvIHRoZSBV
SVByb2Nlc3MgaW5zdGVhZCBvZiBQREZzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLQVBJQ2FzdC5oCShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYg
QEAKICNpbmNsdWRlICJXS1Byb3RlY3Rpb25TcGFjZVR5cGVzLmgiCiAjaW5jbHVkZSAiV0tSZXNv
dXJjZUNhY2hlTWFuYWdlci5oIgogI2luY2x1ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DcmVkZW50aWFsLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Qcm90ZWN0aW9uU3BhY2UuaD4K
</data>
<flag name="commit-queue"
          id="187694"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173117</attachid>
            <date>2012-11-08 14:29:21 -0800</date>
            <delta_ts>2012-11-08 16:22:37 -0800</delta_ts>
            <desc>more build fixing</desc>
            <filename>CookieJar.txt</filename>
            <type>text/plain</type>
            <size>129094</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzk0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBAQAorMjAxMi0xMS0wOCAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBDb29raWVKYXIgdXNlcyBE
b2N1bWVudCBjbGFzcywgd2hpY2ggaXMgYSBsYXllcmluZyB2aW9sYXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTYyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IENvb2tpZUphciBpbiB0
d28gcGFydHMsIG9uZSB0aGF0IHRha2VzIGEgRG9jdW1lbnQsIGFuZCBhbm90aGVyIHRoYXQgaXMg
YSBwdXJlCisgICAgICAgIHBsYXRmb3JtIG9uZSwgdXNpbmcgTmV0d29ya2luZ0NvbnRleHQgdG8g
YWNjZXNzIHRoZSBjb3JyZWN0IHBsYXRmb3JtIHN0b3JhZ2UuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgIFVwZGF0ZWQuCisKKyAgICAgICAgKiBsb2FkZXIvQ29v
a2llSmFyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpuZXR3b3JraW5nQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tp
ZXMpOgorICAgICAgICAqIGxvYWRlci9Db29raWVKYXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmguCisgICAgICAgIFRoaXMgaXMgYW4gYWRhcHRvciBm
b3IgcHVyZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMuIENsaWVudHMgY29udGludWUgdG8gdXNl
IHRoZQorICAgICAgICBvbGQgaW50ZXJmYWNlIHVuY2hhbmdlZC4KKworICAgICAgICAqIHBsYXRm
b3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogbG9hZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5j
cHAuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1
bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9t
aXVtLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAuCisgICAgICAgIFRoZXNlIHBsYXRmb3JtcyBkbyBu
b3QgaGF2ZSBhIHB1cmUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24geWV0LCBzbyB0aGV5IGp1c3Qg
a2VlcAorICAgICAgICB0byB1c2Ugb3JpZ2luYWwgaW1wbGVtZW50YXRpb25zLiBTaW5jZSB0aGUg
Y29kZSBpcyBub3QgaW4gcGxhdGZvcm0vIGFueSBtb3JlLCB0aGUKKyAgICAgICAgdmlvbGF0aW9u
IGlzIHJlc29sdmVkIGZvciBDaHJvbWl1bSBhbmQgQmxhY2tiZXJyeSwgdG9vLgorCisgICAgICAg
ICogcGxhdGZvcm0vQ29va2llSmFyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9QbGF0Zm9ybUNvb2tpZUphci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db29raWVKYXIuaC4KKyAgICAgICAgVGhlIHBsYXRmb3JtIGludGVyZmFjZSBpcyBub3cg
bW9yZSB1bmlmb3JtIC0gYWxsIGZ1bmN0aW9ucyB0YWtlIGEgTmV0d29ya2luZ0NvbnRleHQKKyAg
ICAgICAgaW5zdGVhZCBvZiBoYXJkY29kaW5nIHdoaWNoIGNvb2tpZSBzdG9yYWdlIHRvIHVzZSBp
biBzb21lIGNhc2VzLgorICAgICAgICBSZW5hbWVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBvbmx5IHVz
ZWZ1bCBmb3IgZG9jdW1lbnQuY29va2llIGltcGxlbWVudGF0aW9uIHRvIGxvb2sKKyAgICAgICAg
bGVzcyBnZW5lcmljLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbTogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW06IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0uCisgICAg
ICAgIChXZWJDb3JlOjpjb29raWVzRm9yRE9NKTogVGhpcyBub3cgdGFrZXMgYSBjb250ZXh0IGlu
c3RlYWQgb2YgRG9jdW1lbnQsIGFuZCBhbHNvCisgICAgICAgIHRha2VzIGEgZmlyc3RQYXJ0eSBV
UkwgKHVudXNlZCBvbiBNYWMsIGJ1dCB1c2VkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zKS4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKTogR2V0IGNvb2tp
ZSBzdG9yYWdlIGZyb20gY29udGV4dCAoYW5kCisgICAgICAgIHVzZSBzaGFyZWQgb25lIGlmIGNv
bnRleHQgaXMgbnVsbCkuCisgICAgICAgIChXZWJDb3JlOjpzZXRDb29raWVzRnJvbURPTSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0
ZUNvb2tpZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMpOiBEaXR0by4gVGhpcyB1c2VkIHRvIG9ubHkgc3VwcG9ydCBkZWZhdWx0IHN0b3JhZ2UsCisg
ICAgICAgIGJ1dCBpdHMgY2xlYW5lciB0byBoYXZlIGEgdW5pZm9ybSBpbnRlcmZhY2UuCisgICAg
ICAgIChXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3BwOgorICAgICAgICBTYW1lIGNoYW5nZXMgYXMg
b24gTWFjLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwu
Y3BwOgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgaW50ZXJmYWNlLiBJbXBsZW1lbnRhdGlvbiBp
cyBsYXJnZWx5IGEgZHVtbXkgb25lLgorCisgICAgICAgICogcGxhdGZvcm0vcXQvQ29va2llSmFy
UXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0Lmgu
CisgICAgICAgIE1vdmVkIHRvIGEgY29tbW9uIGxvY2F0aW9uLCBtb3N0IGNvb2tpZSBmaWxlcyB3
ZXJlIGluIG5ldHdvcmsvIGFscmVhZHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVK
YXJRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVK
YXJRdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUph
clF0LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKTogVXNlIGNvbnRl
eHQncyBvciBzaGFyZWQgY29va2UgamFyIGFzIGFwcHJvcHJpYXRlLgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llc0ZvckRPTSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFi
bGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpnZXRSYXdDb29raWVzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29raWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKTogQmFjay1lbmQgaW1wbGVtZW50YXRpb24gY2FuIG9u
bHkgaGFuZGxlIHNoYXJlZAorICAgICAgICBqYXIgaGVyZSwgYXNzZXJ0IHRoYXQgYXJndW1lbnQg
ZG9lcyBub3QgcmVxdWVzdCBhbm90aGVyIG9uZS4KKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQWxsQ29v
a2llcyk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUph
clNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llSmFyRm9yQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRDb29raWVzRnJvbURPTSk6CisgICAgICAgIChXZWJDb3JlOjpjb29r
aWVzRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9yRE9NKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAg
ICAgVXBkYXRlZCBmb3IgbmV3IGZ1bmN0aW9uIHNpZ25hdHVyZXMsIGFuZCB1c2UgdGhlIHNhbWUg
Y3Jvc3MtcGxhdGZvcm0gbG9naWMgZm9yCisgICAgICAgIGNob29zaW5nIGEgY29va2llIGphci4K
KworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmg6IERvbid0
IGluY2x1ZGUgdW5uZWNlc3NhcnkgQ29vaWVKYXIuaC4KKyAgICAgICAgCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dENvb2tpZXNGcm9tRE9NKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JET00pOgorICAg
ICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UmF3Q29va2ll
cyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAg
ICAgICBVcGRhdGVkIGZvciBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlcy4KKwogMjAxMi0xMS0wOCAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFtWOF0gVXBkYXRlIGNh
bGxlcnMgdG8gdXNlIHRoZSBhbGlnbmVkIHBvaW50ZXIgQVBJIHJhdGhlciB0aGFuIHRoZSBkZXBy
ZWNhdGVkIHVuYWxpZ25lZCBwb2ludGVyIEFQSQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDEzMzk0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xNjIyLDYgKzE2MjIsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaW5z
cGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKIAogICAgIGxvYWRlci9DYWNoZWRNZXRhZGF0
YS5jcHAKKyAgICBsb2FkZXIvQ29va2llSmFyLmNwcAogICAgIGxvYWRlci9Dcm9zc09yaWdpbkFj
Y2Vzc0NvbnRyb2wuY3BwCiAgICAgbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2Fj
aGUuY3BwCiAgICAgbG9hZGVyL0RvY3VtZW50TG9hZFRpbWluZy5jcHAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMzOTQ2KQorKysgU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzg1Nyw2ICszODU3LDggQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVQ
b2xpY3kuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmggXAorCVNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Db29raWVKYXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFy
LmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmggXAog
CVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNw
cCBcCkBAIC00MjQ3LDcgKzQyNDksNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db29raWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llc1N0cmF0ZWd5
LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1
cnNvci5jcHAgXApAQCAtNDcxNSw2ICs0NzE2LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Byb3h5U2VydmVyLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmggXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2VIYXNoLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2UuaCBcCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCShyZXZpc2lvbiAxMzM5NDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UJKHdvcmtpbmcgY29weSkK
QEAgLTE0MSw2ICsxNDEsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJ
RVMKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRpbmcvYmxhY2tiZXJyeS9F
ZGl0b3JCbGFja0JlcnJ5LmNwcAogICAgIGVkaXRpbmcvYmxhY2tiZXJyeS9TbWFydFJlcGxhY2VC
bGFja0JlcnJ5LmNwcAorICAgIGxvYWRlci9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnku
Y3BwCiAgICAgcGFnZS9ibGFja2JlcnJ5L0FjY2Vzc2liaWxpdHlPYmplY3RCbGFja0JlcnJ5LmNw
cAogICAgIHBhZ2UvYmxhY2tiZXJyeS9EcmFnQ29udHJvbGxlckJsYWNrQmVycnkuY3BwCiAgICAg
cGFnZS9ibGFja2JlcnJ5L0V2ZW50SGFuZGxlckJsYWNrQmVycnkuY3BwCkBAIC0xNDgsNyArMTQ5
LDYgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vYmxhY2tiZXJy
eS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvQ29udGV4
dE1lbnVCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvQ29udGV4dE1lbnVJ
dGVtQmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNr
QmVycnkuY3BwCiAgICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9DdXJzb3JCbGFja0JlcnJ5LmNwcAog
ICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0RhdGFCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRm
b3JtL2JsYWNrYmVycnkvRHJhZ0ltYWdlQmxhY2tCZXJyeS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQko
cmV2aXNpb24gMTMzOTQ2KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudC5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVu
dC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAgXAorICAgIGxv
YWRlci9Db29raWVKYXIuY3BwIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
LmNwcCBcCiAgICAgbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwIFwK
ICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwIFwKQEAgLTE5NDksNiAr
MTk1MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVu
dC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oIFwKICAgICBsb2Fk
ZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaCBcCisgICAgbG9hZGVyL0Nvb2tpZUphci5oIFwKICAgICBs
b2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmggXAogICAgIGxvYWRlci9Dcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlLmggXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5oIFwKQEAgLTIyMzgsNiArMjI0MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRm
b3JtL25ldHdvcmsvTUlNRVNuaWZmaW5nLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29y
a2luZ0NvbnRleHQuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmll
ci5oIFwKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2llSmFyLmggXAogICAgIHBs
YXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
UHJveHlTZXJ2ZXIuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9RdE1JTUVUeXBlU25pZmZl
ci5oIFwKQEAgLTIyNTAsNiArMjI1Myw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVzcG9uc2VCYXNlLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvTmV0d29ya1N0YXRl
Tm90aWZpZXJQcml2YXRlLmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQu
aCBcCiAgICAgcGxhdGZvcm0vUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBcCiAgICAgcGxhdGZvcm0v
UGxhdGZvcm1NZW1vcnlJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgcGxhdGZvcm0vUGxhdGZvcm1U
b3VjaEV2ZW50LmggXApAQCAtMjI1Nyw3ICsyMjYxLDYgQEAgSEVBREVSUyArPSBcCiAgICAgcGxh
dGZvcm0vUG9wdXBNZW51LmggXAogICAgIHBsYXRmb3JtL1JlZmVycmVyUG9saWN5LmggXAogICAg
IHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggXAotICAgIHBsYXRmb3JtL3F0L0Nvb2tpZUphclF0
LmggXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmggXAogICAgIHBsYXRmb3JtL3F0
L1FTdHlsZUZhY2FkZS5oIFwKICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIFwK
QEAgLTI4MDQsNiArMjgwNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0RO
U1Jlc29sdmVRdWV1ZS5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvTUlNRVNuaWZmaW5nLmNw
cCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5jcHAgXAogICAgIHBsYXRm
b3JtL25ldHdvcmsvcXQvQ3JlZGVudGlhbFN0b3JhZ2VRdC5jcHAgXAogICAgIHBsYXRmb3JtL25l
dHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQv
UmVzb3VyY2VSZXF1ZXN0UXQuY3BwIFwKQEAgLTI4MTcsNyArMjgyMSw2IEBAIFNPVVJDRVMgKz0g
XAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvQ29u
dGV4dE1lbnVJdGVtUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcCBc
Ci0gICAgcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9DdXJz
b3JRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3BwIFwKICAgICBwbGF0Zm9y
bS9xdC9EcmFnSW1hZ2VRdC5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTMz
OTQ2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTksNiArMTU5LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgnLAorICAgICAgICAgICAgJ2xvYWRl
ci9Db29raWVKYXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGUuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0RvY3VtZW50TG9hZFRpbWluZy5o
JywKICAgICAgICAgICAgICdsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaCcsCkBAIC0yNzMsNyArMjc0
LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29v
a2llLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL0Nvb2tpZUphci5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ3Vy
c29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmgnLApAQCAtMzEy
LDYgKzMxMiw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50Lmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9Q
bGF0Zm9ybUNvb2tpZUphci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybVdoZWVs
RXZlbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oJywKQEAgLTI5NTUsNiArMjk1Niw3IEBACiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5oJywKICAgICAgICAgICAg
ICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVk
TWV0YWRhdGEuaCcsCisgICAgICAgICAgICAnbG9hZGVyL0Nvb2tpZUphci5jcHAnLAogICAgICAg
ICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwJywKICAgICAgICAgICAg
ICdsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgnLAogICAgICAgICAgICAgJ2xvYWRl
ci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCcsCkBAIC0zMDYyLDYgKzMwNjQs
NyBAQAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAnLAogICAgICAg
ICAgICAgJ2xvYWRlci9jZi9SZXNvdXJjZUxvYWRlckNGTmV0LmNwcCcsCiAgICAgICAgICAgICAn
bG9hZGVyL2Nocm9taXVtL0NhY2hlZFJhd1Jlc291cmNlQ2hyb21pdW0uY3BwJywKKyAgICAgICAg
ICAgICdsb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICdsb2FkZXIvY2hyb21pdW0vRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vUmVzb3VyY2VMb2FkZXJDaHJvbWl1bS5jcHAn
LAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9TdWJyZXNvdXJjZUxvYWRlckNocm9taXVt
LmNwcCcsCkBAIC01NDY2LDcgKzU0NjksNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9D
bGlwYm9hcmRNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9Db250ZXh0TWVudUl0
ZW1NYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbScs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbWFjL0N1cnNvck1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0Ry
YWdEYXRhTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1t
JywKQEAgLTU1ODQsNyArNTU4Niw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9j
Zi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25l
dHdvcmsvY2hyb21pdW0vQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNocm9taXVt
LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJD
aHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vRE5T
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jl
c291cmNlRXJyb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9S
ZXNvdXJjZUhhbmRsZS5jcHAnLApAQCAtNTYxMiw2ICs1NjEzLDcgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVudGljYXRpb25NYWMubW0nLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbScsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llU3RvcmFnZU1hYy5tbScsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3JhZ2VNYWMubW0nLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tJywKQEAg
LTU2MjIsNiArNTYyNCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvUmVz
b3VyY2VSZXNwb25zZU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMv
V2ViQ29yZVVSTFJlc3BvbnNlLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL3F0
L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvcXQvQ29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL3F0
L0NyZWRlbnRpYWxTdG9yYWdlUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3Jr
L3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9uZXR3b3JrL3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUXQuY3BwJywKQEAgLTU2NzIsNyArNTY3
NSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vcXQvQ29udGV4dE1lbnVJdGVtUXQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vcXQv
Q29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEzMzk0NikKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzQxNSw2ICsyNzQxNSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ29va2llSmFyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENvb2tpZUphci5oIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ3Jv
c3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yODI4Nywx
MCArMjgyOTUsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxDb29raWVKYXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29va2llc1N0cmF0ZWd5LmgiCiAJCQkJ
PgogCQkJPC9GaWxlPgpAQCAtMzI1MTgsNiArMzI1MjIsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmls
ZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcUGxh
dGZvcm1Db29raWVKYXIuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcUHJvdGVjdGlvblNwYWNlLmNwcCIKIAkJ
CQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMzk0NikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MzI3MSw4ICszMjcxLDYgQEAKIAkJOTM1MDBGMzIxM0ZERTNCRTAwOTlFQzI0IC8qIE5TU2Nyb2xs
ZXJJbXBEZXRhaWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzUwMEYzMTEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxlckltcERldGFpbHMuaCAq
LzsgfTsKIAkJOTM1MjA3QkUwOUJENDEwQTAwRjIwMzhEIC8qIExvY2FsaXplZFN0cmluZ3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNTIwN0JEMDlC
RDQxMEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM1MjA4NDUwOUJENDNCOTAwRjIwMzhEIC8q
IExhbmd1YWdlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM1MjA4NDQwOUJENDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1tICovOyB9OwotCQk5MzUy
MDg3NzA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MjA4NzYwOUJENDUzNDAwRjIwMzhEIC8qIENv
b2tpZUphci5tbSAqLzsgfTsKLQkJOTM1MjA4ODIwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUph
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MjA4
ODEwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzNTM2NzZCMDlBRUQ4OEIwMEQzNUNENiAvKiBT
Y3JvbGxWaWV3TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTM1MzY3NkEwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMubW0gKi87IH07
CiAJCTkzNUM0NzYzMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzVD
NDc2MjA5QUM0Q0U2MDBBNkFBQjQgLyogTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oICov
OyB9OwogCQk5MzVDNDc2ODA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzVDNDc2
NjA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYwNDcsNiArNjA0NSwxMCBA
QAogCQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MTE1NDc4NDc0
MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi87IH07CiAJCUUxMzk4NjY0MTU0Nzg0NzQw
MDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZl
ci5oICovOyB9OwogCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFnZU1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxM0Yw
MUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1tICovOyB9OworCQlFMTQy
NEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29raWVKYXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0
MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyB9OworCQlFMTQyNEM5MDE2NEI0NjBCMDBGMzJE
NDAgLyogQ29va2llSmFyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTE0MjRDOEYxNjRCNDYwQjAwRjMyRDQwIC8qIENvb2tpZUphck1hYy5tbSAq
LzsgfTsKKwkJRTE0MjRDOTMxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQyNEM5MTE2NEI1MkM4
MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCAqLzsgfTsKKwkJRTE0MjRDOTQxNjRCNTJDODAwRjMy
RDQwIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTE0MjRDOTIxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxNEYxQzQ0MTRCNURB
QzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNEYxQzQyMTRCNURBQzYw
MEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCAqLzsgfTsKIAkJ
RTE0RjFDNDUxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNEYx
QzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE1QTM2
RDcxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxO
U05hbWVzLmggKi87IH07CkBAIC0xMDQ5Niw4ICsxMDQ5OCw2IEBACiAJCTkzNTAwRjMxMTNGREUz
QkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOU1Njcm9sbGVySW1wRGV0YWlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzUyMDdCRDA5QkQ0MTBBMDBGMjAzOEQgLyogTG9jYWxpemVkU3RyaW5ncy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbGl6ZWRTdHJpbmdzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNTIwODQ0MDlCRDQzQjkwMEYyMDM4RCAvKiBM
YW5ndWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExhbmd1
YWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MzUyMDg3NjA5QkQ0NTM0MDBG
MjAzOEQgLyogQ29va2llSmFyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQ29va2llSmFyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MzUyMDg4
MTA5QkQ0NUU5MDBGMjAzOEQgLyogQ29va2llSmFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvb2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzUz
Njc2QTA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbFZpZXdNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzNUM0NzYyMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTM1QzQ3NjYwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNDQ4LDYgKzEzNDQ4LDEwIEBACiAJCUUxMzk4
NjYyMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llU3RvcmFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMTNGMDFGMDEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFn
ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvb2tpZVN0
b3JhZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNDI0Qzg5MTY0QjNC
NEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBQbGF0Zm9ybUNvb2tpZUphci5oOyBwYXRoID0gbmV0d29yay9QbGF0Zm9ybUNv
b2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTQyNEM4RjE2NEI0NjBC
MDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQ29va2llSmFyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFMTQyNEM5MTE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvb2tpZUphci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUxNDI0QzkyMTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llSmFyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxNEYxQzQyMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTRGMUM0MzE0QjVEQUM2MDBFQTkwMDkgLyogSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxNUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTE5TTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE1NzEzLDYgKzE1NzE3LDcgQEAKIAkJCQk1MTRDNzY0NDBDRTkyMzRFMDA3RUYz
Q0QgLyogRm9ybURhdGFTdHJlYW1NYWMuaCAqLywKIAkJCQk1MTRDNzY0NTBDRTkyMzRFMDA3RUYz
Q0QgLyogRm9ybURhdGFTdHJlYW1NYWMubW0gKi8sCiAJCQkJMUE3RkE2NDcwRERBM0NCQTAwMjhG
OEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVyTWFjLmNwcCAqLywKKwkJCQlFMTQyNEM4RjE2NEI0
NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovLAogCQkJCTUxNEM3NjQ2MENFOTIzNEUw
MDdFRjNDRCAvKiBSZXNvdXJjZUVycm9yTWFjLm1tICovLAogCQkJCTUxNEM3NjQ3MENFOTIzNEUw
MDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZU1hYy5tbSAqLywKIAkJCQk1MTRDNzY0OTBDRTkyMzRF
MDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0TWFjLm1tICovLApAQCAtMTU3MzUsNyArMTU3NDAs
NiBAQAogCQkJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlwYm9hcmRNYWMubW0gKi8s
CiAJCQkJMDYwMjdDQjIwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRleHRNZW51SXRlbU1hYy5tbSAq
LywKIAkJCQk5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gKi8s
Ci0JCQkJOTM1MjA4NzYwOUJENDUzNDAwRjIwMzhEIC8qIENvb2tpZUphci5tbSAqLywKIAkJCQlG
NTg3ODRGMDAyREUzNzU5MDFFQTQxMjIgLyogQ3Vyc29yTWFjLm1tICovLAogCQkJCTVEOEM0REJE
MTQyODIyMkMwMDI2Q0U3MiAvKiBEaXNwbGF5U2xlZXBEaXNhYmxlci5jcHAgKi8sCiAJCQkJNUQ4
QzREQkUxNDI4MjIyQzAwMjZDRTcyIC8qIERpc3BsYXlTbGVlcERpc2FibGVyLmggKi8sCkBAIC0y
MDY5Niw2ICsyMDcwMCw4IEBACiAJCQkJRTFDNDE2MTYwRjY1NjMxODAwOTJEMkZCIC8qIENyb3Nz
T3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgKi8sCiAJCQkJNEZDODUzNDkxNjQ0MjcxQjAwRDFDMjc1
IC8qIENhY2hlZE1ldGFkYXRhLmNwcCAqLywKIAkJCQk0RkM4NTM0QTE2NDQyNzFCMDBEMUMyNzUg
LyogQ2FjaGVkTWV0YWRhdGEuaCAqLywKKwkJCQlFMTQyNEM5MTE2NEI1MkM4MDBGMzJENDAgLyog
Q29va2llSmFyLmNwcCAqLywKKwkJCQlFMTQyNEM5MjE2NEI1MkM4MDBGMzJENDAgLyogQ29va2ll
SmFyLmggKi8sCiAJCQkJRTFDNDE2MTEwRjY1NjJGRDAwOTJEMkZCIC8qIENyb3NzT3JpZ2luQWNj
ZXNzQ29udHJvbC5oICovLAogCQkJCUUxQzQxNUREMEY2NTVEN0MwMDkyRDJGQiAvKiBDcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCAqLywKIAkJCQlFMUM0MTVEOTBGNjU1RDZGMDA5
MkQyRkIgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oICovLApAQCAtMjA4NjAs
NyArMjA4NjYsNiBAQAogCQkJCTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVu
dS5oICovLAogCQkJCTA2MDI3Q0FDMEIxQ0JGQzAwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0ZW0u
aCAqLywKIAkJCQlEOEI2MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi8sCi0JCQkJ
OTM1MjA4ODEwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oICovLAogCQkJCTMzOUI1QjYy
MTMxREFBMzIwMEY0OEQwMiAvKiBDb29raWVzU3RyYXRlZ3kuaCAqLywKIAkJCQkyRTQzNDY1NjBG
NTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovLAogCQkJCTJFNDM0NjU3
MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oICovLApAQCAtMjA5MjMsNiAr
MjA5MjgsNyBAQAogCQkJCTk4RUIxRjk0MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRl
ZC5oICovLAogCQkJCTRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi8s
CiAJCQkJQzVGNzY1QjQxNEUxRDQxNDAwNkM4OTlCIC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oICov
LAorCQkJCUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICov
LAogCQkJCUJDNUM3NjI4MTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9ybUV2ZW50LmNwcCAqLywK
IAkJCQlCQzVDNzYyOTE0OTdGRTE0MDBCQzQ3NzUgLyogUGxhdGZvcm1FdmVudC5oICovLAogCQkJ
CUE3MjNGNzdBMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oICovLApA
QCAtMjI2MjcsNyArMjI2MzMsNiBAQAogCQkJCTdBREU3MjI2MTBDQkJCOUIwMDZCM0IzQSAvKiBD
b250ZXh0TWVudVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAyOTEyQjAyNjc2
MDBDMUEzNTkgLyogQ29udm9sdmVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDhCNjE1MkYx
MDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTM1MjA4ODIw
OUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzM5QjVC
NjMxMzFEQUEzMjAwRjQ4RDAyIC8qIENvb2tpZXNTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzNEMDIxMkQxMzFEQjM3QjAwNDA5MUE4IC8qIENvb2tpZVN0b3JhZ2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdFRTY4NDY0MTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQu
aCBpbiBIZWFkZXJzICovLApAQCAtMjU2ODcsNiArMjU2OTIsOCBAQAogCQkJCTNGRkZGOUE5MTU5
RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzQzM4QkZGMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDMzhDMDMxNjQ0NzNERDAwMDkxRUIyIC8qIFNjcm9sbGlu
Z1RyZWVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxNDI0QzhBMTY0QjNCNEUwMEYz
MkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTE0MjRDOTQx
NjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxMURD
QjExNjRDMzlBODAwRDQ5QkMxIC8qIFdpZHRoQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMjYyMDYsNyAr
MjYyMTMsNiBAQAogCQkJCTA2MDI3Q0IzMEIxQ0MwM0QwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0
ZW1NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0I2QTBFQTBCMEJDQTg0MDBGNTAyN0EgLyog
Q29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjAyODEyQjAyNjc2MDBD
MUEzNTkgLyogQ29udm9sdmVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5MzUyMDg3NzA5
QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0
NjIxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZUphckNGTmV0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdFRTY4NDYzMTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTEzRjAxRjExMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3Jh
Z2VNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTI4Nzc0LDYgKzI4NzgwLDggQEAKIAkJCQk5M0Mz
OEJGRTE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTNDMzhDMDQxNjQ0NzNERDAwMDkxRUIyIC8qIFNjcm9sbGluZ1RyZWVG
aXhlZE5vZGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk0RkM4NTM0QzE2NDQyNzIzMDBEMUMyNzUg
LyogQ2FjaGVkTWV0YWRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTE0MjRDOTAxNjRCNDYw
QjAwRjMyRDQwIC8qIENvb2tpZUphck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUUxNDI0Qzkz
MTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Db29raWVKYXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQ29va2llSmFyLmgiCisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0o
QkxBQ0tCRVJSWSkKKyNlcnJvciBDaHJvbWl1bSBhbmQgQmxhY2tiZXJyeSBjdXJyZW50bHkgdXNl
IGEgZm9yayBvZiB0aGlzIGZpbGUgYmVjYXVzZSBvZiBsYXllcmluZyB2aW9sYXRpb25zCisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgTmV0d29ya2luZ0NvbnRleHQqIG5l
dHdvcmtpbmdDb250ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBpZiAoIWRv
Y3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZUxv
YWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOworICAgIGlmICghbG9hZGVyKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpOworfQor
CitTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCkKK3sKKyAgICByZXR1cm4gY29va2llc0ZvckRPTShuZXR3b3JraW5nQ29udGV4dChkb2N1bWVu
dCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmwpOworfQorCit2b2lkIHNl
dENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY29va2llU3RyaW5nKQoreworICAgIHNldENvb2tpZXNGcm9tRE9NKG5ldHdvcmtpbmdDb250
ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHVybCwgY29v
a2llU3RyaW5nKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQpCit7CisgICAgcmV0dXJuIGNvb2tpZXNFbmFibGVkKG5ldHdvcmtpbmdDb250ZXh0KGRv
Y3VtZW50KSk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gY29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1
cmwpOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBjb29raWVzKQoreworICAgIHJldHVybiBn
ZXRSYXdDb29raWVzKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgdXJsLCBjb29raWVzKTsK
K30KKwordm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3sKKyAgICBkZWxldGVDb29raWUo
bmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZU5hbWUpOworfQorCit2b2lk
IGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQorewor
ICAgIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKDAsIGhvc3RuYW1lcyk7Cit9CisKK3ZvaWQgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKDAsIGhvc3RuYW1lKTsKK30KKwordm9pZCBkZWxldGVBbGxD
b29raWVzKCkKK3sKKyAgICBkZWxldGVBbGxDb29raWVzKDApOworfQorCit9CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9D
b29raWVKYXIuaAkocmV2aXNpb24gMTMzOTI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db29raWVKYXIuaDoxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDb29raWVKYXJfaAorI2RlZmluZSBDb29raWVKYXJfaAorCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEtVUkw7CitzdHJ1Y3QgQ29va2llOworCisv
LyBUaGVzZSB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBkb2N1bWVudC5jb29raWUgQVBJLCB3aXRo
IHNwZWNpYWwgcnVsZXMgZm9yIEh0dHBPbmx5IGNvb2tpZXMuCitTdHJpbmcgY29va2llcyhjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKK3ZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKworLy8gVGhlc2UgbWV0aG9kcyB1c2UgY3VycmVu
dCBjb29raWUgc3RvcmFnZSwgdGh1cyB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2RlIGludG8g
YWNjb3VudC4KK2Jvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKK1N0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
KTsKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0
b3I8Q29va2llPiYpOwordm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJik7CisKKy8vIFRoZXNlIGZ1bmN0aW9ucyBhbHdheXMgYWNjZXNz
IGRlZmF1bHQgY29va2llIHN0b3JhZ2UsIG5vdCB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2Rl
IGludG8gYWNjb3VudC4KK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJp
bmc+JiBob3N0bmFtZXMpOwordm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSk7Cit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKKworfQorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmgJKHJldmlzaW9uIDEzMzkyNikKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksMTMgKzM5LDEzIEBAIHN0cnVjdCBDb29raWU7CiAKIC8vIFRoZXNl
IHR3byBmdW5jdGlvbnMgaW1wbGVtZW50IGRvY3VtZW50LmNvb2tpZSBBUEksIHdpdGggc3BlY2lh
bCBydWxlcyBmb3IgSHR0cE9ubHkgY29va2llcy4KIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYpOwotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiwgY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYpOwordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiwgY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKTsKIAogLy8gVGhlc2UgbWV0aG9kcyB1c2Ug
Y3VycmVudCBjb29raWUgc3RvcmFnZSwgdGh1cyB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2Rl
IGludG8gYWNjb3VudC4KIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKIFN0
cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmKTsKIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
LCBWZWN0b3I8Q29va2llPiYpOwotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Cit2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwogCiAvLyBUaGVz
ZSBmdW5jdGlvbnMgYWx3YXlzIGFjY2VzcyBkZWZhdWx0IGNvb2tpZSBzdG9yYWdlLCBub3QgdGFr
aW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQuCiB2b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVy
cnkuY3BwCShyZXZpc2lvbiAxMzM5MjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Js
YWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHA6MTMzOTI2KQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC0yMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKworI2luY2x1ZGUgIkNv
b2tpZS5oIgorI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRCbGFja0Jl
cnJ5LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cExvYWREZWZlcnJlci5oIgorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1N0cmluZyBjb29raWVzKERvY3VtZW50IGNvbnN0KiBkb2N1bWVu
dCwgS1VSTCBjb25zdCYgdXJsKQoreworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFt
ZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOworCisgICAg
aWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAoIShmcmFtZSAm
JiBmcmFtZS0+bG9hZGVyKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmICghc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGll
bnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPmNvb2tpZXNFbmFibGVk
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIEFTU0VSVChkb2N1bWVudCAmJiB1
cmwgPT0gZG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKKyAgICAvLyAnSHR0cE9ubHknIGNvb2tpZXMg
c2hvdWxkIG5vIGJlIGFjY2Vzc2libGUgZnJvbSBzY3JpcHRzLCBzbyB3ZSBmaWx0ZXIgdGhlbSBv
dXQgaGVyZQorICAgIHJldHVybiBjb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llKHVybCwgTm9IdHRw
T25seUNvb2tpZSk7Cit9CisKK3ZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIEtV
UkwgY29uc3QmIHVybCwgU3RyaW5nIGNvbnN0JiB2YWx1ZSkKK3sKKyAgICBGcmFtZSogZnJhbWUg
PSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUgPyBmcmFtZS0+cGFn
ZSgpIDogMDsKKworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCEo
ZnJhbWUgJiYgZnJhbWUtPmxvYWRlcigpICYmIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXN0YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50
QmxhY2tCZXJyeSo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5jb29raWVzRW5hYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoZG9jdW1lbnQgJiYgdXJsID09IGRvY3Vt
ZW50LT5jb29raWVVUkwoKSk7CisgICAgY29va2llTWFuYWdlcigpLnNldENvb2tpZXModXJsLCB2
YWx1ZSwgTm9IdHRwT25seUNvb2tpZSk7Cit9CisKK2Jvb2wgY29va2llc0VuYWJsZWQoRG9jdW1l
bnQgY29uc3QqKQoreworICAgIC8vIEZJWE1FLiBDdXJyZW50bHkgY29va2llIGlzIGVuYWJsZWQg
YnkgZGVmYXVsdCwgbm8gc2V0dGluZyBvbiBwcm9wZXJ0eSBwYWdlLgorICAgIHJldHVybiB0cnVl
OworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIFZlY3RvcjxQ
YXJzZWRDb29raWUqPiByZXN1bHQ7CisgICAgY29va2llTWFuYWdlcigpLmdldFJhd0Nvb2tpZXMo
cmVzdWx0LCB1cmwsIFdpdGhIdHRwT25seUNvb2tpZXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVzdWx0LnNpemUoKTsgaSsrKQorICAgICAgICByZXN1bHRbaV0tPmFwcGVuZFdlYkNv
cmVDb29raWUocmF3Q29va2llcyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgLy8gQ29va2llcyBhcmUgbm90IGJvdW5kIHRvIHRo
ZSBkb2N1bWVudC4gVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIHRvIHBhc3MKKyAgICAvLyBpbiB0
aGUgZG9jdW1lbnQgb2JqZWN0IHRvIGZpbmQgdGhlIHRhcmdldGVkIGNvb2tpZXMgaW4gY29va2ll
IG1hbmFnZXIuCisgICAgY29va2llTWFuYWdlcigpLnJlbW92ZUNvb2tpZVdpdGhOYW1lKHVybCwg
Y29va2llTmFtZSk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkKK3sKKyAgICBBU1NFUlQo
ZG9jdW1lbnQpOworCisgICAgaWYgKCEoZG9jdW1lbnQtPmZyYW1lKCkgJiYgZG9jdW1lbnQtPmZy
YW1lKCktPmxvYWRlcigpICYmIGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCkp
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAoIXN0YXRpY19jYXN0PEZyYW1l
TG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xp
ZW50KCkpLT5jb29raWVzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICByZXR1cm4gY29va2llTWFuYWdlcigpLmdldENvb2tpZSh1cmwsIFdpdGhIdHRwT25seUNvb2tp
ZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAko
cmV2aXNpb24gMTMzOTI2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2JsYWNrYmVycnkvQ29v
a2llSmFyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogVW5mb3JrLiBUaGlzIGZpbGUgaXMgZm9y
a2VkIGJlY2F1c2UgYWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgTmV0d29ya2luZ0NvbnRleHQgdG8g
YWNjZXNzIGNvb2tpZSBqYXIsIG5vdCBEb2N1bWVudCBvciBGcmFtZS4KKwogU3RyaW5nIGNvb2tp
ZXMoRG9jdW1lbnQgY29uc3QqIGRvY3VtZW50LCBLVVJMIGNvbnN0JiB1cmwpCiB7CiAgICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEz
MzkyNikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29r
aWVKYXJDaHJvbWl1bS5jcHA6MTMzOTI2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9t
aXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKworI2luY2x1
ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dXBwb3J0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBzZXRDb29raWVzKERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorewor
ICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7Cit9
CisKK1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsKQoreworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoZG9jdW1lbnQsIHVy
bCk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1T
dXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKK30K
KworYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAg
cmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoZG9jdW1lbnQpOworfQorCiti
b29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIHJldHVybiBQbGF0Zm9ybVN1
cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7Cit9CisKK3ZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6
ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOworfQorCit2b2lkIGdldEhv
c3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIC8v
IEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCit9CisKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKK30KKwordm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICAvLyBGSVhN
RTogTm90IHlldCBpbXBsZW1lbnRlZAorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJv
bWl1bS5jcHAJKHJldmlzaW9uIDEzMzkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogVW5mb3JrLiBUaGlzIGZpbGUg
aXMgZm9ya2VkIGJlY2F1c2UgYWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgTmV0d29ya2luZ0NvbnRl
eHQgdG8gYWNjZXNzIGNvb2tpZSBqYXIsIG5vdCBEb2N1bWVudCBvciBGcmFtZS4KKwogdm9pZCBz
ZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewogICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwg
dXJsLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkocmV2aXNp
b24gMTMzOTQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBD
b29raWVKYXJfaAotI2RlZmluZSBDb29raWVKYXJfaAotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBEb2N1bWVudDsKLWNsYXNzIEtVUkw7Ci1zdHJ1Y3QgQ29va2llOwotCi0vLyBUaGVzZSB0
d28gZnVuY3Rpb25zIGltcGxlbWVudCBkb2N1bWVudC5jb29raWUgQVBJLCB3aXRoIHNwZWNpYWwg
cnVsZXMgZm9yIEh0dHBPbmx5IGNvb2tpZXMuCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmKTsKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmKTsKLQotLy8gVGhlc2UgbWV0aG9kcyB1c2UgY3VycmVudCBjb29raWUg
c3RvcmFnZSwgdGh1cyB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4K
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLVN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLWJvb2wg
Z2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2ll
PiYpOwotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJik7Ci0KLS8vIFRoZXNlIGZ1bmN0aW9ucyBhbHdheXMgYWNjZXNzIGRlZmF1bHQg
Y29va2llIHN0b3JhZ2UsIG5vdCB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2RlIGludG8gYWNj
b3VudC4KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0
bmFtZXMpOwotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSk7Ci12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVK
YXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMzOTQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLwotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLTIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotCi0jaW5jbHVkZSAiQ29va2ll
LmgiCi0jaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnku
aCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwTG9hZERlZmVycmVyLmgiCi0jaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotU3RyaW5nIGNvb2tpZXMoRG9jdW1lbnQgY29uc3QqIGRvY3VtZW50LCBL
VVJMIGNvbnN0JiB1cmwpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7
Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7Ci0KLSAgICBpZiAo
IXBhZ2UpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmICghKGZyYW1lICYmIGZy
YW1lLT5sb2FkZXIoKSAmJiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKSkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotCi0gICAgaWYgKCFzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEJs
YWNrQmVycnkqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+Y29va2llc0VuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgQVNTRVJUKGRvY3VtZW50ICYmIHVybCA9
PSBkb2N1bWVudC0+Y29va2llVVJMKCkpOwotICAgIC8vICdIdHRwT25seScgY29va2llcyBzaG91
bGQgbm8gYmUgYWNjZXNzaWJsZSBmcm9tIHNjcmlwdHMsIHNvIHdlIGZpbHRlciB0aGVtIG91dCBo
ZXJlCi0gICAgcmV0dXJuIGNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWUodXJsLCBOb0h0dHBPbmx5
Q29va2llKTsKLX0KLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgS1VSTCBj
b25zdCYgdXJsLCBTdHJpbmcgY29uc3QmIHZhbHVlKQotewotICAgIEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50LT5mcmFtZSgpOwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdlKCkg
OiAwOwotCi0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIShmcmFt
ZSAmJiBmcmFtZS0+bG9hZGVyKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFj
a0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPmNvb2tpZXNFbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChkb2N1bWVudCAmJiB1cmwgPT0gZG9jdW1lbnQt
PmNvb2tpZVVSTCgpKTsKLSAgICBjb29raWVNYW5hZ2VyKCkuc2V0Q29va2llcyh1cmwsIHZhbHVl
LCBOb0h0dHBPbmx5Q29va2llKTsKLX0KLQotYm9vbCBjb29raWVzRW5hYmxlZChEb2N1bWVudCBj
b25zdCopCi17Ci0gICAgLy8gRklYTUUuIEN1cnJlbnRseSBjb29raWUgaXMgZW5hYmxlZCBieSBk
ZWZhdWx0LCBubyBzZXR0aW5nIG9uIHByb3BlcnR5IHBhZ2UuCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgVmVjdG9yPFBhcnNl
ZENvb2tpZSo+IHJlc3VsdDsKLSAgICBjb29raWVNYW5hZ2VyKCkuZ2V0UmF3Q29va2llcyhyZXN1
bHQsIHVybCwgV2l0aEh0dHBPbmx5Q29va2llcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByZXN1bHQuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJlc3VsdFtpXS0+YXBwZW5kV2ViQ29yZUNv
b2tpZShyYXdDb29raWVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBkZWxldGVDb29r
aWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY29va2llTmFtZSkKLXsKLSAgICAvLyBDb29raWVzIGFyZSBub3QgYm91bmQgdG8gdGhlIGRv
Y3VtZW50LiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8gcGFzcwotICAgIC8vIGluIHRoZSBk
b2N1bWVudCBvYmplY3QgdG8gZmluZCB0aGUgdGFyZ2V0ZWQgY29va2llcyBpbiBjb29raWUgbWFu
YWdlci4KLSAgICBjb29raWVNYW5hZ2VyKCkucmVtb3ZlQ29va2llV2l0aE5hbWUodXJsLCBjb29r
aWVOYW1lKTsKLX0KLQotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQotewotICAgIEFTU0VSVChkb2N1
bWVudCk7Ci0KLSAgICBpZiAoIShkb2N1bWVudC0+ZnJhbWUoKSAmJiBkb2N1bWVudC0+ZnJhbWUo
KS0+bG9hZGVyKCkgJiYgZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKSkpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmICghc3RhdGljX2Nhc3Q8RnJhbWVMb2Fk
ZXJDbGllbnRCbGFja0JlcnJ5Kj4oZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQo
KSktPmNvb2tpZXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJl
dHVybiBjb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llKHVybCwgV2l0aEh0dHBPbmx5Q29va2llcyk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0Nvb2tpZUphci5tbQkocmV2aXNpb24gMTMzOTQ2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwxOTQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJDb29raWVKYXIuaCIKLQotI2lmICFVU0UoQ0ZORVRXT1JLKQotCi0jaW1wb3J0ICJCbG9ja0V4
Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkNvb2tpZS5oIgotI2ltcG9ydCAiQ29va2llU3RvcmFnZS5o
IgotI2ltcG9ydCAiQ29va2llU3RvcmFnZUNGTmV0LmgiCi0jaW1wb3J0ICJEb2N1bWVudC5oIgot
I2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2llcyhOU0FycmF5ICp1bmZp
bHRlcmVkQ29va2llcykKLXsKLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW3VuZmlsdGVyZWRDb29r
aWVzIGNvdW50XTsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGZpbHRlcmVkQ29va2ll
cyhBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvdW50
XSk7Ci0KLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVt1bmZpbHRlcmVkQ29v
a2llcyBvYmplY3RBdEluZGV4OmldOwotCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMy
ODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNv
b2tpZSwKLSAgICAgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2Ug
aGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29va2llcygpIHRvIHByZXZlbnQKLSAgICAgICAgLy8g
dGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBhdm9pZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJl
IHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKLSAgICAgICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRv
aW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNoIGEgY29va2llIGlzIG5ldmVyIHZhbGlkLgotICAg
ICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBpZiAoW2Nvb2tpZSBpc0hUVFBPbmx5XSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgYWRkT2JqZWN0OmNvb2tpZV07Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKLX0KLQotU3RyaW5nIGNvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JV
UkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsKLSAgICByZXR1cm4g
W1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVzOmZpbHRlckNvb2tp
ZXMoY29va2llcykuZ2V0KCldIG9iamVjdEZvcktleTpAIkNvb2tpZSJdOwotCi0gICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
IHVybCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5
ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpLmdldCgpLCB1cmwpOwotICAgIHJldHVybiBbW05TSFRUUENvb2tpZSByZXF1ZXN0SGVhZGVy
RmllbGRzV2l0aENvb2tpZXM6Y29va2llc10gb2JqZWN0Rm9yS2V5OkAiQ29va2llIl07Ci0KLSAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQot
dm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGNvb2tpZVN0cikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci0KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2ll
U3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCi0gICAgLy8gd2hpY2ggd291bGQg
YmUgc2VudCBhcyAiQ29va2llOiA9Ii4KLSAgICBpZiAoY29va2llU3RyLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+Ci0gICAgLy8gY29va2llc1dpdGhSZXNwb25z
ZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCi0gICAg
U3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZVN0ci5jb250YWlucygnPScpID8gY29va2llU3Ry
IDogY29va2llU3RyICsgIj0iOwotCi0gICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKLSAgICBS
ZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29raWVzID0gZmlsdGVyQ29va2llcyhbTlNIVFRQ
Q29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHM6W05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcgZm9yS2V5OkAiU2V0LUNvb2tpZSJdIGZvclVS
TDpjb29raWVVUkxdKTsKLSAgICBBU1NFUlQoW2ZpbHRlcmVkQ29va2llcy5nZXQoKSBjb3VudF0g
PD0gMSk7Ci0KLSAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCkuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVu
dC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKLXsKLSAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0hUVFBDb29raWVBY2NlcHRQb2xp
Y3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9s
aWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY3VycmVudENGSFRUUENvb2tpZVN0b3Jh
Z2UoKS5nZXQoKSkpOwotICAgIHJldHVybiBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29v
a2llQWNjZXB0UG9saWN5QWx3YXlzIHx8IGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKLQotICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0Zv
clVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOwotICAgIE5TVUlu
dGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07Ci0gICAgcmF3Q29va2llcy5yZXNlcnZlQ2Fw
YWNpdHkoY291bnQpOwotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKLSAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tp
ZXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgTlNUaW1lSW50ZXJ2YWwgZXhwaXJlcyA9IFtb
Y29va2llIGV4cGlyZXNEYXRlXSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdICogMTAwMDsKLSAgICAg
ICAgcmF3Q29va2llcy51bmNoZWNrZWRBcHBlbmQoQ29va2llKFtjb29raWUgbmFtZV0sIFtjb29r
aWUgdmFsdWVdLCBbY29va2llIGRvbWFpbl0sIFtjb29raWUgcGF0aF0sIGV4cGlyZXMsCi0gICAg
ICAgICAgICBbY29va2llIGlzSFRUUE9ubHldLCBbY29va2llIGlzU2VjdXJlXSwgW2Nvb2tpZSBp
c1Nlc3Npb25Pbmx5XSkpOwotICAgIH0KLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50
KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsK
LSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7Ci0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRU
UENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llVVJMKTsKLQotICAgIE5T
U3RyaW5nICpjb29raWVOYW1lU3RyaW5nID0gY29va2llTmFtZTsKLQotICAgIE5TVUludGVnZXIg
Y291bnQgPSBbY29va2llcyBjb3VudF07Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgewotICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29r
aWUgKilbY29va2llcyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBpZiAoW1tjb29raWUgbmFt
ZV0gaXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5hbWVTdHJpbmddKQotICAgICAgICAgICAgd2tEZWxl
dGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7Ci0gICAgfQotCi0gICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llcyhkZWZh
dWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKTsKLSAgICAKLSAgICBmb3IgKE5TSFRUUENv
b2tpZSogY29va2llIGluIGNvb2tpZXMpCi0gICAgICAgIGhvc3RuYW1lcy5hZGQoW2Nvb2tpZSBk
b21haW5dKTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi12b2lk
IGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQotewotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2Uo
KTsKLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llcyhjb29raWVTdG9yYWdlLmdl
dCgpKTsKLSAgICBpZiAoIWNvb2tpZXMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3Ig
KE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpIHsKLSAgICAgICAgaWYgKGhvc3RuYW1l
ID09IFN0cmluZyhbY29va2llIGRvbWFpbl0pKQotICAgICAgICAgICAgd2tEZWxldGVIVFRQQ29v
a2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7Ci0gICAgfQotICAgIAotICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCi17Ci0g
ICAgd2tEZWxldGVBbGxIVFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdl
dCgpKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gIVVTRShDRk5FVFdPUkspCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2llSmFyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCShy
ZXZpc2lvbiAxMzM5MjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5o
OjEzMzkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29r
aWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENvb2tpZUphcl9oCisjZGVmaW5lIENvb2tpZUphcl9oCisKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgS1VSTDsKK3N0cnVjdCBDb29raWU7
CisKKy8vIFRoZXNlIHR3byBmdW5jdGlvbnMgaW1wbGVtZW50IGRvY3VtZW50LmNvb2tpZSBBUEks
IHdpdGggc3BlY2lhbCBydWxlcyBmb3IgSHR0cE9ubHkgY29va2llcy4KK1N0cmluZyBjb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwordm9pZCBzZXRDb29raWVzKERvY3VtZW50
KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworCisvLyBUaGVzZSBtZXRob2RzIHVzZSBj
dXJyZW50IGNvb2tpZSBzdG9yYWdlLCB0aHVzIHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUg
aW50byBhY2NvdW50LgorYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOworU3Ry
aW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYpOworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYs
IFZlY3RvcjxDb29raWU+Jik7Cit2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKworLy8gVGhlc2UgZnVuY3Rpb25zIGFsd2F5cyBh
Y2Nlc3MgZGVmYXVsdCBjb29raWUgc3RvcmFnZSwgbm90IHRha2luZyBwcml2YXRlIGJyb3dzaW5n
IG1vZGUgaW50byBhY2NvdW50Lgordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcyk7Cit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lKTsKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygpOworCit9CisKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tp
ZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxh
dGZvcm1Db29raWVKYXIuaAkocmV2aXNpb24gMTMzOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywz
NCArMjMsMzAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDb29raWVKYXJfaAot
I2RlZmluZSBDb29raWVKYXJfaAorI2lmbmRlZiBQbGF0Zm9ybUNvb2tpZUphcl9oCisjZGVmaW5l
IFBsYXRmb3JtQ29va2llSmFyX2gKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBLVVJMOworY2xhc3Mg
TmV0d29ya2luZ0NvbnRleHQ7CiBzdHJ1Y3QgQ29va2llOwogCi0vLyBUaGVzZSB0d28gZnVuY3Rp
b25zIGltcGxlbWVudCBkb2N1bWVudC5jb29raWUgQVBJLCB3aXRoIHNwZWNpYWwgcnVsZXMgZm9y
IEh0dHBPbmx5IGNvb2tpZXMuCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmKTsKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmKTsKLQotLy8gVGhlc2UgbWV0aG9kcyB1c2UgY3VycmVudCBjb29raWUgc3RvcmFnZSwg
dGh1cyB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4KLWJvb2wgY29v
a2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLWJvb2wgZ2V0UmF3Q29v
a2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotdm9p
ZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
Jik7Ci0KLS8vIFRoZXNlIGZ1bmN0aW9ucyBhbHdheXMgYWNjZXNzIGRlZmF1bHQgY29va2llIHN0
b3JhZ2UsIG5vdCB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBtb2RlIGludG8gYWNjb3VudC4KLXZv
aWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7Ci12
b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKKy8vIElmIG5ldHdvcmtpbmcgY29udGV4dCBpcyBudWxs
LCBkZWZhdWx0IGNvb2tpZSBzdG9yYWdlIGlzIHVzZWQuCitTdHJpbmcgY29va2llc0ZvckRPTShO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmKTsK
K3ZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Citib29sIGNvb2tpZXNFbmFi
bGVkKE5ldHdvcmtpbmdDb250ZXh0Kik7CitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJik7Citib29sIGdldFJhd0Nvb2tp
ZXMoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKK3Zv
aWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYpOwordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCos
IEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7Cit2b2lkIGRl
bGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqKTsKIAogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNw
cAkocmV2aXNpb24gMTMzOTQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9Db29raWVKYXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI0LDEzICsyNCwxMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogCiAjaWYgVVNF
KENGTkVUV09SSykKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZVN0b3Jh
Z2VDRk5ldC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKQEAgLTk1
LDE4ICs5NCwxOCBAQCBzdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZpbHRlckNvb2tpCiAg
ICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBz
ZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAg
IC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVTdG9yYWdlIHN0b3JlcyBh
biBlbXB0eSBjb29raWUsIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCiAgICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0
Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3Jl
YXRlQ0ZVUkwoKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2ll
c0NGKEFkb3B0Q0YsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLmNyZWF0ZUNGVVJM
KCkpOworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9w
dENGLCBmaXJzdFBhcnR5LmNyZWF0ZUNGVVJMKCkpOwogCiAgICAgLy8gPGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+CiAgICAgLy8g
Y29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0
aG91dCBhIHZhbHVlCkBAIC0xMjMsOSArMTIyLDkgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50
KiBkb2N1bWVudCwgY29ucwogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tp
ZVN0b3JhZ2UuZ2V0KCksIGZpbHRlckNvb2tpZXMoY29va2llc0NGLmdldCgpKS5nZXQoKSwgdXJs
Q0YuZ2V0KCksIGZpcnN0UGFydHlGb3JDb29raWVzQ0YuZ2V0KCkpOwogfQogCi1TdHJpbmcgY29v
a2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJp
bmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYs
IGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdl
KCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
QEAgLTEzNyw5ICsxMzYsOSBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1
bWVuCiAgICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJD
Ri5nZXQoKSwgc19jb29raWVDRik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitT
dHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7Cisg
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250
ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKQEAgLTE1MSwxOCArMTUwLDE5IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb24KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBjb29raWVzRW5hYmxlZChOZXR3b3Jr
aW5nQ29udGV4dCogY29udGV4dCkKIHsKICAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9s
aWN5IHBvbGljeSA9IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5E
b2N1bWVudERvbWFpbjsKLSAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQorICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgp
OworICAgIGlmIChjb29raWVTdG9yYWdlKQogICAgICAgICBwb2xpY3kgPSBDRkhUVFBDb29raWVT
dG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwogICAgIHJl
dHVybiBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFp
bkRvY3VtZW50RG9tYWluIHx8IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9s
aWN5QWx3YXlzOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRSYXdDb29r
aWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxD
b29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6
IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE5Myw5ICsxOTMsOSBAQCBib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0
Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yMTQsOSArMjE0LDkgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9j
dW1lbnQqLCBjb25zdAogICAgIH0KIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQog
ewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0g
ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tp
ZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjMyLDkgKzIzMiw5IEBAIHZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBob3N0bmFtZSkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAg
ICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTI1MSw5ICsyNTEs
OSBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpCiAgICAgfQogfQog
Ci12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQg
PyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3Jh
Z2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzMzk0NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkNvb2tpZUphci5oIgotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29r
aWVzKGRvY3VtZW50LCB1cmwsIHZhbHVlKTsKLX0KLQotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3Jt
U3VwcG9ydDo6Y29va2llcyhkb2N1bWVudCwgdXJsKTsKLX0KLQotU3RyaW5nIGNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsKQotewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29r
aWVzRW5hYmxlZChkb2N1bWVudCk7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tp
ZXMpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhkb2N1bWVudCwg
dXJsLCByYXdDb29raWVzKTsKLX0KLQotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsK
LSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUoZG9jdW1lbnQsIHVybCwg
Y29va2llTmFtZSk7Ci19Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxT
dHJpbmc+JiBob3N0bmFtZXMpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQK
LX0KLQotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSkKLXsKLSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAotfQotCi12b2lkIGRlbGV0
ZUFsbENvb2tpZXMoKQotewotICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCi19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAJKHJldmlzaW9uIDEzMzk0
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUsMTAgKzE1LDkgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29r
aWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMjgsNTAgKzI3LDUwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUphcjsKIAotdm9pZCBz
ZXRDb29raWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3ZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewog
ICAgIGNvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29r
aWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmlu
ZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IEtV
UkwmIHVybCkKIHsKICAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQog
Ci1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIC8q
ZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIC8v
IEZJWE1FOiBpbmNsdWRlIEh0dHBPbmx5IGNvb2tpZS4KICAgICByZXR1cm4gY29va2llSmFyLmdl
dCh1cmwuc3RyaW5nKCkpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50
KiAvKmRvY3VtZW50Ki8pCitib29sIGNvb2tpZXNFbmFibGVkKE5ldHdvcmtpbmdDb250ZXh0KikK
IHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRS
YXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAg
cmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hl
biBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBkZWxldGVDb29raWUoTmV0d29ya2luZ0Nv
bnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKIHsKICAgICAvLyBGSVhNRTogTm90
IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3
b3JraW5nQ29udGV4dCosIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkK
K3ZvaWQgZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCopCiB7CiAgICAgLy8gRklY
TUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0JKHJldmlzaW9uIDEzMzkyNikJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToxMzM5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDYsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiQ29va2llSmFyLmgiCisKKyNpZiAhVVNFKENG
TkVUV09SSykKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJDb29raWUu
aCIKKyNpbXBvcnQgIkNvb2tpZVN0b3JhZ2UuaCIKKyNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5l
dC5oIgorI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+
IGZpbHRlckNvb2tpZXMoTlNBcnJheSAqdW5maWx0ZXJlZENvb2tpZXMpCit7CisgICAgTlNVSW50
ZWdlciBjb3VudCA9IFt1bmZpbHRlcmVkQ29va2llcyBjb3VudF07CisgICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiBmaWx0ZXJlZENvb2tpZXMoQWRvcHROUywgW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb3VudF0pOworCisgICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChO
U0hUVFBDb29raWUgKilbdW5maWx0ZXJlZENvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKKworICAg
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3Rv
cmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCisgICAgICAgIC8vIHdoaWNoIHdvdWxk
IGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuIFdlIGhhdmUgYSB3b3JrYXJvdW5kIGluIHNldENvb2tp
ZXMoKSB0byBwcmV2ZW50CisgICAgICAgIC8vIHRoYXQsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gYXZv
aWQgc2VuZGluZyBjb29raWVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHN0b3JlZCwgYW5kCisgICAg
ICAgIC8vIHRoZXJlJ3Mgbm8gaGFybSB0byBkb2luZyB0aGlzIGNoZWNrIGJlY2F1c2Ugc3VjaCBh
IGNvb2tpZSBpcyBuZXZlciB2YWxpZC4KKyAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5n
dGhdKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKFtjb29raWUgaXNIVFRQ
T25seV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBbZmlsdGVyZWRDb29raWVz
LmdldCgpIGFkZE9iamVjdDpjb29raWVdOworICAgIH0KKworICAgIHJldHVybiBmaWx0ZXJlZENv
b2tpZXM7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYg
dXJsKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TQXJyYXkg
KmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCkuZ2V0KCksIHVybCk7CisgICAgcmV0dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJG
aWVsZHNXaXRoQ29va2llczpmaWx0ZXJDb29raWVzKGNvb2tpZXMpLmdldCgpXSBvYmplY3RGb3JL
ZXk6QCJDb29raWUiXTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
Y29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworCisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JV
UkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsKKyAgICByZXR1cm4g
W1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVzOmNvb2tpZXNdIG9i
amVjdEZvcktleTpAIkNvb2tpZSJdOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCit7CisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2
MzI4ODM+IE9uIDEwLjUsIE5TSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkg
Y29va2llLAorICAgIC8vIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCisgICAg
aWYgKGNvb2tpZVN0ci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0
PgorICAgIC8vIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBj
b29raWVzIHdpdGhvdXQgYSB2YWx1ZQorICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVT
dHIuY29udGFpbnMoJz0nKSA/IGNvb2tpZVN0ciA6IGNvb2tpZVN0ciArICI9IjsKKworICAgIE5T
VVJMICpjb29raWVVUkwgPSB1cmw7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29v
a2llcyA9IGZpbHRlckNvb2tpZXMoW05TSFRUUENvb2tpZSBjb29raWVzV2l0aFJlc3BvbnNlSGVh
ZGVyRmllbGRzOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6Y29va2llU3RyaW5n
IGZvcktleTpAIlNldC1Db29raWUiXSBmb3JVUkw6Y29va2llVVJMXSk7CisgICAgQVNTRVJUKFtm
aWx0ZXJlZENvb2tpZXMuZ2V0KCkgY291bnRdIDw9IDEpOworCisgICAgd2tTZXRIVFRQQ29va2ll
c0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCBmaWx0ZXJlZENvb2tp
ZXMuZ2V0KCksIGNvb2tpZVVSTCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwor
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworYm9vbCBjb29raWVzRW5hYmxl
ZChjb25zdCBEb2N1bWVudCopCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
CisgICAgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IHN0YXRp
Y19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4od2tHZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCkpKTsKKyAgICByZXR1cm4gY29v
a2llQWNjZXB0UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyB8fCBjb29r
aWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9j
dW1lbnREb21haW47CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICByYXdDb29raWVz
LmNsZWFyKCk7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJh
eSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3Jh
Z2UoKS5nZXQoKSwgdXJsKTsKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRd
OworICAgIHJhd0Nvb2tpZXMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKKyAgICBmb3IgKE5TVUlu
dGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5TSFRUUENvb2tpZSAqY29v
a2llID0gKE5TSFRUUENvb2tpZSAqKVtjb29raWVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAg
IE5TVGltZUludGVydmFsIGV4cGlyZXMgPSBbW2Nvb2tpZSBleHBpcmVzRGF0ZV0gdGltZUludGVy
dmFsU2luY2UxOTcwXSAqIDEwMDA7CisgICAgICAgIHJhd0Nvb2tpZXMudW5jaGVja2VkQXBwZW5k
KENvb2tpZShbY29va2llIG5hbWVdLCBbY29va2llIHZhbHVlXSwgW2Nvb2tpZSBkb21haW5dLCBb
Y29va2llIHBhdGhdLCBleHBpcmVzLAorICAgICAgICAgICAgW2Nvb2tpZSBpc0hUVFBPbmx5XSwg
W2Nvb2tpZSBpc1NlY3VyZV0sIFtjb29raWUgaXNTZXNzaW9uT25seV0pKTsKKyAgICB9CisKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBjb29raWVOYW1lKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwor
ICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwor
ICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2Uu
Z2V0KCksIGNvb2tpZVVSTCk7CisKKyAgICBOU1N0cmluZyAqY29va2llTmFtZVN0cmluZyA9IGNv
b2tpZU5hbWU7CisKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOworICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNIVFRQ
Q29va2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDpp
XTsKKyAgICAgICAgaWYgKFtbY29va2llIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpjb29raWVOYW1l
U3RyaW5nXSkKKyAgICAgICAgICAgIHdrRGVsZXRlSFRUUENvb2tpZShjb29raWVTdG9yYWdlLmdl
dCgpLCBjb29raWUpOworICAgIH0KKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9
CisKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFt
ZXMpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJheSAq
Y29va2llcyA9IHdrSFRUUENvb2tpZXMoZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQo
KSk7CisgICAgCisgICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKQorICAg
ICAgICBob3N0bmFtZXMuYWRkKFtjb29raWUgZG9tYWluXSk7CisgICAgCisgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29u
c3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9
IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgTlNBcnJheSAqY29va2llcyA9IHdr
SFRUUENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7CisgICAgaWYgKCFjb29raWVzKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29r
aWVzKSB7CisgICAgICAgIGlmIChob3N0bmFtZSA9PSBTdHJpbmcoW2Nvb2tpZSBkb21haW5dKSkK
KyAgICAgICAgICAgIHdrRGVsZXRlSFRUUENvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBjb29r
aWUpOworICAgIH0KKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2
b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQoreworICAgIHdrRGVsZXRlQWxsSFRUUENvb2tpZXMoZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Cit9CisKK30KKworI2VuZGlmIC8vICFV
U0UoQ0ZORVRXT1JLKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMv
Q29va2llSmFyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQkocmV2aXNpb24gMTMzOTI2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJD
b29raWVKYXIuaCIKKyNpbXBvcnQgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAKICNpZiAhVVNFKENG
TkVUV09SSykKIApAQCAtMzIsNyArMzIsNyBAQAogI2ltcG9ydCAiQ29va2llLmgiCiAjaW1wb3J0
ICJDb29raWVTdG9yYWdlLmgiCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKLSNpbXBv
cnQgIkRvY3VtZW50LmgiCisjaW1wb3J0ICJLVVJMLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYxLDI5ICs2MSwzMSBAQCBz
dGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoCiAgICAgcmV0dXJuIGZpbHRl
cmVkQ29va2llczsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCwgY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CiAKLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVS
TChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOworICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJl
bnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwor
ICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2Uu
Z2V0KCksIHVybCk7CiAgICAgcmV0dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJGaWVs
ZHNXaXRoQ29va2llczpmaWx0ZXJDb29raWVzKGNvb2tpZXMpLmdldCgpXSBvYmplY3RGb3JLZXk6
QCJDb29raWUiXTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgcmV0dXJu
IFN0cmluZygpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29u
c3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCkK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBOU0FycmF5ICpjb29r
aWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdl
dCgpLCB1cmwpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0
Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29r
aWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCk7CiAgICAgcmV0dXJuIFtbTlNIVFRQ
Q29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpjb29raWVzXSBvYmplY3RGb3JL
ZXk6QCJDb29raWUiXTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgcmV0
dXJuIFN0cmluZygpOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQordm9pZCBzZXRDb29raWVz
RnJvbURPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKIHsKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTEwMCwyOCArMTAyLDMxIEBAIHZvaWQgc2V0
Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBSZXRhaW5QdHI8TlNBcnJheT4g
ZmlsdGVyZWRDb29raWVzID0gZmlsdGVyQ29va2llcyhbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRo
UmVzcG9uc2VIZWFkZXJGaWVsZHM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpj
b29raWVTdHJpbmcgZm9yS2V5OkAiU2V0LUNvb2tpZSJdIGZvclVSTDpjb29raWVVUkxdKTsKICAg
ICBBU1NFUlQoW2ZpbHRlcmVkQ29va2llcy5nZXQoKSBjb3VudF0gPD0gMSk7CiAKLSAgICB3a1Nl
dEhUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIGZp
bHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0
b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRD
RkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjb29raWVT
dG9yYWdlLmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0
eSk7CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi1ib29sIGNvb2tpZXNF
bmFibGVkKGNvbnN0IERvY3VtZW50KikKK2Jvb2wgY29va2llc0VuYWJsZWQoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0g
ICAgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IHN0YXRpY19j
YXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4od2tHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCkpKTsKKyAgICBSZXRhaW5QdHI8Q0ZI
VFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBO
U0hUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nhc3Q8
TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY29v
a2llU3RvcmFnZS5nZXQoKSkpOwogICAgIHJldHVybiBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNI
VFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIHx8IGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hU
VFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKIAogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGdl
dFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29r
aWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewog
ICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CiAKLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIE5TQXJyYXkg
KmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCk7
CiAgICAgTlNVSW50ZWdlciBjb3VudCA9IFtjb29raWVzIGNvdW50XTsKICAgICByYXdDb29raWVz
LnJlc2VydmVDYXBhY2l0eShjb3VudCk7CiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgewpAQCAtMTM1LDEyICsxNDAsMTIgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNv
bnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNv
b2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29r
aWVOYW1lKQordm9pZCBkZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewogICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7Ci0gICAg
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIE5TQXJyYXkgKmNvb2tpZXMg
PSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZVVSTCk7CiAK
ICAgICBOU1N0cmluZyAqY29va2llTmFtZVN0cmluZyA9IGNvb2tpZU5hbWU7CkBAIC0xNTUsMTEg
KzE2MCwxMiBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0CiAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5h
bWVzKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIE5TQXJyYXkg
KmNvb2tpZXMgPSB3a0hUVFBDb29raWVzKGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0
KCkpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdl
ID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOworICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzKGNv
b2tpZVN0b3JhZ2UuZ2V0KCkpOwogICAgIAogICAgIGZvciAoTlNIVFRQQ29va2llKiBjb29raWUg
aW4gY29va2llcykKICAgICAgICAgaG9zdG5hbWVzLmFkZChbY29va2llIGRvbWFpbl0pOwpAQCAt
MTY3LDExICsxNzMsMTEgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0
cgogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGRlZmF1bHRDRkhUVFBD
b29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRl
ZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRU
UENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgaWYgKCFjb29raWVzKQogICAgICAg
ICByZXR1cm47CkBAIC0xODQsOSArMTkwLDEwIEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGNvbnN0IFN0cmkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lk
IGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0KQogewotICAgIHdrRGVsZXRlQWxsSFRUUENvb2tpZXMoZGVmYXVsdENGSFRU
UENvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3Jh
Z2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgd2tEZWxldGVBbGxIVFRQ
Q29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5jcHAJKHJldmlzaW9u
IDEzMzkyNikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3Bw
OjEzMzkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFy
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ29va2llSmFyUXQuaCIKKworI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUg
IkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJO
ZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHlDb29raWVzUXQuaCIKKyNp
bmNsdWRlIDxRRGF0ZVRpbWU+CisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2lu
Y2x1ZGUgPFFOZXR3b3JrQ29va2llPgorI2luY2x1ZGUgPFFTcWxRdWVyeT4KKyNpbmNsdWRlIDxR
U3RyaW5nTGlzdD4KKyNpbmNsdWRlIDxRVmFyaWFudD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgU2hhcmVkQ29va2llSmFy
UXQqIHNfc2hhcmVkQ29va2llSmFyUXQgPSAwOworCitzdGF0aWMgTmV0d29ya2luZ0NvbnRleHQq
IG5ldHdvcmtpbmdDb250ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBpZiAo
IWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFt
ZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOworICAgIGlmICghbG9hZGVyKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpOwor
fQorCit2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQg
PSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm47CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIGlmICghamFyKQorICAgICAgICByZXR1
cm47CisKKyAgICBRVXJsIHVybEZvckNvb2tpZXModXJsKTsKKyAgICBRVXJsIGZpcnN0UGFydHlV
cmwoZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIGlmICghdGhpcmRQYXJ0
eUNvb2tpZVBvbGljeVBlcm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVy
bCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVz
ID0gUU5ldHdvcmtDb29raWU6OnBhcnNlQ29va2llcyhRU3RyaW5nKHZhbHVlKS50b0xhdGluMSgp
KTsKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGl0ID0gY29va2llcy5iZWdp
bigpOworICAgIHdoaWxlIChpdCAhPSBjb29raWVzLmVuZCgpKSB7CisgICAgICAgIGlmIChpdC0+
aXNIdHRwT25seSgpKQorICAgICAgICAgICAgaXQgPSBjb29raWVzLmVyYXNlKGl0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKytpdDsKKyAgICB9CisKKyAgICBqYXItPnNldENvb2tpZXNG
cm9tVXJsKGNvb2tpZXMsIHVybEZvckNvb2tpZXMpOworfQorCitTdHJpbmcgY29va2llcyhjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKKyAgICBpZiAo
IWNvbnRleHQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUph
ciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisK
KyAgICBRVXJsIHVybEZvckNvb2tpZXModXJsKTsKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIGlmICghdGhpcmRQYXJ0eUNvb2tp
ZVBvbGljeVBlcm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29r
aWVzID0gamFyLT5jb29raWVzRm9yVXJsKHVybEZvckNvb2tpZXMpOworICAgIGlmIChjb29raWVz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUVN0cmluZ0xpc3Qg
cmVzdWx0Q29va2llczsKKyAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya0Nvb2tpZSYgbmV0d29y
a0Nvb2tpZSwgY29va2llcykgeworICAgICAgICBpZiAobmV0d29ya0Nvb2tpZS5pc0h0dHBPbmx5
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmVzdWx0Q29va2llcy5hcHBlbmQo
UVN0cmluZzo6ZnJvbUxhdGluMShuZXR3b3JrQ29va2llLnRvUmF3Rm9ybShRTmV0d29ya0Nvb2tp
ZTo6TmFtZUFuZFZhbHVlT25seSkuY29uc3REYXRhKCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOworfQorCitTdHJpbmcgY29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBLVVJMICZ1cmwpCit7CisgICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3Jr
aW5nQ29udGV4dChkb2N1bWVudCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+
IGNvb2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwoUVVybCh1cmwpKTsKKyAgICBpZiAoY29va2ll
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFFTdHJpbmdMaXN0
IHJlc3VsdENvb2tpZXM7CisgICAgZm9yZWFjaCAoUU5ldHdvcmtDb29raWUgbmV0d29ya0Nvb2tp
ZSwgY29va2llcykKKyAgICAgICAgcmVzdWx0Q29va2llcy5hcHBlbmQoUVN0cmluZzo6ZnJvbUxh
dGluMShuZXR3b3JrQ29va2llLnRvUmF3Rm9ybShRTmV0d29ya0Nvb2tpZTo6TmFtZUFuZFZhbHVl
T25seSkuY29uc3REYXRhKCkpKTsKKworICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxh
dGluMVN0cmluZygiOyAiKSk7Cit9CisKK2Jvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50KQoreworICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29y
a2luZ0NvbnRleHQoZG9jdW1lbnQpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKK30KKworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIC8vIEZJWE1FOiBOb3Qg
eWV0IGltcGxlbWVudGVkCisgICAgcmF3Q29va2llcy5jbGVhcigpOworICAgIHJldHVybiBmYWxz
ZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAorfQorCit2b2lkIGRlbGV0ZUNvb2tp
ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQoreworICAgIC8v
IEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCit9CisKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgU2hhcmVkQ29va2llSmFy
UXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKKyAgICBpZiAoamFyKQorICAg
ICAgICBqYXItPmdldEhvc3RuYW1lc1dpdGhDb29raWVzKGhvc3RuYW1lcyk7Cit9CisKK3ZvaWQg
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAg
U2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKKyAg
ICBpZiAoamFyKQorICAgICAgICBqYXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFt
ZSk7Cit9CisKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygpCit7CisgICAgU2hhcmVkQ29va2llSmFy
UXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKKyAgICBpZiAoamFyKQorICAg
ICAgICBqYXItPmRlbGV0ZUFsbENvb2tpZXMoKTsKK30KKworU2hhcmVkQ29va2llSmFyUXQqIFNo
YXJlZENvb2tpZUphclF0OjpzaGFyZWQoKQoreworICAgIHJldHVybiBzX3NoYXJlZENvb2tpZUph
clF0OworfQorCitTaGFyZWRDb29raWVKYXJRdCogU2hhcmVkQ29va2llSmFyUXQ6OmNyZWF0ZShj
b25zdCBTdHJpbmcmIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpCit7CisgICAgaWYgKCFzX3NoYXJl
ZENvb2tpZUphclF0KQorICAgICAgICBzX3NoYXJlZENvb2tpZUphclF0ID0gbmV3IFNoYXJlZENv
b2tpZUphclF0KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpOworCisgICAgcmV0dXJuIHNfc2hhcmVk
Q29va2llSmFyUXQ7Cit9CisKK3ZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmRlc3Ryb3koKQorewor
ICAgIGRlbGV0ZSBzX3NoYXJlZENvb2tpZUphclF0OworICAgIHNfc2hhcmVkQ29va2llSmFyUXQg
PSAwOworfQorCit2b2lkIFNoYXJlZENvb2tpZUphclF0OjpnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tp
ZT4gY29va2llcyA9IGFsbENvb2tpZXMoKTsKKyAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya0Nv
b2tpZSYgbmV0d29ya0Nvb2tpZSwgY29va2llcykKKyAgICAgICAgaG9zdG5hbWVzLmFkZChuZXR3
b3JrQ29va2llLmRvbWFpbigpKTsKK30KKworYm9vbCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRl
Q29va2llKGNvbnN0IFFOZXR3b3JrQ29va2llJiBjb29raWUpCit7CisgICAgaWYgKCFRTmV0d29y
a0Nvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvb2tpZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5LnByZXBh
cmUoUUxhdGluMVN0cmluZygiREVMRVRFIEZST00gY29va2llcyBXSEVSRSBjb29raWVJZD06Y29v
a2llSWR2YWx1ZSIpKTsKKyAgICBzcWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0cmluZygiOmNv
b2tpZUlkdmFsdWUiKSwgY29va2llLmRvbWFpbigpLmFwcGVuZChRTGF0aW4xU3RyaW5nKGNvb2tp
ZS5uYW1lKCkpKSk7CisgICAgc3FsUXVlcnkuZXhlYygpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lKQoreworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBhbGxD
b29raWVzKCk7CisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJdGVyYXRvciBpdCA9IGNvb2tp
ZXMuYmVnaW4oKTsKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGVuZCA9IGNv
b2tpZXMuZW5kKCk7CisgICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNx
bFF1ZXJ5LnByZXBhcmUoUUxhdGluMVN0cmluZygiREVMRVRFIEZST00gY29va2llcyBXSEVSRSBj
b29raWVJZD06Y29va2llSWR2YWx1ZSIpKTsKKyAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAg
ICAgIGlmIChpdC0+ZG9tYWluKCkgPT0gUVN0cmluZyhob3N0bmFtZSkpIHsKKyAgICAgICAgICAg
IHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29va2llSWR2YWx1ZSIpLCBpdC0+
ZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJpbmcoaXQtPm5hbWUoKSkpKTsKKyAgICAgICAgICAg
IHNxbFF1ZXJ5LmV4ZWMoKTsKKyAgICAgICAgICAgIGl0ID0gY29va2llcy5lcmFzZShpdCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaXQrKzsKKyAgICB9CisgICAgc2V0QWxsQ29va2ll
cyhjb29raWVzKTsKK30KKwordm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQWxsQ29va2ll
cygpCit7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisK
KyAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3FsUXVlcnkucHJlcGFy
ZShRTGF0aW4xU3RyaW5nKCJERUxFVEUgKiBGUk9NIGNvb2tpZXMiKSk7CisgICAgc3FsUXVlcnku
ZXhlYygpOworICAgIHNldEFsbENvb2tpZXMoUUxpc3Q8UU5ldHdvcmtDb29raWU+KCkpOworfQor
CitTaGFyZWRDb29raWVKYXJRdDo6U2hhcmVkQ29va2llSmFyUXQoY29uc3QgU3RyaW5nJiBjb29r
aWVTdG9yYWdlRGlyZWN0b3J5KQoreworICAgIG1fZGF0YWJhc2UgPSBRU3FsRGF0YWJhc2U6OmFk
ZERhdGFiYXNlKFFMYXRpbjFTdHJpbmcoIlFTUUxJVEUiKSk7CisgICAgY29uc3QgUVN0cmluZyBj
b29raWVTdG9yYWdlUGF0aCA9IGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgY29uc3QgUVN0
cmluZyBkYXRhQmFzZU5hbWUgPSBjb29raWVTdG9yYWdlUGF0aCArIFFMYXRpbjFTdHJpbmcoIi9j
b29raWVzLmRiIik7CisgICAgbV9kYXRhYmFzZS5zZXREYXRhYmFzZU5hbWUoZGF0YUJhc2VOYW1l
KTsKKyAgICBlbnN1cmVEYXRhYmFzZVRhYmxlKCk7CisgICAgbG9hZENvb2tpZXMoKTsKK30KKwor
U2hhcmVkQ29va2llSmFyUXQ6On5TaGFyZWRDb29raWVKYXJRdCgpCit7CisgICAgbV9kYXRhYmFz
ZS5jbG9zZSgpOworfQorCitib29sIFNoYXJlZENvb2tpZUphclF0OjpzZXRDb29raWVzRnJvbVVy
bChjb25zdCBRTGlzdDxRTmV0d29ya0Nvb2tpZT4mIGNvb2tpZUxpc3QsIGNvbnN0IFFVcmwmIHVy
bCkKK3sKKyAgICBpZiAoIVFOZXR3b3JrQ29va2llSmFyOjpzZXRDb29raWVzRnJvbVVybChjb29r
aWVMaXN0LCB1cmwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fZGF0YWJh
c2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFFTcWxRdWVyeSBzcWxR
dWVyeShtX2RhdGFiYXNlKTsKKyAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIklO
U0VSVCBPUiBSRVBMQUNFIElOVE8gY29va2llcyAoY29va2llSWQsIGNvb2tpZSkgVkFMVUVTICg6
Y29va2llSWR2YWx1ZSwgOmNvb2tpZXZhbHVlKSIpKTsKKyAgICBRVmFyaWFudExpc3QgY29va2ll
c0lkczsKKyAgICBRVmFyaWFudExpc3QgY29va2llc1ZhbHVlczsKKyAgICBmb3JlYWNoIChjb25z
dCBRTmV0d29ya0Nvb2tpZSAmY29va2llLCBjb29raWVzRm9yVXJsKHVybCkpIHsKKyAgICAgICAg
aWYgKGNvb2tpZS5pc1Nlc3Npb25Db29raWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBjb29raWVzSWRzLmFwcGVuZChjb29raWUuZG9tYWluKCkuYXBwZW5kKFFMYXRpbjFTdHJp
bmcoY29va2llLm5hbWUoKSkpKTsKKyAgICAgICAgY29va2llc1ZhbHVlcy5hcHBlbmQoY29va2ll
LnRvUmF3Rm9ybSgpKTsKKyAgICB9CisgICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRpbjFTdHJp
bmcoIjpjb29raWVJZHZhbHVlIiksIGNvb2tpZXNJZHMpOworICAgIHNxbFF1ZXJ5LmJpbmRWYWx1
ZShRTGF0aW4xU3RyaW5nKCI6Y29va2lldmFsdWUiKSwgY29va2llc1ZhbHVlcyk7CisgICAgc3Fs
UXVlcnkuZXhlY0JhdGNoKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2hhcmVkQ29v
a2llSmFyUXQ6OmVuc3VyZURhdGFiYXNlVGFibGUoKQoreworICAgIGlmICghbV9kYXRhYmFzZS5v
cGVuKCkpIHsKKyAgICAgICAgcVdhcm5pbmcoIkNhbid0IG9wZW4gY29va2llIGRhdGFiYXNlIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9kYXRhYmFzZS5leGVjKFFMYXRpbjFTdHJp
bmcoIlBSQUdNQSBzeW5jaHJvbm91cz1PRkYiKSk7CisKKyAgICBRU3FsUXVlcnkgc3FsUXVlcnko
bV9kYXRhYmFzZSk7CisgICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJDUkVBVEUg
VEFCTEUgSUYgTk9UIEVYSVNUUyBjb29raWVzIChjb29raWVJZCBWQVJDSEFSIFBSSU1BUlkgS0VZ
LCBjb29raWUgQkxPQik7IikpOworICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKK30KKwordm9pZCBTaGFy
ZWRDb29raWVKYXJRdDo6bG9hZENvb2tpZXMoKQoreworICAgIGlmICghbV9kYXRhYmFzZS5pc09w
ZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tp
ZXM7CisgICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5LnBy
ZXBhcmUoUUxhdGluMVN0cmluZygiU0VMRUNUIGNvb2tpZSBGUk9NIGNvb2tpZXMiKSk7CisgICAg
c3FsUXVlcnkuZXhlYygpOworICAgIHdoaWxlIChzcWxRdWVyeS5uZXh0KCkpCisgICAgICAgIGNv
b2tpZXMuYXBwZW5kKFFOZXR3b3JrQ29va2llOjpwYXJzZUNvb2tpZXMoc3FsUXVlcnkudmFsdWUo
MCkudG9CeXRlQXJyYXkoKSkpOworICAgIHNldEFsbENvb2tpZXMoY29va2llcyk7Cit9CisKKyNp
bmNsdWRlICJtb2NfQ29va2llSmFyUXQuY3BwIgorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tp
ZUphclF0LmNwcAkocmV2aXNpb24gMTMzOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9xdC9Db29raWVKYXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCw5
IEBACiAjaW5jbHVkZSAiQ29va2llSmFyUXQuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2lu
Y2x1ZGUgIkNvb2tpZUphci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJh
bWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNs
dWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgi
CiAjaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgogI2luY2x1ZGUgPFFEYXRlVGltZT4K
ICNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CkBAIC00OSwzMCArNDYsMTQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIHNfc2hhcmVkQ29v
a2llSmFyUXQgPSAwOwogCi1zdGF0aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250
ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBGcmFtZUxvYWRlciogbG9hZGVy
ID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpOwotfQotCi12b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29u
dGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAg
UU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkt
PmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29u
dGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29raWVK
YXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIFFV
cmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgUVVybCBmaXJzdFBhcnR5VXJsKGZpcnN0UGFy
dHkpOwogICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMoY29udGV4dCwgdXJs
Rm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtODgsMTUg
KzY5LDE0IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBq
YXItPnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZXMsIHVybEZvckNvb2tpZXMpOwogfQogCi1TdHJp
bmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0
cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0
KQorICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29udGV4dC0+bmV0d29y
a0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCkgOiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVk
KCk7CisgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBRTmV0d29y
a0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2ll
SmFyKCk7CiAKICAgICBRVXJsIHVybEZvckNvb2tpZXModXJsKTsKLSAgICBRVXJsIGZpcnN0UGFy
dHlVcmwoZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIFFVcmwgZmlyc3RQ
YXJ0eVVybChmaXJzdFBhcnR5KTsKICAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJt
aXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAKQEAgLTExNCwxMiArOTQsMTEgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LAogICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxhdGlu
MVN0cmluZygiOyAiKSk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkKK1N0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgS1VSTCAmdXJsKQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29y
a2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKKyAgICBRTmV0d29ya0Nv
b2tpZUphciogamFyID0gY29udGV4dCA/IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkt
PmNvb2tpZUphcigpIDogU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOworICAgIGlmICghamFy
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9
IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwogCiAgICAgUUxp
c3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwoUVVybCh1cmwp
KTsKICAgICBpZiAoY29va2llcy5pc0VtcHR5KCkpCkBAIC0xMzIsNDIgKzExMSw0MyBAQCBTdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIHJlc3VsdENv
b2tpZXMuam9pbihRTGF0aW4xU3RyaW5nKCI7ICIpKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxl
ZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIGNvb2tpZXNFbmFibGVkKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0g
bmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigp
LT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dCA/IGNv
bnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpIDogU2hhcmVkQ29va2ll
SmFyUXQ6OnNoYXJlZCgpOworICAgIHJldHVybiAhIWphcjsKIH0KIAotYm9vbCBnZXRSYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29r
aWVzKQorYm9vbCBnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYs
IFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8g
cmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBkZWxldGVDb29r
aWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBo
b3N0bmFtZXMpCiB7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCAhY29udGV4dCk7IC8vIE5v
dCB5ZXQgaW1wbGVtZW50ZWQgZm9yIGNvb2tpZSBqYXJzIG90aGVyIHRoYW4gdGhlIHNoYXJlZCBv
bmUuCiAgICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFy
ZWQoKTsKICAgICBpZiAoamFyKQogICAgICAgICBqYXItPmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KGhvc3RuYW1lcyk7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0
cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKKyAgICBBU1NFUlRf
VU5VU0VEKGNvbnRleHQsICFjb250ZXh0KTsgLy8gTm90IHlldCBpbXBsZW1lbnRlZCBmb3IgY29v
a2llIGphcnMgb3RoZXIgdGhhbiB0aGUgc2hhcmVkIG9uZS4KICAgICBTaGFyZWRDb29raWVKYXJR
dCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAg
ICAgIGphci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAotdm9pZCBk
ZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsICFjb250ZXh0KTsgLy8g
Tm90IHlldCBpbXBsZW1lbnRlZCBmb3IgY29va2llIGphcnMgb3RoZXIgdGhhbiB0aGUgc2hhcmVk
IG9uZS4KICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNo
YXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+ZGVsZXRlQWxsQ29va2llcygpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFy
UXQuaAkocmV2aXNpb24gMTMzOTI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
b29raWVKYXJRdC5oOjEzMzkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
cXQvQ29va2llSmFyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBDb29raWVKYXJRdF9oCisjZGVmaW5lIENvb2tpZUphclF0X2gK
KworI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgorI2luY2x1ZGUgPFF0TmV0d29yay9RTmV0d29y
a0Nvb2tpZUphcj4KKyNpbmNsdWRlIDxRdFNxbC9RU3FsRGF0YWJhc2U+CisKKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZENvb2tpZUphclF0IDogcHVibGljIFFOZXR3b3Jr
Q29va2llSmFyIHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHN0YXRpYyBTaGFyZWRDb29r
aWVKYXJRdCogc2hhcmVkKCk7CisgICAgc3RhdGljIFNoYXJlZENvb2tpZUphclF0KiBjcmVhdGUo
Y29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBkZXN0cm95KCk7CisKKyAgICB2b2lkIGdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYpOworICAgIGJvb2wgZGVsZXRlQ29va2ll
KGNvbnN0IFFOZXR3b3JrQ29va2llJik7CisgICAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CisgICAgYm9v
bCBzZXRDb29raWVzRnJvbVVybChjb25zdCBRTGlzdDxRTmV0d29ya0Nvb2tpZT4mLCBjb25zdCBR
VXJsJik7CisgICAgdm9pZCBsb2FkQ29va2llcygpOworCitwcml2YXRlOgorICAgIFNoYXJlZENv
b2tpZUphclF0KGNvbnN0IFN0cmluZyYpOworICAgIH5TaGFyZWRDb29raWVKYXJRdCgpOworICAg
IHZvaWQgZW5zdXJlRGF0YWJhc2VUYWJsZSgpOworCisgICAgUVNxbERhdGFiYXNlIG1fZGF0YWJh
c2U7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAkocmV2aXNpb24gMTMzOTQ2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwzMSArMjIsMTggQEAKICNpbmNsdWRlICJDb29raWVK
YXJTb3VwLmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJH
T3duUHRyU291cC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGUuaCIKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTb3Vw
Q29va2llSmFyKiBjb29raWVKYXJGb3JEb2N1bWVudChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQp
CitzdGF0aWMgU291cENvb2tpZUphciogY29va2llSmFyRm9yQ29udGV4dChOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCkKIHsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gMDsK
LSAgICBjb25zdCBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBGcmFtZUxvYWRlciogbG9hZGVyID0g
ZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBjb25zdCBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IGxvYWRlci0+bmV0d29ya2luZ0Nv
bnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwogICAgIHJldHVy
biBTT1VQX0NPT0tJRV9KQVIoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKGNvbnRleHQtPnNvdXBT
ZXNzaW9uKCksIFNPVVBfVFlQRV9DT09LSUVfSkFSKSk7CiB9CiAKQEAgLTg2LDE0ICs3MywxNCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaHR0cE9ubHlDb29raWVFeGlzdHMoCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdv
cmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgU291cENvb2tpZUphciogamFyID0g
Y29va2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIFNvdXBDb29raWVKYXIqIGphciA9
IGNvbnRleHQgPyBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENvb2tpZUphcigp
OwogICAgIGlmICghamFyKQogICAgICAgICByZXR1cm47CiAKICAgICBHT3duUHRyPFNvdXBVUkk+
IG9yaWdpbihzb3VwX3VyaV9uZXcodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBH
T3duUHRyPFNvdXBVUkk+IGZpcnN0UGFydHkoc291cF91cmlfbmV3KGRvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBHT3duUHRyPFNv
dXBVUkk+IGZpcnN0UGFydHlVUkkoc291cF91cmlfbmV3KGZpcnN0UGFydHkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSkpOwogCiAgICAgLy8gR2V0IGV4aXN0aW5nIGNvb2tpZXMgZm9yIHRoaXMgb3Jp
Z2luLgogICAgIEdTTGlzdCogZXhpc3RpbmdDb29raWVzID0gc291cF9jb29raWVfamFyX2dldF9j
b29raWVfbGlzdChqYXIsIG9yaWdpbi5nZXQoKSwgVFJVRSk7CkBAIC0xMTQsMTUgKzEwMSwxNSBA
QCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgICAgIGlmICho
dHRwT25seUNvb2tpZUV4aXN0cyhleGlzdGluZ0Nvb2tpZXMsIHNvdXBfY29va2llX2dldF9uYW1l
KGNvb2tpZS5nZXQoKSksIHNvdXBfY29va2llX2dldF9wYXRoKGNvb2tpZS5nZXQoKSkpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc291cF9jb29raWVfamFyX2FkZF9jb29raWVf
d2l0aF9maXJzdF9wYXJ0eShqYXIsIGZpcnN0UGFydHkuZ2V0KCksIGNvb2tpZS5yZWxlYXNlKCkp
OworICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZV93aXRoX2ZpcnN0X3BhcnR5KGph
ciwgZmlyc3RQYXJ0eVVSSS5nZXQoKSwgY29va2llLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAg
c291cF9jb29raWVzX2ZyZWUoZXhpc3RpbmdDb29raWVzKTsKIH0KIAotc3RhdGljIFN0cmluZyBj
b29raWVzRm9yRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGJvb2wgZm9ySFRUUEhlYWRlcikKK3N0YXRpYyBTdHJpbmcgY29va2llc0ZvckNvbnRleHQo
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBmb3JIVFRQ
SGVhZGVyKQogewotICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvb2tpZUphckZvckRvY3VtZW50
KGRvY3VtZW50KTsKKyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29va2llSmFy
Rm9yQ29udGV4dChjb250ZXh0KSA6IHNvdXBDb29raWVKYXIoKTsKICAgICBpZiAoIWphcikKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCkBAIC0xMzEsMjUgKzExOCwyNSBAQCBzdGF0aWMgU3Ry
aW5nIGNvb2tpZXNGb3JEb2N1bWVudChjb25zdCBECiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoY29va2llcy5nZXQoKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNvb2tpZXNGb3JET00oTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAg
cmV0dXJuIGNvb2tpZXNGb3JEb2N1bWVudChkb2N1bWVudCwgdXJsLCBmYWxzZSk7CisgICAgcmV0
dXJuIGNvb2tpZXNGb3JDb250ZXh0KGNvbnRleHQsIHVybCwgZmFsc2UpOwogfQogCi1TdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICByZXR1cm4g
Y29va2llc0ZvckRvY3VtZW50KGRvY3VtZW50LCB1cmwsIHRydWUpOworICAgIHJldHVybiBjb29r
aWVzRm9yQ29udGV4dChjb250ZXh0LCB1cmwsIHRydWUpOwogfQogCi1ib29sIGNvb2tpZXNFbmFi
bGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgY29va2llc0VuYWJsZWQoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuICEhY29va2llSmFyRm9yRG9jdW1l
bnQoZG9jdW1lbnQpOworICAgIHJldHVybiAhIWNvb2tpZUphckZvckNvbnRleHQoY29udGV4dCk7
CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tp
ZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENv
b2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIFNvdXBD
b29raWVKYXIqIGphciA9IGNvb2tpZUphckZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAgICBTb3Vw
Q29va2llSmFyKiBqYXIgPSBjb250ZXh0ID8gY29va2llSmFyRm9yQ29udGV4dChjb250ZXh0KSA6
IHNvdXBDb29raWVKYXIoKTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0xNzAsOSArMTU3LDkgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBk
b2N1bQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9p
ZCBkZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvb2tp
ZUphckZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb250
ZXh0ID8gY29va2llSmFyRm9yQ29udGV4dChjb250ZXh0KSA6IHNvdXBDb29raWVKYXIoKTsKICAg
ICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xOTEsOSArMTc4LDkgQEAgdm9pZCBk
ZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZQogICAgIH0KIH0KIAotdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIEhhc2hTZXQ8
U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IHNv
dXBDb29raWVKYXIoKTsKKyAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBjb250ZXh0ID8g
Y29va2llSmFyRm9yQ29udGV4dChjb250ZXh0KSA6IHNvdXBDb29raWVKYXIoKTsKICAgICBHT3du
UHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFy
KSk7CiAgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzLmdldCgpOyBpdGVtOyBpdGVtID0g
Z19zbGlzdF9uZXh0KGl0ZW0pKSB7CiAgICAgICAgIEdPd25QdHI8U291cENvb2tpZT4gY29va2ll
KHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKSk7CkBAIC0yMDMsMTAgKzE5MCwx
MCBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgfQogfQog
Ci12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQor
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgQ1N0cmluZyBob3N0TmFtZVN0cmluZyA9
IGhvc3RuYW1lLnV0ZjgoKTsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBzb3VwQ29v
a2llSmFyKCk7CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gY29udGV4dCA/IGNvb2tp
ZUphckZvckNvbnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgR093blB0cjxH
U0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOwog
ICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xp
c3RfbmV4dChpdGVtKSkgewogICAgICAgICBTb3VwQ29va2llKiBjb29raWUgPSBzdGF0aWNfY2Fz
dDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7CkBAIC0yMTYsOSArMjAzLDkgQEAgdm9pZCBkZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaQogICAgIH0KIH0KIAotdm9pZCBkZWxldGVB
bGxDb29raWVzKCkKK3ZvaWQgZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCkKIHsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBzb3VwQ29va2llSmFyKCk7
CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gY29udGV4dCA/IGNvb2tpZUphckZvckNv
bnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgR093blB0cjxHU0xpc3Q+IGNv
b2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOwogICAgIGZvciAo
R1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChp
dGVtKSkgewogICAgICAgICBTb3VwQ29va2llKiBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29v
a2llKj4oaXRlbS0+ZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ29va2llSmFyU291cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmgJKHJldmlzaW9uIDEzMzk0NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpZm5kZWYgQ29va2llSmFyU291cF9oCiAjZGVm
aW5lIENvb2tpZUphclNvdXBfaAogCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSA8
bGlic291cC9zb3VwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAkocmV2
aXNpb24gMTMzOTQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29v
a2llSmFyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDEwIEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQ29va2llSmFyLmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJLVVJM
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgog
I2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxXaW5pbmV0Lmg+CkBAIC0zNiwxNiArMzUs
MTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQq
IC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9p
ZCBzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgLy8gRklYTUU6IERlYWwg
d2l0aCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS4KKyAgICAvLyBGSVhNRTogRGVh
bCB3aXRoIGZpcnN0UGFydHkgYXJndW1lbnQuCiAgICAgU3RyaW5nIHN0ciA9IHVybC5zdHJpbmco
KTsKICAgICBTdHJpbmcgdmFsID0gdmFsdWU7CiAgICAgSW50ZXJuZXRTZXRDb29raWUoc3RyLmNo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIHZhbC5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9j
dW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNvb2tpZXNGb3JET00oTmV0d29ya2lu
Z0NvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgdXJsKQogeworICAgIC8vIEZJWE1F
OiBEZWFsIHdpdGggZmlyc3RQYXJ0eSBhcmd1bWVudC4KKwogICAgIFN0cmluZyBzdHIgPSB1cmwu
c3RyaW5nKCk7CiAKICAgICBEV09SRCBjb3VudCA9IDA7CkBAIC02Myw0MCArNjQsNDAgQEAgU3Ry
aW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgogICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KGJ1ZmZlcik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwm
IHVybCkKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWUKLSAgICByZXR1
cm4gY29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICByZXR1cm4gY29va2llc0ZvckRPTShjb250
ZXh0LCB1cmwpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRv
Y3VtZW50Ki8pCitib29sIGNvb2tpZXNFbmFibGVkKE5ldHdvcmtpbmdDb250ZXh0KikKIHsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRSYXdDb29r
aWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdD
b29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAgcmF3Q29v
a2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBs
ZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBkZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5n
Q29udGV4dCosIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIC8vIEZJWE1FOiBO
b3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQg
ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCopCiB7CiAgICAgLy8gRklYTUU6IE5v
dCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nv
b2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
b29raWVKYXJRdC5jcHAJKHJldmlzaW9uIDEzMzk0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzMjAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphclF0LmgiCi0KLSNpbmNsdWRlICJDb29r
aWUuaCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJLVVJM
LmgiCi0jaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJUaGlyZFBhcnR5
Q29va2llc1F0LmgiCi0jaW5jbHVkZSA8UURhdGVUaW1lPgotI2luY2x1ZGUgPFFOZXR3b3JrQWNj
ZXNzTWFuYWdlcj4KLSNpbmNsdWRlIDxRTmV0d29ya0Nvb2tpZT4KLSNpbmNsdWRlIDxRU3FsUXVl
cnk+Ci0jaW5jbHVkZSA8UVN0cmluZ0xpc3Q+Ci0jaW5jbHVkZSA8UVZhcmlhbnQ+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IFNoYXJlZENvb2tpZUphclF0KiBzX3NoYXJlZENvb2tpZUphclF0ID0gMDsKLQotc3RhdGljIE5l
dHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQpCi17Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICBp
ZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGxvYWRlci0+bmV0d29y
a2luZ0NvbnRleHQoKTsKLX0KLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICgh
Y29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBj
b250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKLSAgICBpZiAoIWph
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVVybCB1cmxGb3JDb29raWVzKHVybCk7Ci0gICAg
UVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAg
ICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tp
ZXMsIGZpcnN0UGFydHlVcmwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRTGlzdDxRTmV0d29y
a0Nvb2tpZT4gY29va2llcyA9IFFOZXR3b3JrQ29va2llOjpwYXJzZUNvb2tpZXMoUVN0cmluZyh2
YWx1ZSkudG9MYXRpbjEoKSk7Ci0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJdGVyYXRvciBp
dCA9IGNvb2tpZXMuYmVnaW4oKTsKLSAgICB3aGlsZSAoaXQgIT0gY29va2llcy5lbmQoKSkgewot
ICAgICAgICBpZiAoaXQtPmlzSHR0cE9ubHkoKSkKLSAgICAgICAgICAgIGl0ID0gY29va2llcy5l
cmFzZShpdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICsraXQ7Ci0gICAgfQotCi0gICAg
amFyLT5zZXRDb29raWVzRnJvbVVybChjb29raWVzLCB1cmxGb3JDb29raWVzKTsKLX0KLQotU3Ry
aW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCi17
Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1
bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
UU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkt
PmNvb2tpZUphcigpOwotCi0gICAgUVVybCB1cmxGb3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBm
aXJzdFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICBpZiAo
IXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZp
cnN0UGFydHlVcmwpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBRTGlzdDxRTmV0
d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVybCh1cmxGb3JDb29raWVzKTsK
LSAgICBpZiAoY29va2llcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgIFFTdHJpbmdMaXN0IHJlc3VsdENvb2tpZXM7Ci0gICAgZm9yZWFjaCAoY29uc3QgUU5ldHdv
cmtDb29raWUmIG5ldHdvcmtDb29raWUsIGNvb2tpZXMpIHsKLSAgICAgICAgaWYgKG5ldHdvcmtD
b29raWUuaXNIdHRwT25seSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJlc3Vs
dENvb2tpZXMuYXBwZW5kKFFTdHJpbmc6OmZyb21MYXRpbjEobmV0d29ya0Nvb2tpZS50b1Jhd0Zv
cm0oUU5ldHdvcmtDb29raWU6Ok5hbWVBbmRWYWx1ZU9ubHkpLmNvbnN0RGF0YSgpKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3RyaW5nKCI7ICIpKTsK
LX0KLQotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQotewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBj
b250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKLQotICAgIFFMaXN0
PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKFFVcmwodXJsKSk7
Ci0gICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICBRU3RyaW5nTGlzdCByZXN1bHRDb29raWVzOwotICAgIGZvcmVhY2ggKFFOZXR3b3JrQ29v
a2llIG5ldHdvcmtDb29raWUsIGNvb2tpZXMpCi0gICAgICAgIHJlc3VsdENvb2tpZXMuYXBwZW5k
KFFTdHJpbmc6OmZyb21MYXRpbjEobmV0d29ya0Nvb2tpZS50b1Jhd0Zvcm0oUU5ldHdvcmtDb29r
aWU6Ok5hbWVBbmRWYWx1ZU9ubHkpLmNvbnN0RGF0YSgpKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwotfQotCi1ib29sIGNvb2tpZXNFbmFi
bGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY29udGV4dC0+bmV0d29ya0FjY2Vz
c01hbmFnZXIoKS0+Y29va2llSmFyKCk7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKLXsKLSAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsK
LSAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKLX0KLQot
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJikKLXsKLSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAotfQotCi12b2lkIGdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAg
IFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7Ci0g
ICAgaWYgKGphcikKLSAgICAgICAgamFyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFt
ZXMpOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKQotewotICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJR
dDo6c2hhcmVkKCk7Ci0gICAgaWYgKGphcikKLSAgICAgICAgamFyLT5kZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoaG9zdG5hbWUpOwotfQotCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQotewotICAg
IFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7Ci0g
ICAgaWYgKGphcikKLSAgICAgICAgamFyLT5kZWxldGVBbGxDb29raWVzKCk7Ci19Ci0KLVNoYXJl
ZENvb2tpZUphclF0KiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCkKLXsKLSAgICByZXR1cm4g
c19zaGFyZWRDb29raWVKYXJRdDsKLX0KLQotU2hhcmVkQ29va2llSmFyUXQqIFNoYXJlZENvb2tp
ZUphclF0OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBjb29raWVTdG9yYWdlRGlyZWN0b3J5KQotewot
ICAgIGlmICghc19zaGFyZWRDb29raWVKYXJRdCkKLSAgICAgICAgc19zaGFyZWRDb29raWVKYXJR
dCA9IG5ldyBTaGFyZWRDb29raWVKYXJRdChjb29raWVTdG9yYWdlRGlyZWN0b3J5KTsKLQotICAg
IHJldHVybiBzX3NoYXJlZENvb2tpZUphclF0OwotfQotCi12b2lkIFNoYXJlZENvb2tpZUphclF0
OjpkZXN0cm95KCkKLXsKLSAgICBkZWxldGUgc19zaGFyZWRDb29raWVKYXJRdDsKLSAgICBzX3No
YXJlZENvb2tpZUphclF0ID0gMDsKLX0KLQotdm9pZCBTaGFyZWRDb29raWVKYXJRdDo6Z2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCi17Ci0gICAgUUxp
c3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBhbGxDb29raWVzKCk7Ci0gICAgZm9yZWFjaCAo
Y29uc3QgUU5ldHdvcmtDb29raWUmIG5ldHdvcmtDb29raWUsIGNvb2tpZXMpCi0gICAgICAgIGhv
c3RuYW1lcy5hZGQobmV0d29ya0Nvb2tpZS5kb21haW4oKSk7Ci19Ci0KLWJvb2wgU2hhcmVkQ29v
a2llSmFyUXQ6OmRlbGV0ZUNvb2tpZShjb25zdCBRTmV0d29ya0Nvb2tpZSYgY29va2llKQotewot
ICAgIGlmICghUU5ldHdvcmtDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb29raWUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKLSAg
ICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIkRFTEVURSBGUk9NIGNvb2tpZXMgV0hF
UkUgY29va2llSWQ9OmNvb2tpZUlkdmFsdWUiKSk7Ci0gICAgc3FsUXVlcnkuYmluZFZhbHVlKFFM
YXRpbjFTdHJpbmcoIjpjb29raWVJZHZhbHVlIiksIGNvb2tpZS5kb21haW4oKS5hcHBlbmQoUUxh
dGluMVN0cmluZyhjb29raWUubmFtZSgpKSkpOwotICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFNoYXJlZENvb2tpZUphclF0OjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKLXsKLSAgICBpZiAoIW1fZGF0YWJh
c2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFMaXN0PFFOZXR3b3JrQ29va2ll
PiBjb29raWVzID0gYWxsQ29va2llcygpOwotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRl
cmF0b3IgaXQgPSBjb29raWVzLmJlZ2luKCk7Ci0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJ
dGVyYXRvciBlbmQgPSBjb29raWVzLmVuZCgpOwotICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2Rh
dGFiYXNlKTsKLSAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIkRFTEVURSBGUk9N
IGNvb2tpZXMgV0hFUkUgY29va2llSWQ9OmNvb2tpZUlkdmFsdWUiKSk7Ci0gICAgd2hpbGUgKGl0
ICE9IGVuZCkgewotICAgICAgICBpZiAoaXQtPmRvbWFpbigpID09IFFTdHJpbmcoaG9zdG5hbWUp
KSB7Ci0gICAgICAgICAgICBzcWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0cmluZygiOmNvb2tp
ZUlkdmFsdWUiKSwgaXQtPmRvbWFpbigpLmFwcGVuZChRTGF0aW4xU3RyaW5nKGl0LT5uYW1lKCkp
KSk7Ci0gICAgICAgICAgICBzcWxRdWVyeS5leGVjKCk7Ci0gICAgICAgICAgICBpdCA9IGNvb2tp
ZXMuZXJhc2UoaXQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0Kys7Ci0gICAgfQot
ICAgIHNldEFsbENvb2tpZXMoY29va2llcyk7Ci19Ci0KLXZvaWQgU2hhcmVkQ29va2llSmFyUXQ6
OmRlbGV0ZUFsbENvb2tpZXMoKQotewotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOwotICAg
IHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGluMVN0cmluZygiREVMRVRFICogRlJPTSBjb29raWVzIikp
OwotICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKLSAgICBzZXRBbGxDb29raWVzKFFMaXN0PFFOZXR3b3Jr
Q29va2llPigpKTsKLX0KLQotU2hhcmVkQ29va2llSmFyUXQ6OlNoYXJlZENvb2tpZUphclF0KGNv
bnN0IFN0cmluZyYgY29va2llU3RvcmFnZURpcmVjdG9yeSkKLXsKLSAgICBtX2RhdGFiYXNlID0g
UVNxbERhdGFiYXNlOjphZGREYXRhYmFzZShRTGF0aW4xU3RyaW5nKCJRU1FMSVRFIikpOwotICAg
IGNvbnN0IFFTdHJpbmcgY29va2llU3RvcmFnZVBhdGggPSBjb29raWVTdG9yYWdlRGlyZWN0b3J5
OwotICAgIGNvbnN0IFFTdHJpbmcgZGF0YUJhc2VOYW1lID0gY29va2llU3RvcmFnZVBhdGggKyBR
TGF0aW4xU3RyaW5nKCIvY29va2llcy5kYiIpOwotICAgIG1fZGF0YWJhc2Uuc2V0RGF0YWJhc2VO
YW1lKGRhdGFCYXNlTmFtZSk7Ci0gICAgZW5zdXJlRGF0YWJhc2VUYWJsZSgpOwotICAgIGxvYWRD
b29raWVzKCk7Ci19Ci0KLVNoYXJlZENvb2tpZUphclF0Ojp+U2hhcmVkQ29va2llSmFyUXQoKQot
ewotICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLX0KLQotYm9vbCBTaGFyZWRDb29raWVKYXJRdDo6
c2V0Q29va2llc0Zyb21VcmwoY29uc3QgUUxpc3Q8UU5ldHdvcmtDb29raWU+JiBjb29raWVMaXN0
LCBjb25zdCBRVXJsJiB1cmwpCi17Ci0gICAgaWYgKCFRTmV0d29ya0Nvb2tpZUphcjo6c2V0Q29v
a2llc0Zyb21VcmwoY29va2llTGlzdCwgdXJsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnkucHJlcGFyZShR
TGF0aW4xU3RyaW5nKCJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIGNvb2tpZXMgKGNvb2tpZUlkLCBj
b29raWUpIFZBTFVFUyAoOmNvb2tpZUlkdmFsdWUsIDpjb29raWV2YWx1ZSkiKSk7Ci0gICAgUVZh
cmlhbnRMaXN0IGNvb2tpZXNJZHM7Ci0gICAgUVZhcmlhbnRMaXN0IGNvb2tpZXNWYWx1ZXM7Ci0g
ICAgZm9yZWFjaCAoY29uc3QgUU5ldHdvcmtDb29raWUgJmNvb2tpZSwgY29va2llc0ZvclVybCh1
cmwpKSB7Ci0gICAgICAgIGlmIChjb29raWUuaXNTZXNzaW9uQ29va2llKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgY29va2llc0lkcy5hcHBlbmQoY29va2llLmRvbWFpbigpLmFw
cGVuZChRTGF0aW4xU3RyaW5nKGNvb2tpZS5uYW1lKCkpKSk7Ci0gICAgICAgIGNvb2tpZXNWYWx1
ZXMuYXBwZW5kKGNvb2tpZS50b1Jhd0Zvcm0oKSk7Ci0gICAgfQotICAgIHNxbFF1ZXJ5LmJpbmRW
YWx1ZShRTGF0aW4xU3RyaW5nKCI6Y29va2llSWR2YWx1ZSIpLCBjb29raWVzSWRzKTsKLSAgICBz
cWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0cmluZygiOmNvb2tpZXZhbHVlIiksIGNvb2tpZXNW
YWx1ZXMpOwotICAgIHNxbFF1ZXJ5LmV4ZWNCYXRjaCgpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFNoYXJlZENvb2tpZUphclF0OjplbnN1cmVEYXRhYmFzZVRhYmxlKCkKLXsKLSAgICBp
ZiAoIW1fZGF0YWJhc2Uub3BlbigpKSB7Ci0gICAgICAgIHFXYXJuaW5nKCJDYW4ndCBvcGVuIGNv
b2tpZSBkYXRhYmFzZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fZGF0YWJhc2Uu
ZXhlYyhRTGF0aW4xU3RyaW5nKCJQUkFHTUEgc3luY2hyb25vdXM9T0ZGIikpOwotCi0gICAgUVNx
bFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOwotICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGlu
MVN0cmluZygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY29va2llcyAoY29va2llSWQgVkFS
Q0hBUiBQUklNQVJZIEtFWSwgY29va2llIEJMT0IpOyIpKTsKLSAgICBzcWxRdWVyeS5leGVjKCk7
Ci19Ci0KLXZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmxvYWRDb29raWVzKCkKLXsKLSAgICBpZiAo
IW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFMaXN0PFFOZXR3
b3JrQ29va2llPiBjb29raWVzOwotICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsK
LSAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIlNFTEVDVCBjb29raWUgRlJPTSBj
b29raWVzIikpOwotICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKLSAgICB3aGlsZSAoc3FsUXVlcnkubmV4
dCgpKQotICAgICAgICBjb29raWVzLmFwcGVuZChRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVz
KHNxbFF1ZXJ5LnZhbHVlKDApLnRvQnl0ZUFycmF5KCkpKTsKLSAgICBzZXRBbGxDb29raWVzKGNv
b2tpZXMpOwotfQotCi0jaW5jbHVkZSAibW9jX0Nvb2tpZUphclF0LmNwcCIKLQotfQotCi0vLyB2
aW06IHRzPTQgc3c9NCBldApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2ll
SmFyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVK
YXJRdC5oCShyZXZpc2lvbiAxMzM5NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
b29raWVKYXJRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoK
LSAqLwotCi0jaWZuZGVmIENvb2tpZUphclF0X2gKLSNkZWZpbmUgQ29va2llSmFyUXRfaAotCi0j
aW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+Ci0jaW5jbHVkZSA8UXROZXR3b3JrL1FOZXR3b3JrQ29v
a2llSmFyPgotI2luY2x1ZGUgPFF0U3FsL1FTcWxEYXRhYmFzZT4KLQotI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgU2hhcmVkQ29va2llSmFyUXQgOiBwdWJsaWMgUU5ldHdvcmtDb29r
aWVKYXIgewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgc3RhdGljIFNoYXJlZENvb2tpZUph
clF0KiBzaGFyZWQoKTsKLSAgICBzdGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIGNyZWF0ZShjb25z
dCBTdHJpbmcmKTsKLSAgICB2b2lkIGRlc3Ryb3koKTsKLQotICAgIHZvaWQgZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+Jik7Ci0gICAgYm9vbCBkZWxldGVDb29raWUoY29u
c3QgUU5ldHdvcmtDb29raWUmKTsKLSAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShj
b25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKLSAgICBib29sIHNl
dENvb2tpZXNGcm9tVXJsKGNvbnN0IFFMaXN0PFFOZXR3b3JrQ29va2llPiYsIGNvbnN0IFFVcmwm
KTsKLSAgICB2b2lkIGxvYWRDb29raWVzKCk7Ci0KLXByaXZhdGU6Ci0gICAgU2hhcmVkQ29va2ll
SmFyUXQoY29uc3QgU3RyaW5nJik7Ci0gICAgflNoYXJlZENvb2tpZUphclF0KCk7Ci0gICAgdm9p
ZCBlbnN1cmVEYXRhYmFzZVRhYmxlKCk7Ci0KLSAgICBRU3FsRGF0YWJhc2UgbV9kYXRhYmFzZTsK
LX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzM5NDYpCisrKyBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAor
MjAxMi0xMS0wOCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAg
ICBDb29raWVKYXIgdXNlcyBEb2N1bWVudCBjbGFzcywgd2hpY2ggaXMgYSBsYXllcmluZyB2aW9s
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MTYyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOiBEb24ndCBpbmNsdWRlIENvb2tpZUphci5oLCBp
dHMgY29tcGxldGVseSB1bm5lY2Vzc2FyeS4KKwogMjAxMi0xMS0wOCAgVGltIEhvcnRvbiAgPHRp
bW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBQcmludCBwcmV2aWV3IHNo
b3VsZCB2ZW5kIGltYWdlcyB0byB0aGUgVUlQcm9jZXNzIGluc3RlYWQgb2YgUERGcwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkocmV2aXNpb24gMTMz
OTQ2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiV0tQcm90ZWN0aW9uU3BhY2VU
eXBlcy5oIgogI2luY2x1ZGUgIldLUmVzb3VyY2VDYWNoZU1hbmFnZXIuaCIKICNpbmNsdWRlICJX
S1NoYXJlZEFQSUNhc3QuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZUphci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ3JlZGVudGlhbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJU
eXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvdGVjdGlvblNwYWNlLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173143</attachid>
            <date>2012-11-08 16:22:37 -0800</date>
            <delta_ts>2012-11-09 11:28:00 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>CookieJar.txt</filename>
            <type>text/plain</type>
            <size>129927</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzk3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxMi0xMS0wOCAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBDb29raWVKYXIgdXNlcyBE
b2N1bWVudCBjbGFzcywgd2hpY2ggaXMgYSBsYXllcmluZyB2aW9sYXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTYyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IENvb2tpZUphciBpbiB0
d28gcGFydHMsIG9uZSB0aGF0IHRha2VzIGEgRG9jdW1lbnQsIGFuZCBhbm90aGVyIHRoYXQgaXMg
YSBwdXJlCisgICAgICAgIHBsYXRmb3JtIG9uZSwgdXNpbmcgTmV0d29ya2luZ0NvbnRleHQgdG8g
YWNjZXNzIHRoZSBjb3JyZWN0IHBsYXRmb3JtIHN0b3JhZ2UuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgIFVwZGF0ZWQuCisKKyAgICAgICAgKiBsb2FkZXIvQ29va2llSmFyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpuZXR3b3JraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpj
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIGxvYWRl
ci9Db29raWVKYXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2ll
SmFyLmguCisgICAgICAgIFRoaXMgaXMgYW4gYWRhcHRvciBmb3IgcHVyZSBwbGF0Zm9ybSBpbXBs
ZW1lbnRhdGlvbnMuIENsaWVudHMgY29udGludWUgdG8gdXNlIHRoZQorICAgICAgICBvbGQgaW50
ZXJmYWNlIHVuY2hhbmdlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvQ29va2ll
SmFyQmxhY2tCZXJyeS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL2JsYWNrYmVycnkv
Q29va2llSmFyQmxhY2tCZXJyeS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1
bS5jcHAuCisgICAgICAgIFRoZXNlIHBsYXRmb3JtcyBkbyBub3QgaGF2ZSBhIHB1cmUgcGxhdGZv
cm0gaW1wbGVtZW50YXRpb24geWV0LCBzbyB0aGV5IGp1c3Qga2VlcAorICAgICAgICB0byB1c2Ug
b3JpZ2luYWwgaW1wbGVtZW50YXRpb25zLiBTaW5jZSB0aGUgY29kZSBpcyBub3QgaW4gcGxhdGZv
cm0vIGFueSBtb3JlLCB0aGUKKyAgICAgICAgdmlvbGF0aW9uIGlzIHJlc29sdmVkIGZvciBDaHJv
bWl1bSBhbmQgQmxhY2tiZXJyeSwgdG9vLgorCisgICAgICAgICogcGxhdGZvcm0vQ29va2llSmFy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUph
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaC4KKyAg
ICAgICAgVGhlIHBsYXRmb3JtIGludGVyZmFjZSBpcyBub3cgbW9yZSB1bmlmb3JtIC0gYWxsIGZ1
bmN0aW9ucyB0YWtlIGEgTmV0d29ya2luZ0NvbnRleHQKKyAgICAgICAgaW5zdGVhZCBvZiBoYXJk
Y29kaW5nIHdoaWNoIGNvb2tpZSBzdG9yYWdlIHRvIHVzZSBpbiBzb21lIGNhc2VzLgorICAgICAg
ICBSZW5hbWVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBvbmx5IHVzZWZ1bCBmb3IgZG9jdW1lbnQuY29v
a2llIGltcGxlbWVudGF0aW9uIHRvIGxvb2sKKyAgICAgICAgbGVzcyBnZW5lcmljLgorCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0uCisgICAgICAgIChXZWJDb3JlOjpjb29raWVz
Rm9yRE9NKTogVGhpcyBub3cgdGFrZXMgYSBjb250ZXh0IGluc3RlYWQgb2YgRG9jdW1lbnQsIGFu
ZCBhbHNvCisgICAgICAgIHRha2VzIGEgZmlyc3RQYXJ0eSBVUkwgKHVudXNlZCBvbiBNYWMsIGJ1
dCB1c2VkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zKS4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKTogR2V0IGNvb2tpZSBzdG9yYWdlIGZyb20gY29udGV4
dCAoYW5kCisgICAgICAgIHVzZSBzaGFyZWQgb25lIGlmIGNvbnRleHQgaXMgbnVsbCkuCisgICAg
ICAgIChXZWJDb3JlOjpzZXRDb29raWVzRnJvbURPTSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llc0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmdldFJhd0Nvb2tp
ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUNvb2tpZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOiBEaXR0by4gVGhpcyB1c2Vk
IHRvIG9ubHkgc3VwcG9ydCBkZWZhdWx0IHN0b3JhZ2UsCisgICAgICAgIGJ1dCBpdHMgY2xlYW5l
ciB0byBoYXZlIGEgdW5pZm9ybSBpbnRlcmZhY2UuCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbENv
b2tpZXMpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFy
Q0ZOZXQuY3BwOgorICAgICAgICBTYW1lIGNoYW5nZXMgYXMgb24gTWFjLgorCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwOgorICAgICAgICBVcGRhdGVk
IGZvciBuZXcgaW50ZXJmYWNlLiBJbXBsZW1lbnRhdGlvbiBpcyBsYXJnZWx5IGEgZHVtbXkgb25l
LgorCisgICAgICAgICogcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tpZUphclF0Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmguCisgICAgICAgIE1vdmVkIHRvIGEg
Y29tbW9uIGxvY2F0aW9uLCBtb3N0IGNvb2tpZSBmaWxlcyB3ZXJlIGluIG5ldHdvcmsvIGFscmVh
ZHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKTogVXNlIGNvbnRleHQncyBvciBzaGFyZWQgY29va2Ug
amFyIGFzIGFwcHJvcHJpYXRlLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0ZvckRPTSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpnZXRSYXdDb29raWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpkZWxl
dGVDb29raWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKTogQmFjay1lbmQgaW1wbGVtZW50YXRpb24gY2FuIG9ubHkgaGFuZGxlIHNoYXJlZAorICAg
ICAgICBqYXIgaGVyZSwgYXNzZXJ0IHRoYXQgYXJndW1lbnQgZG9lcyBub3QgcmVxdWVzdCBhbm90
aGVyIG9uZS4KKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcyk6IERpdHRvLgorCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29va2llSmFyRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDb29r
aWVzRnJvbURPTSk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9yQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgVXBkYXRlZCBmb3IgbmV3IGZ1
bmN0aW9uIHNpZ25hdHVyZXMsIGFuZCB1c2UgdGhlIHNhbWUgY3Jvc3MtcGxhdGZvcm0gbG9naWMg
Zm9yCisgICAgICAgIGNob29zaW5nIGEgY29va2llIGphci4KKworICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmg6IERvbid0IGluY2x1ZGUgdW5uZWNlc3Nhcnkg
Q29vaWVKYXIuaC4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4vQ29v
a2llSmFyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JET00pOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3Jl
OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICBVcGRhdGVkIGZvciBuZXcg
ZnVuY3Rpb24gc2lnbmF0dXJlcy4KKwogMjAxMi0xMS0wOCAgQWxwaGEgTGFtICA8aGNsYW1AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRGVmZXJyZWQgaW1hZ2UgZGVjb2Rpbmcg
ZmFpbHMgd2l0aCBpbWFnZSBvcmllbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDEzMzk3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xNjIyLDYgKzE2MjIsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaW5z
cGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKIAogICAgIGxvYWRlci9DYWNoZWRNZXRhZGF0
YS5jcHAKKyAgICBsb2FkZXIvQ29va2llSmFyLmNwcAogICAgIGxvYWRlci9Dcm9zc09yaWdpbkFj
Y2Vzc0NvbnRyb2wuY3BwCiAgICAgbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2Fj
aGUuY3BwCiAgICAgbG9hZGVyL0RvY3VtZW50TG9hZFRpbWluZy5jcHAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMzOTcyKQorKysgU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzg1Nyw2ICszODU3LDggQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVQ
b2xpY3kuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmggXAorCVNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Db29raWVKYXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFy
LmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmggXAog
CVNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNw
cCBcCkBAIC00MjQ3LDcgKzQyNDksNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db29raWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llc1N0cmF0ZWd5
LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1
cnNvci5jcHAgXApAQCAtNDcxNSw2ICs0NzE2LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Byb3h5U2VydmVyLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmggXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2VIYXNoLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2UuaCBcCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCShyZXZpc2lvbiAxMzM5NzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UJKHdvcmtpbmcgY29weSkK
QEAgLTE0MSw2ICsxNDEsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJ
RVMKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRpbmcvYmxhY2tiZXJyeS9F
ZGl0b3JCbGFja0JlcnJ5LmNwcAogICAgIGVkaXRpbmcvYmxhY2tiZXJyeS9TbWFydFJlcGxhY2VC
bGFja0JlcnJ5LmNwcAorICAgIGxvYWRlci9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnku
Y3BwCiAgICAgcGFnZS9ibGFja2JlcnJ5L0FjY2Vzc2liaWxpdHlPYmplY3RCbGFja0JlcnJ5LmNw
cAogICAgIHBhZ2UvYmxhY2tiZXJyeS9EcmFnQ29udHJvbGxlckJsYWNrQmVycnkuY3BwCiAgICAg
cGFnZS9ibGFja2JlcnJ5L0V2ZW50SGFuZGxlckJsYWNrQmVycnkuY3BwCkBAIC0xNDgsNyArMTQ5
LDYgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vYmxhY2tiZXJy
eS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvQ29udGV4
dE1lbnVCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvQ29udGV4dE1lbnVJ
dGVtQmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNr
QmVycnkuY3BwCiAgICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9DdXJzb3JCbGFja0JlcnJ5LmNwcAog
ICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0RhdGFCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRm
b3JtL2JsYWNrYmVycnkvRHJhZ0ltYWdlQmxhY2tCZXJyeS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQko
cmV2aXNpb24gMTMzOTcyKQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudC5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVu
dC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAgXAorICAgIGxv
YWRlci9Db29raWVKYXIuY3BwIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
LmNwcCBcCiAgICAgbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwIFwK
ICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwIFwKQEAgLTE5NDksNiAr
MTk1MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVu
dC5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oIFwKICAgICBsb2Fk
ZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaCBcCisgICAgbG9hZGVyL0Nvb2tpZUphci5oIFwKICAgICBs
b2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmggXAogICAgIGxvYWRlci9Dcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlLmggXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5oIFwKQEAgLTIyMzgsNiArMjI0MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRm
b3JtL25ldHdvcmsvTUlNRVNuaWZmaW5nLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29y
a2luZ0NvbnRleHQuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmll
ci5oIFwKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2llSmFyLmggXAogICAgIHBs
YXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
UHJveHlTZXJ2ZXIuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9RdE1JTUVUeXBlU25pZmZl
ci5oIFwKQEAgLTIyNTAsNiArMjI1Myw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVzcG9uc2VCYXNlLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvTmV0d29ya1N0YXRl
Tm90aWZpZXJQcml2YXRlLmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQu
aCBcCiAgICAgcGxhdGZvcm0vUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBcCiAgICAgcGxhdGZvcm0v
UGxhdGZvcm1NZW1vcnlJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgcGxhdGZvcm0vUGxhdGZvcm1U
b3VjaEV2ZW50LmggXApAQCAtMjI1Nyw3ICsyMjYxLDYgQEAgSEVBREVSUyArPSBcCiAgICAgcGxh
dGZvcm0vUG9wdXBNZW51LmggXAogICAgIHBsYXRmb3JtL1JlZmVycmVyUG9saWN5LmggXAogICAg
IHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggXAotICAgIHBsYXRmb3JtL3F0L0Nvb2tpZUphclF0
LmggXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmggXAogICAgIHBsYXRmb3JtL3F0
L1FTdHlsZUZhY2FkZS5oIFwKICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIFwK
QEAgLTI4MDQsNiArMjgwNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0RO
U1Jlc29sdmVRdWV1ZS5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvTUlNRVNuaWZmaW5nLmNw
cCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJRdC5jcHAgXAogICAgIHBsYXRm
b3JtL25ldHdvcmsvcXQvQ3JlZGVudGlhbFN0b3JhZ2VRdC5jcHAgXAogICAgIHBsYXRmb3JtL25l
dHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQv
UmVzb3VyY2VSZXF1ZXN0UXQuY3BwIFwKQEAgLTI4MTcsNyArMjgyMSw2IEBAIFNPVVJDRVMgKz0g
XAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvQ29u
dGV4dE1lbnVJdGVtUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcCBc
Ci0gICAgcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9DdXJz
b3JRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3BwIFwKICAgICBwbGF0Zm9y
bS9xdC9EcmFnSW1hZ2VRdC5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTMz
OTcyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTksNiArMTU5LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgnLAorICAgICAgICAgICAgJ2xvYWRl
ci9Db29raWVKYXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGUuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0RvY3VtZW50TG9hZFRpbWluZy5o
JywKICAgICAgICAgICAgICdsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaCcsCkBAIC0yNzMsNyArMjc0
LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29v
a2llLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL0Nvb2tpZUphci5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ3Vy
c29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmgnLApAQCAtMzEy
LDYgKzMxMiw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50Lmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9Q
bGF0Zm9ybUNvb2tpZUphci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybVdoZWVs
RXZlbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oJywKQEAgLTI5NTUsNiArMjk1Niw3IEBACiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5oJywKICAgICAgICAgICAg
ICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVk
TWV0YWRhdGEuaCcsCisgICAgICAgICAgICAnbG9hZGVyL0Nvb2tpZUphci5jcHAnLAogICAgICAg
ICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwJywKICAgICAgICAgICAg
ICdsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgnLAogICAgICAgICAgICAgJ2xvYWRl
ci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCcsCkBAIC0zMDYyLDYgKzMwNjQs
NyBAQAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAnLAogICAgICAg
ICAgICAgJ2xvYWRlci9jZi9SZXNvdXJjZUxvYWRlckNGTmV0LmNwcCcsCiAgICAgICAgICAgICAn
bG9hZGVyL2Nocm9taXVtL0NhY2hlZFJhd1Jlc291cmNlQ2hyb21pdW0uY3BwJywKKyAgICAgICAg
ICAgICdsb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICdsb2FkZXIvY2hyb21pdW0vRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vUmVzb3VyY2VMb2FkZXJDaHJvbWl1bS5jcHAn
LAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9TdWJyZXNvdXJjZUxvYWRlckNocm9taXVt
LmNwcCcsCkBAIC01NDY2LDcgKzU0NjksNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9D
bGlwYm9hcmRNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9Db250ZXh0TWVudUl0
ZW1NYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbScs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbWFjL0N1cnNvck1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0Ry
YWdEYXRhTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1t
JywKQEAgLTU1ODQsNyArNTU4Niw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9j
Zi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25l
dHdvcmsvY2hyb21pdW0vQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNocm9taXVt
LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJD
aHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vRE5T
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jl
c291cmNlRXJyb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9S
ZXNvdXJjZUhhbmRsZS5jcHAnLApAQCAtNTYxMiw2ICs1NjEzLDcgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVudGljYXRpb25NYWMubW0nLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbScsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llU3RvcmFnZU1hYy5tbScsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3JhZ2VNYWMubW0nLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tJywKQEAg
LTU2MjIsNiArNTYyNCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvUmVz
b3VyY2VSZXNwb25zZU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMv
V2ViQ29yZVVSTFJlc3BvbnNlLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL3F0
L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvcXQvQ29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL3F0
L0NyZWRlbnRpYWxTdG9yYWdlUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3Jr
L3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9uZXR3b3JrL3F0L05ldHdvcmtTdGF0ZU5vdGlmaWVyUXQuY3BwJywKQEAgLTU2NzIsNyArNTY3
NSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vcXQvQ29udGV4dE1lbnVJdGVtUXQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vcXQv
Q29va2llSmFyUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9uIDEzMzk3MikKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDc1LDYgKzIwNzUsNyBA
QAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWxcXC5jcHAkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdpbnNwZWN0b3IvSmF2YVNjcmlw
dFteL10qXFwuY3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnbG9hZGVyL1VzZXJTdHlsZVNo
ZWV0TG9hZGVyXFwuY3BwJCddLAorICAgICAgICBbJ2V4Y2x1ZGUnLCAnbG9hZGVyL0Nvb2tpZUph
clxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ2xvYWRlci9hcHBjYWNoZS8nXSwKICAg
ICAgICAgWydleGNsdWRlJywgJ2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmVNYWNc
XC5tbSQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmVcXC5jcHAkJ10sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTMzOTcyKQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NDE1LDYgKzI3
NDE1LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGxvYWRlclxDb29raWVKYXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ29va2llSmFyLmgiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxDcm9zc09yaWdpbkFjY2Vz
c0NvbnRyb2wuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTI4Mjg3LDEwICsyODI5NSw2IEBA
CiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXENvb2tpZUphci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxDb29raWVzU3RyYXRlZ3kuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+
CkBAIC0zMjUxOCw2ICszMjUyMiwxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xQbGF0Zm9ybUNvb2tpZUph
ci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cbmV0d29ya1xQcm90ZWN0aW9uU3BhY2UuY3BwIgogCQkJCQk+CiAJCQkJPC9G
aWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTMzOTcyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcxLDggKzMyNzEs
NiBAQAogCQk5MzUwMEYzMjEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxlckltcERldGFpbHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNTAwRjMx
MTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oICovOyB9OwogCQk5MzUy
MDdCRTA5QkQ0MTBBMDBGMjAzOEQgLyogTG9jYWxpemVkU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MjA3QkQwOUJENDEwQTAwRjIwMzhE
IC8qIExvY2FsaXplZFN0cmluZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5MzUyMDg0NTA5QkQ0M0I5MDBGMjAzOEQgLyogTGFuZ3VhZ2UubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzUyMDg0NDA5
QkQ0M0I5MDBGMjAzOEQgLyogTGFuZ3VhZ2UubW0gKi87IH07Ci0JCTkzNTIwODc3MDlCRDQ1MzQw
MEYyMDM4RCAvKiBDb29raWVKYXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzUyMDg3NjA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tICov
OyB9OwotCQk5MzUyMDg4MjA5QkQ0NUU5MDBGMjAzOEQgLyogQ29va2llSmFyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzUyMDg4MTA5QkQ0NUU5MDBG
MjAzOEQgLyogQ29va2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTM1MzY3NkIwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzUzNjc2
QTA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5tbSAqLzsgfTsKIAkJOTM1QzQ3NjMw
OUFDNENFNjAwQTZBQUI0IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUM0NzYyMDlBQzRDRTYw
MEE2QUFCNCAvKiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmggKi87IH07CiAJCTkzNUM0
NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUM0NzY2MDlBQzRENDMwMEE2
QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjA0Nyw2ICs2MDQ1LDEwIEBACiAJCUUxMzk4NjYz
MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMzk4NjYxMTU0Nzg0NzQwMDFFM0Y2NSAvKiBT
dHlsZVJlc29sdmVyLmNwcCAqLzsgfTsKIAkJRTEzOTg2NjQxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0
eWxlUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxMzk4NjYyMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggKi87IH07CiAJ
CUUxM0YwMUYxMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzRjAxRjAxMjcwRTE5MDAw
REZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMubW0gKi87IH07CisJCUUxNDI0QzhBMTY0QjNCNEUw
MEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDODkxNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3Jt
Q29va2llSmFyLmggKi87IH07CisJCUUxNDI0QzkwMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVK
YXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovOyB9OworCQlFMTQy
NEM5MzE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAvKiBD
b29raWVKYXIuY3BwICovOyB9OworCQlFMTQyNEM5NDE2NEI1MkM4MDBGMzJENDAgLyogQ29va2ll
SmFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQy
NEM5MjE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE0RjFDNDQxNEI1REFDNjAwRUE5MDA5IC8q
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0RjFDNDIxNEI1REFDNjAwRUE5MDA5IC8qIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwICovOyB9OwogCQlFMTRGMUM0NTE0QjVE
QUM2MDBFQTkwMDkgLyogSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0RjFDNDMxNEI1REFDNjAw
RUE5MDA5IC8qIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTVBMzZENzExMDQ1NzIwMDBC
N0I2MzkgLyogWE1MTlNOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTE1QTM2RDYxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCAqLzsg
fTsKQEAgLTEwNDk2LDggKzEwNDk4LDYgQEAKIAkJOTM1MDBGMzExM0ZERTNCRTAwOTlFQzI0IC8q
IE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
NTIwN0JEMDlCRDQxMEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsaXplZFN0cmluZ3MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM1MjA4NDQwOUJENDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTGFuZ3VhZ2UubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzNTIwODc2MDlCRDQ1MzQwMEYyMDM4RCAvKiBDb29r
aWVKYXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb29raWVK
YXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzNTIwODgxMDlCRDQ1RTkwMEYy
MDM4RCAvKiBDb29raWVKYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29v
a2llSmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNTM2NzZBMDlBRUQ4OEIw
MEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gU2Nyb2xsVmlld01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTM1QzQ3NjIwOUFDNENFNjAwQTZBQUI0IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzVDNDc2NjA5QUM0
RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTM0NDgsNiArMTM0NDgsMTAgQEAKIAkJRTEzOTg2NjIxNTQ3ODQ3NDAw
MUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3R5bGVSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTNGMDFF
QTEyNzBFMTBEMDBERkJBNzEgLyogQ29va2llU3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb29raWVTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2llU3RvcmFnZU1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE0MjRDODkxNjRCM0I0RTAwRjMyRDQwIC8q
IFBsYXRmb3JtQ29va2llSmFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBs
YXRmb3JtQ29va2llSmFyLmg7IHBhdGggPSBuZXR3b3JrL1BsYXRmb3JtQ29va2llSmFyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNDI0QzhGMTY0QjQ2MEIwMEYzMkQ0MCAvKiBD
b29raWVKYXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBD
b29raWVKYXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNDI0QzkxMTY0
QjUyQzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29va2llSmFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTE0MjRDOTIxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb29raWVKYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTE0RjFDNDIxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxNEYxQzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1QTM2RDYx
MTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gWE1MTlNOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU3
MTMsNiArMTU3MTcsNyBAQAogCQkJCTUxNEM3NjQ0MENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0
YVN0cmVhbU1hYy5oICovLAogCQkJCTUxNEM3NjQ1MENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0
YVN0cmVhbU1hYy5tbSAqLywKIAkJCQkxQTdGQTY0NzBEREEzQ0JBMDAyOEY4QTUgLyogTmV0d29y
a1N0YXRlTm90aWZpZXJNYWMuY3BwICovLAorCQkJCUUxNDI0QzhGMTY0QjQ2MEIwMEYzMkQ0MCAv
KiBDb29raWVKYXJNYWMubW0gKi8sCiAJCQkJNTE0Qzc2NDYwQ0U5MjM0RTAwN0VGM0NEIC8qIFJl
c291cmNlRXJyb3JNYWMubW0gKi8sCiAJCQkJNTE0Qzc2NDcwQ0U5MjM0RTAwN0VGM0NEIC8qIFJl
c291cmNlSGFuZGxlTWFjLm1tICovLAogCQkJCTUxNEM3NjQ5MENFOTIzNEUwMDdFRjNDRCAvKiBS
ZXNvdXJjZVJlcXVlc3RNYWMubW0gKi8sCkBAIC0xNTczNSw3ICsxNTc0MCw2IEBACiAJCQkJMkQ5
MDY2MEMwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5tbSAqLywKIAkJCQkwNjAyN0NC
MjBCMUNDMDNEMDA4ODRCMkQgLyogQ29udGV4dE1lbnVJdGVtTWFjLm1tICovLAogCQkJCTkzQjZB
MEU5MEIwQkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSAqLywKLQkJCQk5MzUyMDg3
NjA5QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tICovLAogCQkJCUY1ODc4NEYwMDJERTM3
NTkwMUVBNDEyMiAvKiBDdXJzb3JNYWMubW0gKi8sCiAJCQkJNUQ4QzREQkQxNDI4MjIyQzAwMjZD
RTcyIC8qIERpc3BsYXlTbGVlcERpc2FibGVyLmNwcCAqLywKIAkJCQk1RDhDNERCRTE0MjgyMjJD
MDAyNkNFNzIgLyogRGlzcGxheVNsZWVwRGlzYWJsZXIuaCAqLywKQEAgLTIwNjk2LDYgKzIwNzAw
LDggQEAKIAkJCQlFMUM0MTYxNjBGNjU2MzE4MDA5MkQyRkIgLyogQ3Jvc3NPcmlnaW5BY2Nlc3ND
b250cm9sLmNwcCAqLywKIAkJCQk0RkM4NTM0OTE2NDQyNzFCMDBEMUMyNzUgLyogQ2FjaGVkTWV0
YWRhdGEuY3BwICovLAogCQkJCTRGQzg1MzRBMTY0NDI3MUIwMEQxQzI3NSAvKiBDYWNoZWRNZXRh
ZGF0YS5oICovLAorCQkJCUUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuY3Bw
ICovLAorCQkJCUUxNDI0QzkyMTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuaCAqLywKIAkJ
CQlFMUM0MTYxMTBGNjU2MkZEMDA5MkQyRkIgLyogQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgg
Ki8sCiAJCQkJRTFDNDE1REQwRjY1NUQ3QzAwOTJEMkZCIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGUuY3BwICovLAogCQkJCUUxQzQxNUQ5MEY2NTVENkYwMDkyRDJGQiAvKiBDcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmggKi8sCkBAIC0yMDg2MCw3ICsyMDg2Niw2IEBA
CiAJCQkJOTNCNkEwRTUwQjBCQ0E1QzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmggKi8sCiAJCQkJ
MDYwMjdDQUMwQjFDQkZDMDAwODg0QjJEIC8qIENvbnRleHRNZW51SXRlbS5oICovLAogCQkJCUQ4
QjYxNTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCAqLywKLQkJCQk5MzUyMDg4MTA5QkQ0
NUU5MDBGMjAzOEQgLyogQ29va2llSmFyLmggKi8sCiAJCQkJMzM5QjVCNjIxMzFEQUEzMjAwRjQ4
RDAyIC8qIENvb2tpZXNTdHJhdGVneS5oICovLAogCQkJCTJFNDM0NjU2MEY1NDZBOTkwMEIwRjFC
QSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi8sCiAJCQkJMkU0MzQ2NTcwRjU0NkE5OTAwQjBG
MUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi8sCkBAIC0yMDkyMyw2ICsyMDkyOCw3IEBACiAJ
CQkJOThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggKi8sCiAJCQkJ
NEIyNzA4QzUwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCAqLywKIAkJCQlDNUY3NjVC
NDE0RTFENDE0MDA2Qzg5OUIgLyogUGFzdGVib2FyZFN0cmF0ZWd5LmggKi8sCisJCQkJRTE0MjRD
ODkxNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggKi8sCiAJCQkJQkM1Qzc2
MjgxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQuY3BwICovLAogCQkJCUJDNUM3NjI5
MTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9ybUV2ZW50LmggKi8sCiAJCQkJQTcyM0Y3N0ExNDg0
Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggKi8sCkBAIC0yMjYyNyw3ICsy
MjYzMyw2IEBACiAJCQkJN0FERTcyMjYxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRNZW51UHJv
dmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDI5MTJCMDI2NzYwMEMxQTM1OSAvKiBD
b252b2x2ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlEOEI2MTUyRjEwMzI0OTUxMDBDODU1
NEEgLyogQ29va2llLmggaW4gSGVhZGVycyAqLywKLQkJCQk5MzUyMDg4MjA5QkQ0NUU5MDBGMjAz
OEQgLyogQ29va2llSmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMzlCNUI2MzEzMURBQTMyMDBG
NDhEMDIgLyogQ29va2llc1N0cmF0ZWd5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzM0QwMjEyRDEz
MURCMzdCMDA0MDkxQTggLyogQ29va2llU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VF
Njg0NjQxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0b3JhZ2VDRk5ldC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNTY4Nyw2ICsyNTY5Miw4IEBACiAJCQkJM0ZGRkY5QTkxNTlEOUE1NTAwMjBCQkQ1
IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDMzhCRkYx
NjQ0NzNDNzAwMDkxRUIyIC8qIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0MzOEMwMzE2NDQ3M0REMDAwOTFFQjIgLyogU2Nyb2xsaW5nVHJlZUZpeGVkTm9k
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTE0MjRDOEExNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRm
b3JtQ29va2llSmFyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTQyNEM5NDE2NEI1MkM4MDBGMzJE
NDAgLyogQ29va2llSmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDExRENCMTE2NEMzOUE4MDBE
NDlCQzEgLyogV2lkdGhDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0yNjIwNiw3ICsyNjIxMyw2IEBACiAJ
CQkJMDYwMjdDQjMwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRleHRNZW51SXRlbU1hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTkzQjZBMEVBMEIwQkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI4MTJCMDI2NzYwMEMxQTM1OSAvKiBDb252
b2x2ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzNTIwODc3MDlCRDQ1MzQwMEYyMDM4
RCAvKiBDb29raWVKYXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk3RUU2ODQ2MjEyRDI2RTM4MDBF
Nzk0MTUgLyogQ29va2llSmFyQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NjMx
MkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0b3JhZ2VDRk5ldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFnZU1hYy5tbSBpbiBT
b3VyY2VzICovLApAQCAtMjg3NzQsNiArMjg3ODAsOCBAQAogCQkJCTkzQzM4QkZFMTY0NDczQzcw
MDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5M0MzOEMwNDE2NDQ3M0REMDAwOTFFQjIgLyogU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTRGQzg1MzRDMTY0NDI3MjMwMEQxQzI3NSAvKiBDYWNoZWRNZXRh
ZGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTQyNEM5MDE2NEI0NjBCMDBGMzJENDAgLyog
Q29va2llSmFyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTE0MjRDOTMxNjRCNTJDODAwRjMy
RDQwIC8qIENvb2tpZUphci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Db29raWVKYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Db29raWVKYXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nv
b2tpZUphci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVK
YXIuaCIKKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQor
I2Vycm9yIENocm9taXVtIGFuZCBCbGFja2JlcnJ5IGN1cnJlbnRseSB1c2UgYSBmb3JrIG9mIHRo
aXMgZmlsZSBiZWNhdXNlIG9mIGxheWVyaW5nIHZpb2xhdGlvbnMKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRl
eHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIGlmICghZG9jdW1lbnQpCisgICAg
ICAgIHJldHVybiAwOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAg
IGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIg
PSBmcmFtZS0+bG9hZGVyKCk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Cit9CisKK1N0cmluZyBjb29r
aWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJl
dHVybiBjb29raWVzRm9yRE9NKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQt
PmZpcnN0UGFydHlGb3JDb29raWVzKCksIHVybCk7Cit9CisKK3ZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJp
bmcpCit7CisgICAgc2V0Q29va2llc0Zyb21ET00obmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQp
LCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJsLCBjb29raWVTdHJpbmcpOwor
fQorCitib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAg
ICByZXR1cm4gY29va2llc0VuYWJsZWQobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpKTsKK30K
KworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIHVybCk7Cit9CisKK2Jv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMpCit7CisgICAgcmV0dXJuIGdldFJhd0Nvb2tpZXMo
bmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZXMpOworfQorCit2b2lkIGRl
bGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBjb29raWVOYW1lKQoreworICAgIGRlbGV0ZUNvb2tpZShuZXR3b3JraW5nQ29u
dGV4dChkb2N1bWVudCksIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgZ2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoMCwgaG9zdG5hbWVzKTsKK30KKwordm9pZCBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoMCwgaG9zdG5hbWUpOworfQorCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQorewor
ICAgIGRlbGV0ZUFsbENvb2tpZXMoMCk7Cit9CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
b2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2ll
SmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5oCShy
ZXZpc2lvbiAxMzM5MjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5o
OjEzMzkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvb2tp
ZUphcl9oCisjZGVmaW5lIENvb2tpZUphcl9oCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IERvY3VtZW50OworY2xhc3MgS1VSTDsKK3N0cnVjdCBDb29raWU7CisKKy8vIFRoZXNlIHR3byBm
dW5jdGlvbnMgaW1wbGVtZW50IGRvY3VtZW50LmNvb2tpZSBBUEksIHdpdGggc3BlY2lhbCBydWxl
cyBmb3IgSHR0cE9ubHkgY29va2llcy4KK1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYpOwordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpOworCisvLyBUaGVzZSBtZXRob2RzIHVzZSBjdXJyZW50IGNvb2tpZSBzdG9y
YWdlLCB0aHVzIHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50LgorYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOworU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOworYm9vbCBnZXRS
YXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7
Cit2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmKTsKKworLy8gVGhlc2UgZnVuY3Rpb25zIGFsd2F5cyBhY2Nlc3MgZGVmYXVsdCBjb29r
aWUgc3RvcmFnZSwgbm90IHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50
Lgordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cyk7Cit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KTsKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygpOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Db29raWVKYXIuaAkocmV2aXNpb24gMTMzOTI2KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL0Nvb2tpZUphci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDgsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOCw4ICsyOCw4IEBACiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTM5LDEzICszOSwxMyBAQCBzdHJ1Y3QgQ29va2llOwogCiAvLyBU
aGVzZSB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBkb2N1bWVudC5jb29raWUgQVBJLCB3aXRoIHNw
ZWNpYWwgcnVsZXMgZm9yIEh0dHBPbmx5IGNvb2tpZXMuCiBTdHJpbmcgY29va2llcyhjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0
IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKK3ZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0
IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZyk7CiAKIC8vIFRoZXNlIG1ldGhvZHMg
dXNlIGN1cnJlbnQgY29va2llIHN0b3JhZ2UsIHRodXMgdGFraW5nIHByaXZhdGUgYnJvd3Npbmcg
bW9kZSBpbnRvIGFjY291bnQuCiBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7
CiBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJik7CiBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50
KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwordm9pZCBkZWxldGVDb29raWUoY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKTsKIAogLy8g
VGhlc2UgZnVuY3Rpb25zIGFsd2F5cyBhY2Nlc3MgZGVmYXVsdCBjb29raWUgc3RvcmFnZSwgbm90
IHRha2luZyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgaW50byBhY2NvdW50Lgogdm9pZCBnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYmxhY2tiZXJyeS9Db29raWVKYXJCbGFj
a0JlcnJ5LmNwcAkocmV2aXNpb24gMTMzOTI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwOjEzMzkyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEy
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIElu
Yy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAtMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisKKyNpbmNsdWRl
ICJDb29raWUuaCIKKyNpbmNsdWRlICJDb29raWVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50Qmxh
Y2tCZXJyeS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIK
KyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgY29va2llcyhEb2N1bWVudCBjb25zdCogZG9j
dW1lbnQsIEtVUkwgY29uc3QmIHVybCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUgPyBmcmFtZS0+cGFnZSgpIDogMDsKKwor
ICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKCEoZnJh
bWUgJiYgZnJhbWUtPmxvYWRlcigpICYmIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAoIXN0YXRpY19jYXN0PEZyYW1lTG9hZGVy
Q2xpZW50QmxhY2tCZXJyeSo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5jb29raWVzRW5h
YmxlZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBBU1NFUlQoZG9jdW1lbnQg
JiYgdXJsID09IGRvY3VtZW50LT5jb29raWVVUkwoKSk7CisgICAgLy8gJ0h0dHBPbmx5JyBjb29r
aWVzIHNob3VsZCBubyBiZSBhY2Nlc3NpYmxlIGZyb20gc2NyaXB0cywgc28gd2UgZmlsdGVyIHRo
ZW0gb3V0IGhlcmUKKyAgICByZXR1cm4gY29va2llTWFuYWdlcigpLmdldENvb2tpZSh1cmwsIE5v
SHR0cE9ubHlDb29raWUpOworfQorCit2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50
LCBLVVJMIGNvbnN0JiB1cmwsIFN0cmluZyBjb25zdCYgdmFsdWUpCit7CisgICAgRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUt
PnBhZ2UoKSA6IDA7CisKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghKGZyYW1lICYmIGZyYW1lLT5sb2FkZXIoKSAmJiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgp
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNs
aWVudEJsYWNrQmVycnkqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+Y29va2llc0VuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGRvY3VtZW50ICYmIHVybCA9PSBk
b2N1bWVudC0+Y29va2llVVJMKCkpOworICAgIGNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKHVy
bCwgdmFsdWUsIE5vSHR0cE9ubHlDb29raWUpOworfQorCitib29sIGNvb2tpZXNFbmFibGVkKERv
Y3VtZW50IGNvbnN0KikKK3sKKyAgICAvLyBGSVhNRS4gQ3VycmVudGx5IGNvb2tpZSBpcyBlbmFi
bGVkIGJ5IGRlZmF1bHQsIG5vIHNldHRpbmcgb24gcHJvcGVydHkgcGFnZS4KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICBWZWN0
b3I8UGFyc2VkQ29va2llKj4gcmVzdWx0OworICAgIGNvb2tpZU1hbmFnZXIoKS5nZXRSYXdDb29r
aWVzKHJlc3VsdCwgdXJsLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7IGkrKykKKyAgICAgICAgcmVzdWx0W2ldLT5hcHBlbmRX
ZWJDb3JlQ29va2llKHJhd0Nvb2tpZXMpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGRl
bGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBjb29raWVOYW1lKQoreworICAgIC8vIENvb2tpZXMgYXJlIG5vdCBib3VuZCB0
byB0aGUgZG9jdW1lbnQuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCB0byBwYXNzCisgICAgLy8g
aW4gdGhlIGRvY3VtZW50IG9iamVjdCB0byBmaW5kIHRoZSB0YXJnZXRlZCBjb29raWVzIGluIGNv
b2tpZSBtYW5hZ2VyLgorICAgIGNvb2tpZU1hbmFnZXIoKS5yZW1vdmVDb29raWVXaXRoTmFtZSh1
cmwsIGNvb2tpZU5hbWUpOworfQorCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMICZ1cmwpCit7CisgICAgQVNT
RVJUKGRvY3VtZW50KTsKKworICAgIGlmICghKGRvY3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50
LT5mcmFtZSgpLT5sb2FkZXIoKSAmJiBkb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVu
dCgpKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKCFzdGF0aWNfY2FzdDxG
cmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkqPihkb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkt
PmNsaWVudCgpKS0+Y29va2llc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgcmV0dXJuIGNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWUodXJsLCBXaXRoSHR0cE9ubHlD
b29raWVzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5j
cHAJKHJldmlzaW9uIDEzMzkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9ibGFja2JlcnJ5
L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFVuZm9yay4gVGhpcyBmaWxlIGlz
IGZvcmtlZCBiZWNhdXNlIGFsbCBvdGhlciBwbGF0Zm9ybXMgdXNlIE5ldHdvcmtpbmdDb250ZXh0
IHRvIGFjY2VzcyBjb29raWUgamFyLCBub3QgRG9jdW1lbnQgb3IgRnJhbWUuCisKIFN0cmluZyBj
b29raWVzKERvY3VtZW50IGNvbnN0KiBkb2N1bWVudCwgS1VSTCBjb25zdCYgdXJsKQogewogICAg
IEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCShyZXZpc2lv
biAxMzM5MjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0v
Q29va2llSmFyQ2hyb21pdW0uY3BwOjEzMzkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
aHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisKKyNp
bmNsdWRlICJDb29raWUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgc2V0Q29va2llcyhE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoZG9jdW1lbnQsIHVybCwgdmFsdWUp
OworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIHVybCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGRvY3VtZW50
LCB1cmwpOworfQorCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIFBsYXRm
b3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7
Cit9CisKK2Jvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorewor
ICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsKK30K
KworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICByZXR1cm4gUGxhdGZv
cm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOworfQorCit2
b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQoreworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBv
cnQ6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29raWVOYW1lKTsKK30KKwordm9pZCBn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorfQorCit2b2lkIGRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQoreworICAgIC8vIEZJWE1FOiBOb3Qg
eWV0IGltcGxlbWVudGVkCit9CisKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygpCit7CisgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFy
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICsz
Nyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFVuZm9yay4gVGhpcyBm
aWxlIGlzIGZvcmtlZCBiZWNhdXNlIGFsbCBvdGhlciBwbGF0Zm9ybXMgdXNlIE5ldHdvcmtpbmdD
b250ZXh0IHRvIGFjY2VzcyBjb29raWUgamFyLCBub3QgRG9jdW1lbnQgb3IgRnJhbWUuCisKIHZv
aWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoZG9jdW1l
bnQsIHVybCwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHJl
dmlzaW9uIDEzMzk3MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQ29va2llSmFyX2gKLSNkZWZpbmUgQ29va2llSmFyX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBLVVJMOwotc3RydWN0IENvb2tpZTsKLQotLy8gVGhl
c2UgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgZG9jdW1lbnQuY29va2llIEFQSSwgd2l0aCBzcGVj
aWFsIHJ1bGVzIGZvciBIdHRwT25seSBjb29raWVzLgotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJik7Ci12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJik7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgdXNlIGN1cnJlbnQgY29v
a2llIHN0b3JhZ2UsIHRodXMgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291
bnQuCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci1TdHJpbmcgY29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci1i
b29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENv
b2tpZT4mKTsKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYs
IGNvbnN0IFN0cmluZyYpOwotCi0vLyBUaGVzZSBmdW5jdGlvbnMgYWx3YXlzIGFjY2VzcyBkZWZh
dWx0IGNvb2tpZSBzdG9yYWdlLCBub3QgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRv
IGFjY291bnQuCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYg
aG9zdG5hbWVzKTsKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUpOwotdm9pZCBkZWxldGVBbGxDb29raWVzKCk7Ci0KLX0KLQotI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29v
a2llSmFyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEzMzk3MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC0yMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKLQotI2luY2x1ZGUgIkNv
b2tpZS5oIgotI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRCbGFja0Jl
cnJ5LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cExvYWREZWZlcnJlci5oIgotI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmluZyBjb29raWVzKERvY3VtZW50IGNvbnN0KiBkb2N1bWVu
dCwgS1VSTCBjb25zdCYgdXJsKQotewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFt
ZSgpOwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOwotCi0gICAg
aWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoIShmcmFtZSAm
JiBmcmFtZS0+bG9hZGVyKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmICghc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGll
bnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPmNvb2tpZXNFbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIEFTU0VSVChkb2N1bWVudCAmJiB1
cmwgPT0gZG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKLSAgICAvLyAnSHR0cE9ubHknIGNvb2tpZXMg
c2hvdWxkIG5vIGJlIGFjY2Vzc2libGUgZnJvbSBzY3JpcHRzLCBzbyB3ZSBmaWx0ZXIgdGhlbSBv
dXQgaGVyZQotICAgIHJldHVybiBjb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llKHVybCwgTm9IdHRw
T25seUNvb2tpZSk7Ci19Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIEtV
UkwgY29uc3QmIHVybCwgU3RyaW5nIGNvbnN0JiB2YWx1ZSkKLXsKLSAgICBGcmFtZSogZnJhbWUg
PSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWUgPyBmcmFtZS0+cGFn
ZSgpIDogMDsKLQotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCEo
ZnJhbWUgJiYgZnJhbWUtPmxvYWRlcigpICYmIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXN0YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50
QmxhY2tCZXJyeSo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5jb29raWVzRW5hYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZG9jdW1lbnQgJiYgdXJsID09IGRvY3Vt
ZW50LT5jb29raWVVUkwoKSk7Ci0gICAgY29va2llTWFuYWdlcigpLnNldENvb2tpZXModXJsLCB2
YWx1ZSwgTm9IdHRwT25seUNvb2tpZSk7Ci19Ci0KLWJvb2wgY29va2llc0VuYWJsZWQoRG9jdW1l
bnQgY29uc3QqKQotewotICAgIC8vIEZJWE1FLiBDdXJyZW50bHkgY29va2llIGlzIGVuYWJsZWQg
YnkgZGVmYXVsdCwgbm8gc2V0dGluZyBvbiBwcm9wZXJ0eSBwYWdlLgotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIFZlY3RvcjxQ
YXJzZWRDb29raWUqPiByZXN1bHQ7Ci0gICAgY29va2llTWFuYWdlcigpLmdldFJhd0Nvb2tpZXMo
cmVzdWx0LCB1cmwsIFdpdGhIdHRwT25seUNvb2tpZXMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVzdWx0LnNpemUoKTsgaSsrKQotICAgICAgICByZXN1bHRbaV0tPmFwcGVuZFdlYkNv
cmVDb29raWUocmF3Q29va2llcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgLy8gQ29va2llcyBhcmUgbm90IGJvdW5kIHRvIHRo
ZSBkb2N1bWVudC4gVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIHRvIHBhc3MKLSAgICAvLyBpbiB0
aGUgZG9jdW1lbnQgb2JqZWN0IHRvIGZpbmQgdGhlIHRhcmdldGVkIGNvb2tpZXMgaW4gY29va2ll
IG1hbmFnZXIuCi0gICAgY29va2llTWFuYWdlcigpLnJlbW92ZUNvb2tpZVdpdGhOYW1lKHVybCwg
Y29va2llTmFtZSk7Ci19Ci0KLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkKLXsKLSAgICBBU1NFUlQo
ZG9jdW1lbnQpOwotCi0gICAgaWYgKCEoZG9jdW1lbnQtPmZyYW1lKCkgJiYgZG9jdW1lbnQtPmZy
YW1lKCktPmxvYWRlcigpICYmIGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCkp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoIXN0YXRpY19jYXN0PEZyYW1l
TG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xp
ZW50KCkpLT5jb29raWVzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAg
ICByZXR1cm4gY29va2llTWFuYWdlcigpLmdldENvb2tpZSh1cmwsIFdpdGhIdHRwT25seUNvb2tp
ZXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9Db29raWVKYXIubW0JKHJldmlzaW9uIDEzMzk3MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMTk0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDgsIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiQ29va2llSmFyLmgiCi0KLSNpZiAhVVNFKENGTkVUV09SSykKLQotI2ltcG9ydCAiQmxv
Y2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0ICJDb29raWUuaCIKLSNpbXBvcnQgIkNvb2tpZVN0b3Jh
Z2UuaCIKLSNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2ltcG9ydCAiRG9jdW1lbnQu
aCIKLSNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1zdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoTlNBcnJheSAq
dW5maWx0ZXJlZENvb2tpZXMpCi17Ci0gICAgTlNVSW50ZWdlciBjb3VudCA9IFt1bmZpbHRlcmVk
Q29va2llcyBjb3VudF07Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBmaWx0ZXJlZENv
b2tpZXMoQWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpj
b3VudF0pOwotCi0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewot
ICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbdW5maWx0ZXJl
ZENvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKLQotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0v
NTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0
eSBjb29raWUsCi0gICAgICAgIC8vIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIu
IFdlIGhhdmUgYSB3b3JrYXJvdW5kIGluIHNldENvb2tpZXMoKSB0byBwcmV2ZW50Ci0gICAgICAg
IC8vIHRoYXQsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gYXZvaWQgc2VuZGluZyBjb29raWVzIHRoYXQg
d2VyZSBwcmV2aW91c2x5IHN0b3JlZCwgYW5kCi0gICAgICAgIC8vIHRoZXJlJ3Mgbm8gaGFybSB0
byBkb2luZyB0aGlzIGNoZWNrIGJlY2F1c2Ugc3VjaCBhIGNvb2tpZSBpcyBuZXZlciB2YWxpZC4K
LSAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5ndGhdKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKFtjb29raWUgaXNIVFRQT25seV0pCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBbZmlsdGVyZWRDb29raWVzLmdldCgpIGFkZE9iamVjdDpjb29raWVd
OwotICAgIH0KLQotICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7Ci19Ci0KLVN0cmluZyBjb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQotewotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVz
Rm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7Ci0gICAgcmV0
dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpmaWx0ZXJD
b29raWVzKGNvb2tpZXMpLmdldCgpXSBvYmplY3RGb3JLZXk6QCJDb29raWUiXTsKLQotICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiB1cmwpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNB
cnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0
b3JhZ2UoKS5nZXQoKSwgdXJsKTsKLSAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVxdWVzdEhl
YWRlckZpZWxkc1dpdGhDb29raWVzOmNvb2tpZXNdIG9iamVjdEZvcktleTpAIkNvb2tpZSJdOwot
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19
Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVTdHIpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IE9uIDEwLjUsIE5TSFRUUENv
b2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29va2llLAotICAgIC8vIHdoaWNoIHdv
dWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCi0gICAgaWYgKGNvb2tpZVN0ci5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgotICAgIC8vIGNvb2tpZXNXaXRoUmVz
cG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVzIHdpdGhvdXQgYSB2YWx1ZQot
ICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVTdHIuY29udGFpbnMoJz0nKSA/IGNvb2tp
ZVN0ciA6IGNvb2tpZVN0ciArICI9IjsKLQotICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7Ci0g
ICAgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGZpbHRlckNvb2tpZXMoW05T
SFRUUENvb2tpZSBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOltOU0RpY3Rpb25hcnkg
ZGljdGlvbmFyeVdpdGhPYmplY3Q6Y29va2llU3RyaW5nIGZvcktleTpAIlNldC1Db29raWUiXSBm
b3JVUkw6Y29va2llVVJMXSk7Ci0gICAgQVNTRVJUKFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgY291
bnRdIDw9IDEpOwotCi0gICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29v
a2llU3RvcmFnZSgpLmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKLX0KLQotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopCi17Ci0g
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNIVFRQQ29va2llQWNjZXB0
UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IHN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2Vw
dFBvbGljeT4od2tHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCkuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29va2llQWNjZXB0UG9saWN5ID09IE5TSFRU
UENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyB8fCBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQ
Q29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47Ci0KLSAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBnZXRS
YXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2ll
PiYgcmF3Q29va2llcykKLXsKLSAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tp
ZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsKLSAgICBO
U1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOwotICAgIHJhd0Nvb2tpZXMucmVzZXJ2
ZUNhcGFjaXR5KGNvdW50KTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVtj
b29raWVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIE5TVGltZUludGVydmFsIGV4cGlyZXMg
PSBbW2Nvb2tpZSBleHBpcmVzRGF0ZV0gdGltZUludGVydmFsU2luY2UxOTcwXSAqIDEwMDA7Ci0g
ICAgICAgIHJhd0Nvb2tpZXMudW5jaGVja2VkQXBwZW5kKENvb2tpZShbY29va2llIG5hbWVdLCBb
Y29va2llIHZhbHVlXSwgW2Nvb2tpZSBkb21haW5dLCBbY29va2llIHBhdGhdLCBleHBpcmVzLAot
ICAgICAgICAgICAgW2Nvb2tpZSBpc0hUVFBPbmx5XSwgW2Nvb2tpZSBpc1NlY3VyZV0sIFtjb29r
aWUgaXNTZXNzaW9uT25seV0pKTsKLSAgICB9Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TVVJMICpjb29raWVVUkwgPSB1
cmw7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2Ug
PSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3
a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZVVSTCk7Ci0KLSAg
ICBOU1N0cmluZyAqY29va2llTmFtZVN0cmluZyA9IGNvb2tpZU5hbWU7Ci0KLSAgICBOU1VJbnRl
Z2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOwotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQ
Q29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgaWYgKFtbY29va2ll
IG5hbWVdIGlzRXF1YWxUb1N0cmluZzpjb29raWVOYW1lU3RyaW5nXSkKLSAgICAgICAgICAgIHdr
RGVsZXRlSFRUUENvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWUpOwotICAgIH0KLQot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCi17Ci0gICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMo
ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Ci0gICAgCi0gICAgZm9yIChOU0hU
VFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKQotICAgICAgICBob3N0bmFtZXMuYWRkKFtjb29r
aWUgZG9tYWluXSk7Ci0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKLXsK
LSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGRlZmF1bHRDRkhUVFBDb29raWVTdG9y
YWdlKCk7Ci0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMoY29va2llU3RvcmFn
ZS5nZXQoKSk7Ci0gICAgaWYgKCFjb29raWVzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
Zm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKSB7Ci0gICAgICAgIGlmIChob3N0
bmFtZSA9PSBTdHJpbmcoW2Nvb2tpZSBkb21haW5dKSkKLSAgICAgICAgICAgIHdrRGVsZXRlSFRU
UENvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWUpOwotICAgIH0KLSAgICAKLSAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQot
ewotICAgIHdrRGVsZXRlQWxsSFRUUENvb2tpZXMoZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2Uo
KS5nZXQoKSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vICFVU0UoQ0ZORVRXT1JLKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIu
aAkocmV2aXNpb24gMTMzOTI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVK
YXIuaDoxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BsYXRmb3Jt
Q29va2llSmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDb29raWVKYXJfaAorI2RlZmluZSBDb29raWVKYXJfaAorCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEtVUkw7CitzdHJ1Y3QgQ29v
a2llOworCisvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBkb2N1bWVudC5jb29raWUg
QVBJLCB3aXRoIHNwZWNpYWwgcnVsZXMgZm9yIEh0dHBPbmx5IGNvb2tpZXMuCitTdHJpbmcgY29v
a2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKK3ZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKworLy8gVGhlc2UgbWV0aG9kcyB1
c2UgY3VycmVudCBjb29raWUgc3RvcmFnZSwgdGh1cyB0YWtpbmcgcHJpdmF0ZSBicm93c2luZyBt
b2RlIGludG8gYWNjb3VudC4KK2Jvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsK
K1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmKTsKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmLCBWZWN0b3I8Q29va2llPiYpOwordm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisKKy8vIFRoZXNlIGZ1bmN0aW9ucyBhbHdh
eXMgYWNjZXNzIGRlZmF1bHQgY29va2llIHN0b3JhZ2UsIG5vdCB0YWtpbmcgcHJpdmF0ZSBicm93
c2luZyBtb2RlIGludG8gYWNjb3VudC4KK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFz
aFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwordm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSk7Cit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKKworfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1D
b29raWVKYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1BsYXRmb3JtQ29va2llSmFyLmgJKHJldmlzaW9uIDEzMzkyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsMzQgKzIzLDMwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQ29va2llSmFy
X2gKLSNkZWZpbmUgQ29va2llSmFyX2gKKyNpZm5kZWYgUGxhdGZvcm1Db29raWVKYXJfaAorI2Rl
ZmluZSBQbGF0Zm9ybUNvb2tpZUphcl9oCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwogY2xhc3MgS1VSTDsKK2Ns
YXNzIE5ldHdvcmtpbmdDb250ZXh0Owogc3RydWN0IENvb2tpZTsKIAotLy8gVGhlc2UgdHdvIGZ1
bmN0aW9ucyBpbXBsZW1lbnQgZG9jdW1lbnQuY29va2llIEFQSSwgd2l0aCBzcGVjaWFsIHJ1bGVz
IGZvciBIdHRwT25seSBjb29raWVzLgotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJik7Ci12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJik7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgdXNlIGN1cnJlbnQgY29va2llIHN0b3Jh
Z2UsIHRodXMgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQuCi1ib29s
IGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci1TdHJpbmcgY29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci1ib29sIGdldFJh
d0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsK
LXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYpOwotCi0vLyBUaGVzZSBmdW5jdGlvbnMgYWx3YXlzIGFjY2VzcyBkZWZhdWx0IGNvb2tp
ZSBzdG9yYWdlLCBub3QgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQu
Ci12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVz
KTsKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUp
Owotdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CisvLyBJZiBuZXR3b3JraW5nIGNvbnRleHQgaXMg
bnVsbCwgZGVmYXVsdCBjb29raWUgc3RvcmFnZSBpcyB1c2VkLgorU3RyaW5nIGNvb2tpZXNGb3JE
T00oTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJM
Jik7Cit2b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworYm9vbCBjb29raWVz
RW5hYmxlZChOZXR3b3JraW5nQ29udGV4dCopOworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYpOworYm9vbCBnZXRSYXdD
b29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7
Cit2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmKTsKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRl
eHQqLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7Cit2b2lkIGRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOwordm9p
ZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0Kik7CiAKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5l
dC5jcHAJKHJldmlzaW9uIDEzMzk3MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvQ29va2llSmFyQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNCwxMyArMjQsMTIgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKIAogI2lm
IFVTRShDRk5FVFdPUkspCiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVT
dG9yYWdlQ0ZOZXQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCkBA
IC05NSwxOCArOTQsMTggQEAgc3RhdGljIFJldGFpblB0cjxDRkFycmF5UmVmPiBmaWx0ZXJDb29r
aQogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3Zv
aWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsK
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFnZSBzdG9y
ZXMgYW4gZW1wdHkgY29va2llLCB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgog
ICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsQ0YoQWRvcHRDRiwgdXJs
LmNyZWF0ZUNGVVJMKCkpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNv
b2tpZXNDRihBZG9wdENGLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jcmVhdGVD
RlVSTCgpKTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVzQ0Yo
QWRvcHRDRiwgZmlyc3RQYXJ0eS5jcmVhdGVDRlVSTCgpKTsKIAogICAgIC8vIDxodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgogICAg
IC8vIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVz
IHdpdGhvdXQgYSB2YWx1ZQpAQCAtMTIzLDkgKzEyMiw5IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhj
b29raWVTdG9yYWdlLmdldCgpLCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSkuZ2V0KCks
IHVybENGLmdldCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc0NGLmdldCgpKTsKIH0KIAotU3RyaW5n
IGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQor
U3RyaW5nIGNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmLCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAg
IFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4
dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogCkBAIC0xMzcsOSArMTM2LDkgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8q
ZG9jdW1lbgogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVh
ZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJs
KQorU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgp
OworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0g
Y29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29v
a2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCkBAIC0xNTEsMTggKzE1MCwxOSBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRW
YWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAKLWJvb2wgY29va2llc0VuYWJs
ZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgY29va2llc0VuYWJsZWQoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2Vw
dFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21N
YWluRG9jdW1lbnREb21haW47Ci0gICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKKyAgICBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQg
PyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3Jh
Z2UoKTsKKyAgICBpZiAoY29va2llU3RvcmFnZSkKICAgICAgICAgcG9saWN5ID0gQ0ZIVFRQQ29v
a2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpKTsKICAg
ICByZXR1cm4gcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJv
bU1haW5Eb2N1bWVudERvbWFpbiB8fCBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2Vw
dFBvbGljeUFsd2F5czsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgZ2V0UmF3
Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0
b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAg
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFn
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xOTMsOSArMTkzLDkgQEAgYm9vbCBnZXRS
YXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBuYW1lKQordm9pZCBkZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMjE0LDkgKzIxNCw5IEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0
IERvY3VtZW50KiwgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cykKIHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFn
ZSA9IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFj
b29raWVTdG9yYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzMiw5ICsyMzIsOSBAQCB2b2lk
IGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgfQogfQogCi12b2lkIGRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBkZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgaG9zdG5hbWUpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
IGNvb2tpZVN0b3JhZ2UgPSBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgp
OwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTEsOSAr
MjUxLDkgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaQogICAgIH0K
IH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgZGVsZXRlQWxsQ29va2llcyhOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7Cisg
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250
ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1cm47CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzM5NzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDb29raWVKYXIuaCIKLQotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0
Q29va2llcyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQotewotICAgIHJldHVybiBQbGF0
Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoZG9jdW1lbnQsIHVybCk7Ci19Ci0KLVN0cmluZyBjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIHVybCkKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKLX0KLQotYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6
Y29va2llc0VuYWJsZWQoZG9jdW1lbnQpOwotfQotCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdD
b29raWVzKQotewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1l
bnQsIHVybCwgcmF3Q29va2llcyk7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUp
Ci17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1
cmwsIGNvb2tpZU5hbWUpOwotfQotCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVu
dGVkCi19Ci0KLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9z
dG5hbWUpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLX0KLQotdm9pZCBk
ZWxldGVBbGxDb29raWVzKCkKLXsKLSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCShyZXZpc2lvbiAx
MzM5NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFy
Q3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDEwICsxNSw5IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
Q29va2llSmFyLmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTI4LDUwICsyNyw1MCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBjb29raWVKYXI7CiAKLXZv
aWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250
ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
IHsKICAgICBjb29raWVKYXIuc2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOwogfQogCi1TdHJpbmcg
Y29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitT
dHJpbmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25z
dCBLVVJMJiB1cmwpCiB7CiAgICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsK
IH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50
KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIHVybCkKIHsKICAg
ICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWUuCiAgICAgcmV0dXJuIGNvb2tpZUph
ci5nZXQodXJsLnN0cmluZygpKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCogLypkb2N1bWVudCovKQorYm9vbCBjb29raWVzRW5hYmxlZChOZXR3b3JraW5nQ29udGV4
dCopCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wg
Z2V0UmF3Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAog
ICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVl
IHdoZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtp
bmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
TmV0d29ya2luZ0NvbnRleHQqLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKICAgICAv
LyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAg
IC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2ll
cygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqKQogewogICAgIC8v
IEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCShyZXZpc2lvbiAxMzM5
MjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW06MTMzOTI2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkNvb2tpZUphci5oIgorCisjaWYgIVVT
RShDRk5FVFdPUkspCisKKyNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiQ29v
a2llLmgiCisjaW1wb3J0ICJDb29raWVTdG9yYWdlLmgiCisjaW1wb3J0ICJDb29raWVTdG9yYWdl
Q0ZOZXQuaCIKKyNpbXBvcnQgIkRvY3VtZW50LmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJldGFpblB0cjxOU0Fy
cmF5PiBmaWx0ZXJDb29raWVzKE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzKQoreworICAgIE5T
VUludGVnZXIgY291bnQgPSBbdW5maWx0ZXJlZENvb2tpZXMgY291bnRdOworICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gZmlsdGVyZWRDb29raWVzKEFkb3B0TlMsIFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y291bnRdKTsKKworICAgIGZvciAoTlNVSW50ZWdl
ciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUg
PSAoTlNIVFRQQ29va2llICopW3VuZmlsdGVyZWRDb29raWVzIG9iamVjdEF0SW5kZXg6aV07CisK
KyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IE9uIDEwLjUsIE5TSFRUUENvb2tp
ZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29va2llLAorICAgICAgICAvLyB3aGljaCB3
b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLiBXZSBoYXZlIGEgd29ya2Fyb3VuZCBpbiBzZXRD
b29raWVzKCkgdG8gcHJldmVudAorICAgICAgICAvLyB0aGF0LCBidXQgd2UgYWxzbyBuZWVkIHRv
IGF2b2lkIHNlbmRpbmcgY29va2llcyB0aGF0IHdlcmUgcHJldmlvdXNseSBzdG9yZWQsIGFuZAor
ICAgICAgICAvLyB0aGVyZSdzIG5vIGhhcm0gdG8gZG9pbmcgdGhpcyBjaGVjayBiZWNhdXNlIHN1
Y2ggYSBjb29raWUgaXMgbmV2ZXIgdmFsaWQuCisgICAgICAgIGlmICghW1tjb29raWUgbmFtZV0g
bGVuZ3RoXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChbY29va2llIGlz
SFRUUE9ubHldKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgW2ZpbHRlcmVkQ29v
a2llcy5nZXQoKSBhZGRPYmplY3Q6Y29va2llXTsKKyAgICB9CisKKyAgICByZXR1cm4gZmlsdGVy
ZWRDb29raWVzOworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmIHVybCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0Fy
cmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpLmdldCgpLCB1cmwpOworICAgIHJldHVybiBbW05TSFRUUENvb2tpZSByZXF1ZXN0SGVh
ZGVyRmllbGRzV2l0aENvb2tpZXM6ZmlsdGVyQ29va2llcyhjb29raWVzKS5nZXQoKV0gb2JqZWN0
Rm9yS2V5OkAiQ29va2llIl07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVz
Rm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybCk7CisgICAgcmV0
dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpjb29raWVz
XSBvYmplY3RGb3JLZXk6QCJDb29raWUiXTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQorewor
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIC8vIDxyZGFyOi8vcHJvYmxl
bS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVt
cHR5IGNvb2tpZSwKKyAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgor
ICAgIGlmIChjb29raWVTdHIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyA8
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQw
OTAzND4KKyAgICAvLyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFy
c2UgY29va2llcyB3aXRob3V0IGEgdmFsdWUKKyAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY29v
a2llU3RyLmNvbnRhaW5zKCc9JykgPyBjb29raWVTdHIgOiBjb29raWVTdHIgKyAiPSI7CisKKyAg
ICBOU1VSTCAqY29va2llVVJMID0gdXJsOworICAgIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJl
ZENvb2tpZXMgPSBmaWx0ZXJDb29raWVzKFtOU0hUVFBDb29raWUgY29va2llc1dpdGhSZXNwb25z
ZUhlYWRlckZpZWxkczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OmNvb2tpZVN0
cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl0gZm9yVVJMOmNvb2tpZVVSTF0pOworICAgIEFTU0VS
VChbZmlsdGVyZWRDb29raWVzLmdldCgpIGNvdW50XSA8PSAxKTsKKworICAgIHdrU2V0SFRUUENv
b2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVyZWRD
b29raWVzLmdldCgpLCBjb29raWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygp
KTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK2Jvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKworICAgIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgPSBz
dGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHdrR2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKSk7CisgICAgcmV0dXJu
IGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMgfHwg
Y29va2llQWNjZXB0UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFp
bkRvY3VtZW50RG9tYWluOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCit7CisgICAgcmF3Q29v
a2llcy5jbGVhcigpOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5T
QXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCkuZ2V0KCksIHVybCk7CisgICAgTlNVSW50ZWdlciBjb3VudCA9IFtjb29raWVzIGNv
dW50XTsKKyAgICByYXdDb29raWVzLnJlc2VydmVDYXBhY2l0eShjb3VudCk7CisgICAgZm9yIChO
U1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0hUVFBDb29raWUg
KmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbY29va2llcyBvYmplY3RBdEluZGV4OmldOworICAg
ICAgICBOU1RpbWVJbnRlcnZhbCBleHBpcmVzID0gW1tjb29raWUgZXhwaXJlc0RhdGVdIHRpbWVJ
bnRlcnZhbFNpbmNlMTk3MF0gKiAxMDAwOworICAgICAgICByYXdDb29raWVzLnVuY2hlY2tlZEFw
cGVuZChDb29raWUoW2Nvb2tpZSBuYW1lXSwgW2Nvb2tpZSB2YWx1ZV0sIFtjb29raWUgZG9tYWlu
XSwgW2Nvb2tpZSBwYXRoXSwgZXhwaXJlcywKKyAgICAgICAgICAgIFtjb29raWUgaXNIVFRQT25s
eV0sIFtjb29raWUgaXNTZWN1cmVdLCBbY29va2llIGlzU2Vzc2lvbk9ubHldKSk7CisgICAgfQor
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgY29va2llTmFtZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisKKyAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOworICAgIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2Uo
KTsKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9y
YWdlLmdldCgpLCBjb29raWVVUkwpOworCisgICAgTlNTdHJpbmcgKmNvb2tpZU5hbWVTdHJpbmcg
PSBjb29raWVOYW1lOworCisgICAgTlNVSW50ZWdlciBjb3VudCA9IFtjb29raWVzIGNvdW50XTsK
KyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5T
SFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVtjb29raWVzIG9iamVjdEF0SW5k
ZXg6aV07CisgICAgICAgIGlmIChbW2Nvb2tpZSBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6Y29va2ll
TmFtZVN0cmluZ10pCisgICAgICAgICAgICB3a0RlbGV0ZUhUVFBDb29raWUoY29va2llU3RvcmFn
ZS5nZXQoKSwgY29va2llKTsKKyAgICB9CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworfQorCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9z
dG5hbWVzKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TQXJy
YXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzKGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCku
Z2V0KCkpOworICAgIAorICAgIGZvciAoTlNIVFRQQ29va2llKiBjb29raWUgaW4gY29va2llcykK
KyAgICAgICAgaG9zdG5hbWVzLmFkZChbY29va2llIGRvbWFpbl0pOworICAgIAorICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworCisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3Jh
Z2UgPSBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIE5TQXJyYXkgKmNvb2tpZXMg
PSB3a0hUVFBDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOworICAgIGlmICghY29va2llcykK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZvciAoTlNIVFRQQ29va2llKiBjb29raWUgaW4g
Y29va2llcykgeworICAgICAgICBpZiAoaG9zdG5hbWUgPT0gU3RyaW5nKFtjb29raWUgZG9tYWlu
XSkpCisgICAgICAgICAgICB3a0RlbGV0ZUhUVFBDb29raWUoY29va2llU3RvcmFnZS5nZXQoKSwg
Y29va2llKTsKKyAgICB9CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30K
Kwordm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICB3a0RlbGV0ZUFsbEhUVFBDb29raWVz
KGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCkpOworfQorCit9CisKKyNlbmRpZiAv
LyAhVVNFKENGTkVUV09SSykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL0Nvb2tpZUphck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0JKHJldmlzaW9uIDEzMzkyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiQ29va2llSmFyLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUNvb2tpZUphci5oIgogCiAjaWYgIVVT
RShDRk5FVFdPUkspCiAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbXBvcnQgIkNvb2tpZS5oIgogI2lt
cG9ydCAiQ29va2llU3RvcmFnZS5oIgogI2ltcG9ydCAiQ29va2llU3RvcmFnZUNGTmV0LmgiCi0j
aW1wb3J0ICJEb2N1bWVudC5oIgorI2ltcG9ydCAiS1VSTC5oIgogI2ltcG9ydCAiV2ViQ29yZVN5
c3RlbUludGVyZmFjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MSwyOSArNjEsMzEg
QEAgc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJDb29raWVzKAogICAgIHJldHVybiBm
aWx0ZXJlZENvb2tpZXM7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYgdXJsKQorU3RyaW5nIGNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNG
b3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsKKyAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2Uo
KTsKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9y
YWdlLmdldCgpLCB1cmwpOwogICAgIHJldHVybiBbW05TSFRUUENvb2tpZSByZXF1ZXN0SGVhZGVy
RmllbGRzV2l0aENvb2tpZXM6ZmlsdGVyQ29va2llcyhjb29raWVzKS5nZXQoKV0gb2JqZWN0Rm9y
S2V5OkAiQ29va2llIl07CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1
cmwpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgTlNBcnJheSAq
Y29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2Uo
KS5nZXQoKSwgdXJsKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQ
Q29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCB1cmwpOwogICAgIHJldHVybiBbW05T
SFRUUENvb2tpZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6Y29va2llc10gb2JqZWN0
Rm9yS2V5OkAiQ29va2llIl07CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAg
IHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKK3ZvaWQgc2V0Q29v
a2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0
UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCiB7CiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0xMDAsMjggKzEwMiwzMSBAQCB2b2lk
IHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgUmV0YWluUHRyPE5TQXJy
YXk+IGZpbHRlcmVkQ29va2llcyA9IGZpbHRlckNvb2tpZXMoW05TSFRUUENvb2tpZSBjb29raWVz
V2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmpl
Y3Q6Y29va2llU3RyaW5nIGZvcktleTpAIlNldC1Db29raWUiXSBmb3JVUkw6Y29va2llVVJMXSk7
CiAgICAgQVNTRVJUKFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgY291bnRdIDw9IDEpOwogCi0gICAg
d2tTZXRIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgp
LCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZG9jdW1lbnQtPmZpcnN0UGFydHlG
b3JDb29raWVzKCkpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29r
aWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZh
dWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIHdrU2V0SFRUUENvb2tpZXNGb3JVUkwoY29v
a2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGZpcnN0
UGFydHkpOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotYm9vbCBjb29r
aWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopCitib29sIGNvb2tpZXNFbmFibGVkKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IAotICAgIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgPSBzdGF0
aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHdrR2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpKSk7CisgICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7Cisg
ICAgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IHN0YXRpY19j
YXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4od2tHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KGNvb2tpZVN0b3JhZ2UuZ2V0KCkpKTsKICAgICByZXR1cm4gY29va2llQWNjZXB0UG9saWN5ID09
IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyB8fCBjb29raWVBY2NlcHRQb2xpY3kgPT0g
TlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgZ2V0UmF3Q29va2llcyhOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykK
IHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0Fy
cmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCB1
cmwpOwogICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07CiAgICAgcmF3Q29v
a2llcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwogICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKQEAgLTEzNSwxMiArMTQwLDEyIEBAIGJvb2wgZ2V0UmF3Q29va2ll
cyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxl
dGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y29va2llTmFtZSkKK3ZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwot
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBOU0FycmF5ICpjb29r
aWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWVVUkwp
OwogCiAgICAgTlNTdHJpbmcgKmNvb2tpZU5hbWVTdHJpbmcgPSBjb29raWVOYW1lOwpAQCAtMTU1
LDExICsxNjAsMTIgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAog
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIGdldEhvc3RuYW1lc1dp
dGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmluZz4mIGhv
c3RuYW1lcykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBOU0Fy
cmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llcyhkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgp
LmdldCgpKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3Rv
cmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENG
SFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2ll
cyhjb29raWVTdG9yYWdlLmdldCgpKTsKICAgICAKICAgICBmb3IgKE5TSFRUUENvb2tpZSogY29v
a2llIGluIGNvb2tpZXMpCiAgICAgICAgIGhvc3RuYW1lcy5hZGQoW2Nvb2tpZSBkb21haW5dKTsK
QEAgLTE2NywxMSArMTczLDExIEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHIKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBkZWZhdWx0Q0ZI
VFRQQ29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkg
OiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3
a0hUVFBDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwogICAgIGlmICghY29va2llcykKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTg0LDkgKzE5MCwxMCBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZShjb25zdCBTdHJpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAot
dm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCkKIHsKLSAgICB3a0RlbGV0ZUFsbEhUVFBDb29raWVzKGRlZmF1bHRD
RkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCkpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIHdrRGVsZXRlQWxs
SFRUUENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQuY3BwCShyZXZp
c2lvbiAxMzM5MjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0
LmNwcDoxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tp
ZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNvb2tpZUphclF0LmgiCisKKyNpbmNsdWRlICJDb29raWUuaCIKKyNpbmNs
dWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVk
ZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5Q29va2llc1F0Lmgi
CisjaW5jbHVkZSA8UURhdGVUaW1lPgorI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4K
KyNpbmNsdWRlIDxRTmV0d29ya0Nvb2tpZT4KKyNpbmNsdWRlIDxRU3FsUXVlcnk+CisjaW5jbHVk
ZSA8UVN0cmluZ0xpc3Q+CisjaW5jbHVkZSA8UVZhcmlhbnQ+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFNoYXJlZENvb2tp
ZUphclF0KiBzX3NoYXJlZENvb2tpZUphclF0ID0gMDsKKworc3RhdGljIE5ldHdvcmtpbmdDb250
ZXh0KiBuZXR3b3JraW5nQ29udGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAg
aWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
RnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICBpZiAoIWxvYWRlcikK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGxvYWRlci0+bmV0d29ya2luZ0NvbnRleHQo
KTsKK30KKwordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3
b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBpZiAoIWphcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgUVVybCB1cmxGb3JDb29raWVzKHVybCk7CisgICAgUVVybCBmaXJzdFBh
cnR5VXJsKGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICBpZiAoIXRoaXJk
UGFydHlDb29raWVQb2xpY3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFy
dHlVcmwpKQorICAgICAgICByZXR1cm47CisKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29v
a2llcyA9IFFOZXR3b3JrQ29va2llOjpwYXJzZUNvb2tpZXMoUVN0cmluZyh2YWx1ZSkudG9MYXRp
bjEoKSk7CisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJdGVyYXRvciBpdCA9IGNvb2tpZXMu
YmVnaW4oKTsKKyAgICB3aGlsZSAoaXQgIT0gY29va2llcy5lbmQoKSkgeworICAgICAgICBpZiAo
aXQtPmlzSHR0cE9ubHkoKSkKKyAgICAgICAgICAgIGl0ID0gY29va2llcy5lcmFzZShpdCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICsraXQ7CisgICAgfQorCisgICAgamFyLT5zZXRDb29r
aWVzRnJvbVVybChjb29raWVzLCB1cmxGb3JDb29raWVzKTsKK30KKworU3RyaW5nIGNvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgUU5ldHdvcmtDb29r
aWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigp
OworCisgICAgUVVybCB1cmxGb3JDb29raWVzKHVybCk7CisgICAgUVVybCBmaXJzdFBhcnR5VXJs
KGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICBpZiAoIXRoaXJkUGFydHlD
b29raWVQb2xpY3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwp
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4g
Y29va2llcyA9IGphci0+Y29va2llc0ZvclVybCh1cmxGb3JDb29raWVzKTsKKyAgICBpZiAoY29v
a2llcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFFTdHJpbmdM
aXN0IHJlc3VsdENvb2tpZXM7CisgICAgZm9yZWFjaCAoY29uc3QgUU5ldHdvcmtDb29raWUmIG5l
dHdvcmtDb29raWUsIGNvb2tpZXMpIHsKKyAgICAgICAgaWYgKG5ldHdvcmtDb29raWUuaXNIdHRw
T25seSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlc3VsdENvb2tpZXMuYXBw
ZW5kKFFTdHJpbmc6OmZyb21MYXRpbjEobmV0d29ya0Nvb2tpZS50b1Jhd0Zvcm0oUU5ldHdvcmtD
b29raWU6Ok5hbWVBbmRWYWx1ZU9ubHkpLmNvbnN0RGF0YSgpKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3RyaW5nKCI7ICIpKTsKK30KKworU3RyaW5n
IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCAmdXJsKQoreworICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0
d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3
b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKworICAgIFFMaXN0PFFOZXR3b3JrQ29v
a2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKFFVcmwodXJsKSk7CisgICAgaWYgKGNv
b2tpZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBRU3RyaW5n
TGlzdCByZXN1bHRDb29raWVzOworICAgIGZvcmVhY2ggKFFOZXR3b3JrQ29va2llIG5ldHdvcmtD
b29raWUsIGNvb2tpZXMpCisgICAgICAgIHJlc3VsdENvb2tpZXMuYXBwZW5kKFFTdHJpbmc6OmZy
b21MYXRpbjEobmV0d29ya0Nvb2tpZS50b1Jhd0Zvcm0oUU5ldHdvcmtDb29raWU6Ok5hbWVBbmRW
YWx1ZU9ubHkpLmNvbnN0RGF0YSgpKSk7CisKKyAgICByZXR1cm4gcmVzdWx0Q29va2llcy5qb2lu
KFFMYXRpbjFTdHJpbmcoIjsgIikpOworfQorCitib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERv
Y3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5l
dHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+
Y29va2llSmFyKCk7Cit9CisKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICAvLyBGSVhNRTog
Tm90IHlldCBpbXBsZW1lbnRlZAorICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKKyAgICByZXR1cm4g
ZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKK30KKwordm9pZCBkZWxldGVD
b29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3sKKyAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorfQorCit2b2lkIGdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIFNoYXJlZENvb2tp
ZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CisgICAgaWYgKGphcikK
KyAgICAgICAgamFyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOworfQorCit2
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQorewor
ICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7
CisgICAgaWYgKGphcikKKyAgICAgICAgamFyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWUoaG9z
dG5hbWUpOworfQorCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQoreworICAgIFNoYXJlZENvb2tp
ZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CisgICAgaWYgKGphcikK
KyAgICAgICAgamFyLT5kZWxldGVBbGxDb29raWVzKCk7Cit9CisKK1NoYXJlZENvb2tpZUphclF0
KiBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCkKK3sKKyAgICByZXR1cm4gc19zaGFyZWRDb29r
aWVKYXJRdDsKK30KKworU2hhcmVkQ29va2llSmFyUXQqIFNoYXJlZENvb2tpZUphclF0OjpjcmVh
dGUoY29uc3QgU3RyaW5nJiBjb29raWVTdG9yYWdlRGlyZWN0b3J5KQoreworICAgIGlmICghc19z
aGFyZWRDb29raWVKYXJRdCkKKyAgICAgICAgc19zaGFyZWRDb29raWVKYXJRdCA9IG5ldyBTaGFy
ZWRDb29raWVKYXJRdChjb29raWVTdG9yYWdlRGlyZWN0b3J5KTsKKworICAgIHJldHVybiBzX3No
YXJlZENvb2tpZUphclF0OworfQorCit2b2lkIFNoYXJlZENvb2tpZUphclF0OjpkZXN0cm95KCkK
K3sKKyAgICBkZWxldGUgc19zaGFyZWRDb29raWVKYXJRdDsKKyAgICBzX3NoYXJlZENvb2tpZUph
clF0ID0gMDsKK30KKwordm9pZCBTaGFyZWRDb29raWVKYXJRdDo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgUUxpc3Q8UU5ldHdvcmtD
b29raWU+IGNvb2tpZXMgPSBhbGxDb29raWVzKCk7CisgICAgZm9yZWFjaCAoY29uc3QgUU5ldHdv
cmtDb29raWUmIG5ldHdvcmtDb29raWUsIGNvb2tpZXMpCisgICAgICAgIGhvc3RuYW1lcy5hZGQo
bmV0d29ya0Nvb2tpZS5kb21haW4oKSk7Cit9CisKK2Jvb2wgU2hhcmVkQ29va2llSmFyUXQ6OmRl
bGV0ZUNvb2tpZShjb25zdCBRTmV0d29ya0Nvb2tpZSYgY29va2llKQoreworICAgIGlmICghUU5l
dHdvcmtDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb29raWUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKKyAgICBzcWxRdWVyeS5w
cmVwYXJlKFFMYXRpbjFTdHJpbmcoIkRFTEVURSBGUk9NIGNvb2tpZXMgV0hFUkUgY29va2llSWQ9
OmNvb2tpZUlkdmFsdWUiKSk7CisgICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRpbjFTdHJpbmco
Ijpjb29raWVJZHZhbHVlIiksIGNvb2tpZS5kb21haW4oKS5hcHBlbmQoUUxhdGluMVN0cmluZyhj
b29raWUubmFtZSgpKSkpOworICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFNoYXJlZENvb2tpZUphclF0OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0g
YWxsQ29va2llcygpOworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgaXQgPSBj
b29raWVzLmJlZ2luKCk7CisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJdGVyYXRvciBlbmQg
PSBjb29raWVzLmVuZCgpOworICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKKyAg
ICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIkRFTEVURSBGUk9NIGNvb2tpZXMgV0hF
UkUgY29va2llSWQ9OmNvb2tpZUlkdmFsdWUiKSk7CisgICAgd2hpbGUgKGl0ICE9IGVuZCkgewor
ICAgICAgICBpZiAoaXQtPmRvbWFpbigpID09IFFTdHJpbmcoaG9zdG5hbWUpKSB7CisgICAgICAg
ICAgICBzcWxRdWVyeS5iaW5kVmFsdWUoUUxhdGluMVN0cmluZygiOmNvb2tpZUlkdmFsdWUiKSwg
aXQtPmRvbWFpbigpLmFwcGVuZChRTGF0aW4xU3RyaW5nKGl0LT5uYW1lKCkpKSk7CisgICAgICAg
ICAgICBzcWxRdWVyeS5leGVjKCk7CisgICAgICAgICAgICBpdCA9IGNvb2tpZXMuZXJhc2UoaXQp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGl0Kys7CisgICAgfQorICAgIHNldEFsbENv
b2tpZXMoY29va2llcyk7Cit9CisKK3ZvaWQgU2hhcmVkQ29va2llSmFyUXQ6OmRlbGV0ZUFsbENv
b2tpZXMoKQoreworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5LnBy
ZXBhcmUoUUxhdGluMVN0cmluZygiREVMRVRFICogRlJPTSBjb29raWVzIikpOworICAgIHNxbFF1
ZXJ5LmV4ZWMoKTsKKyAgICBzZXRBbGxDb29raWVzKFFMaXN0PFFOZXR3b3JrQ29va2llPigpKTsK
K30KKworU2hhcmVkQ29va2llSmFyUXQ6OlNoYXJlZENvb2tpZUphclF0KGNvbnN0IFN0cmluZyYg
Y29va2llU3RvcmFnZURpcmVjdG9yeSkKK3sKKyAgICBtX2RhdGFiYXNlID0gUVNxbERhdGFiYXNl
OjphZGREYXRhYmFzZShRTGF0aW4xU3RyaW5nKCJRU1FMSVRFIikpOworICAgIGNvbnN0IFFTdHJp
bmcgY29va2llU3RvcmFnZVBhdGggPSBjb29raWVTdG9yYWdlRGlyZWN0b3J5OworICAgIGNvbnN0
IFFTdHJpbmcgZGF0YUJhc2VOYW1lID0gY29va2llU3RvcmFnZVBhdGggKyBRTGF0aW4xU3RyaW5n
KCIvY29va2llcy5kYiIpOworICAgIG1fZGF0YWJhc2Uuc2V0RGF0YWJhc2VOYW1lKGRhdGFCYXNl
TmFtZSk7CisgICAgZW5zdXJlRGF0YWJhc2VUYWJsZSgpOworICAgIGxvYWRDb29raWVzKCk7Cit9
CisKK1NoYXJlZENvb2tpZUphclF0Ojp+U2hhcmVkQ29va2llSmFyUXQoKQoreworICAgIG1fZGF0
YWJhc2UuY2xvc2UoKTsKK30KKworYm9vbCBTaGFyZWRDb29raWVKYXJRdDo6c2V0Q29va2llc0Zy
b21VcmwoY29uc3QgUUxpc3Q8UU5ldHdvcmtDb29raWU+JiBjb29raWVMaXN0LCBjb25zdCBRVXJs
JiB1cmwpCit7CisgICAgaWYgKCFRTmV0d29ya0Nvb2tpZUphcjo6c2V0Q29va2llc0Zyb21Vcmwo
Y29va2llTGlzdCwgdXJsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBRU3FsUXVlcnkg
c3FsUXVlcnkobV9kYXRhYmFzZSk7CisgICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5n
KCJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIGNvb2tpZXMgKGNvb2tpZUlkLCBjb29raWUpIFZBTFVF
UyAoOmNvb2tpZUlkdmFsdWUsIDpjb29raWV2YWx1ZSkiKSk7CisgICAgUVZhcmlhbnRMaXN0IGNv
b2tpZXNJZHM7CisgICAgUVZhcmlhbnRMaXN0IGNvb2tpZXNWYWx1ZXM7CisgICAgZm9yZWFjaCAo
Y29uc3QgUU5ldHdvcmtDb29raWUgJmNvb2tpZSwgY29va2llc0ZvclVybCh1cmwpKSB7CisgICAg
ICAgIGlmIChjb29raWUuaXNTZXNzaW9uQ29va2llKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgY29va2llc0lkcy5hcHBlbmQoY29va2llLmRvbWFpbigpLmFwcGVuZChRTGF0aW4x
U3RyaW5nKGNvb2tpZS5uYW1lKCkpKSk7CisgICAgICAgIGNvb2tpZXNWYWx1ZXMuYXBwZW5kKGNv
b2tpZS50b1Jhd0Zvcm0oKSk7CisgICAgfQorICAgIHNxbFF1ZXJ5LmJpbmRWYWx1ZShRTGF0aW4x
U3RyaW5nKCI6Y29va2llSWR2YWx1ZSIpLCBjb29raWVzSWRzKTsKKyAgICBzcWxRdWVyeS5iaW5k
VmFsdWUoUUxhdGluMVN0cmluZygiOmNvb2tpZXZhbHVlIiksIGNvb2tpZXNWYWx1ZXMpOworICAg
IHNxbFF1ZXJ5LmV4ZWNCYXRjaCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNoYXJl
ZENvb2tpZUphclF0OjplbnN1cmVEYXRhYmFzZVRhYmxlKCkKK3sKKyAgICBpZiAoIW1fZGF0YWJh
c2Uub3BlbigpKSB7CisgICAgICAgIHFXYXJuaW5nKCJDYW4ndCBvcGVuIGNvb2tpZSBkYXRhYmFz
ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fZGF0YWJhc2UuZXhlYyhRTGF0aW4x
U3RyaW5nKCJQUkFHTUEgc3luY2hyb25vdXM9T0ZGIikpOworCisgICAgUVNxbFF1ZXJ5IHNxbFF1
ZXJ5KG1fZGF0YWJhc2UpOworICAgIHNxbFF1ZXJ5LnByZXBhcmUoUUxhdGluMVN0cmluZygiQ1JF
QVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY29va2llcyAoY29va2llSWQgVkFSQ0hBUiBQUklNQVJZ
IEtFWSwgY29va2llIEJMT0IpOyIpKTsKKyAgICBzcWxRdWVyeS5leGVjKCk7Cit9CisKK3ZvaWQg
U2hhcmVkQ29va2llSmFyUXQ6OmxvYWRDb29raWVzKCkKK3sKKyAgICBpZiAoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBj
b29raWVzOworICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKKyAgICBzcWxRdWVy
eS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIlNFTEVDVCBjb29raWUgRlJPTSBjb29raWVzIikpOwor
ICAgIHNxbFF1ZXJ5LmV4ZWMoKTsKKyAgICB3aGlsZSAoc3FsUXVlcnkubmV4dCgpKQorICAgICAg
ICBjb29raWVzLmFwcGVuZChRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKHNxbFF1ZXJ5LnZh
bHVlKDApLnRvQnl0ZUFycmF5KCkpKTsKKyAgICBzZXRBbGxDb29raWVzKGNvb2tpZXMpOworfQor
CisjaW5jbHVkZSAibW9jX0Nvb2tpZUphclF0LmNwcCIKKworfQorCisvLyB2aW06IHRzPTQgc3c9
NCBldApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Db29raWVKYXJR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9D
b29raWVKYXJRdC5jcHAJKHJldmlzaW9uIDEzMzkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiAr
MzAsOSBAQAogI2luY2x1ZGUgIkNvb2tpZUphclF0LmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIK
LSNpbmNsdWRlICJDb29raWVKYXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAj
aW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUph
ci5oIgogI2luY2x1ZGUgIlRoaXJkUGFydHlDb29raWVzUXQuaCIKICNpbmNsdWRlIDxRRGF0ZVRp
bWU+CiAjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgpAQCAtNDksMzAgKzQ2LDE0IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFNoYXJlZENvb2tpZUphclF0KiBzX3NoYXJl
ZENvb2tpZUphclF0ID0gMDsKIAotc3RhdGljIE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5n
Q29udGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIHNldENvb2tpZXNGcm9tRE9N
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKCFkb2N1bWVudCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7
Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRnJhbWVMb2FkZXIqIGxv
YWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIGxvYWRlci0+bmV0d29ya2luZ0NvbnRleHQoKTsKLX0KLQotdm9pZCBz
ZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2lu
Z0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdl
cigpLT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dCA/
IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpIDogU2hhcmVkQ29v
a2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmICghamFyKQogICAgICAgICByZXR1cm47CiAKICAg
ICBRVXJsIHVybEZvckNvb2tpZXModXJsKTsKLSAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9jdW1l
bnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIFFVcmwgZmlyc3RQYXJ0eVVybChmaXJz
dFBhcnR5KTsKICAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKGNvbnRleHQs
IHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQogICAgICAgICByZXR1cm47CiAKQEAgLTg4
LDE1ICs2OSwxNCBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAg
ICAgamFyLT5zZXRDb29raWVzRnJvbVVybChjb29raWVzLCB1cmxGb3JDb29raWVzKTsKIH0KIAot
U3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwp
CitTdHJpbmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29u
dGV4dCkKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvbnRleHQtPm5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpIDogU2hhcmVkQ29va2llSmFyUXQ6OnNo
YXJlZCgpOworICAgIGlmICghamFyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5l
dHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNv
b2tpZUphcigpOwogCiAgICAgUVVybCB1cmxGb3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJz
dFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICBRVXJsIGZp
cnN0UGFydHlVcmwoZmlyc3RQYXJ0eSk7CiAgICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5
UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCkBAIC0xMTQsMTIgKzk0LDExIEBAIFN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwKICAgICByZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFM
YXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMICZ1cmwpCitTdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEtVUkwgJnVybCkKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5l
dHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgUU5ldHdv
cmtDb29raWVKYXIqIGphciA9IGNvbnRleHQgPyBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdl
cigpLT5jb29raWVKYXIoKSA6IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKKyAgICBpZiAo
IWphcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBq
YXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIAogICAg
IFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKFFVcmwo
dXJsKSk7CiAgICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgpKQpAQCAtMTMyLDQyICsxMTEsNDMgQEAg
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiByZXN1
bHRDb29raWVzLmpvaW4oUUxhdGluMVN0cmluZygiOyAiKSk7CiB9CiAKLWJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorYm9vbCBjb29raWVzRW5hYmxlZChOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFn
ZXIoKS0+Y29va2llSmFyKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQg
PyBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKSA6IFNoYXJlZENv
b2tpZUphclF0OjpzaGFyZWQoKTsKKyAgICByZXR1cm4gISFqYXI7CiB9CiAKLWJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3
Q29va2llcykKK2Jvb2wgZ2V0UmF3Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtV
UkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90IHll
dCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFsc2U7
IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWUo
Y29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgZGVsZXRl
Q29va2llKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCiB7
CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0bmFt
ZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgZ2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIEhhc2hTZXQ8U3RyaW5n
PiYgaG9zdG5hbWVzKQogeworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgIWNvbnRleHQpOyAv
LyBOb3QgeWV0IGltcGxlbWVudGVkIGZvciBjb29raWUgamFycyBvdGhlciB0aGFuIHRoZSBzaGFy
ZWQgb25lLgogICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6
c2hhcmVkKCk7CiAgICAgaWYgKGphcikKICAgICAgICAgamFyLT5nZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhob3N0bmFtZXMpOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CisgICAgQVNT
RVJUX1VOVVNFRChjb250ZXh0LCAhY29udGV4dCk7IC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9y
IGNvb2tpZSBqYXJzIG90aGVyIHRoYW4gdGhlIHNoYXJlZCBvbmUuCiAgICAgU2hhcmVkQ29va2ll
SmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKICAgICBpZiAoamFyKQog
ICAgICAgICBqYXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7CiB9CiAKLXZv
aWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQpCiB7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCAhY29udGV4dCk7
IC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIGNvb2tpZSBqYXJzIG90aGVyIHRoYW4gdGhlIHNo
YXJlZCBvbmUuCiAgICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0
OjpzaGFyZWQoKTsKICAgICBpZiAoamFyKQogICAgICAgICBqYXItPmRlbGV0ZUFsbENvb2tpZXMo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvQ29va2llSmFyUXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L0Nvb2tp
ZUphclF0LmgJKHJldmlzaW9uIDEzMzkyNikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvQ29va2llSmFyUXQuaDoxMzM5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3F0L0Nvb2tpZUphclF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgQ29va2llSmFyUXRfaAorI2RlZmluZSBDb29raWVKYXJR
dF9oCisKKyNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KKyNpbmNsdWRlIDxRdE5ldHdvcmsvUU5l
dHdvcmtDb29raWVKYXI+CisjaW5jbHVkZSA8UXRTcWwvUVNxbERhdGFiYXNlPgorCisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRDb29raWVKYXJRdCA6IHB1YmxpYyBRTmV0
d29ya0Nvb2tpZUphciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2hhcmVk
Q29va2llSmFyUXQqIHNoYXJlZCgpOworICAgIHN0YXRpYyBTaGFyZWRDb29raWVKYXJRdCogY3Jl
YXRlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgZGVzdHJveSgpOworCisgICAgdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mKTsKKyAgICBib29sIGRlbGV0ZUNv
b2tpZShjb25zdCBRTmV0d29ya0Nvb2tpZSYpOworICAgIHZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgZGVsZXRlQWxsQ29va2llcygpOworICAg
IGJvb2wgc2V0Q29va2llc0Zyb21VcmwoY29uc3QgUUxpc3Q8UU5ldHdvcmtDb29raWU+JiwgY29u
c3QgUVVybCYpOworICAgIHZvaWQgbG9hZENvb2tpZXMoKTsKKworcHJpdmF0ZToKKyAgICBTaGFy
ZWRDb29raWVKYXJRdChjb25zdCBTdHJpbmcmKTsKKyAgICB+U2hhcmVkQ29va2llSmFyUXQoKTsK
KyAgICB2b2lkIGVuc3VyZURhdGFiYXNlVGFibGUoKTsKKworICAgIFFTcWxEYXRhYmFzZSBtX2Rh
dGFiYXNlOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAJKHJldmlzaW9uIDEz
Mzk3MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJT
b3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMzEgKzIyLDE4IEBACiAjaW5jbHVkZSAiQ29v
a2llSmFyU291cC5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiR093blB0clNvdXAuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTmV0d29ya2lu
Z0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
U291cENvb2tpZUphciogY29va2llSmFyRm9yRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50KQorc3RhdGljIFNvdXBDb29raWVKYXIqIGNvb2tpZUphckZvckNvbnRleHQoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgY29uc3QgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29uc3QgRnJhbWVMb2FkZXIqIGxvYWRl
ciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgY29uc3QgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBsb2FkZXItPm5ldHdvcmtp
bmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKICAgICBy
ZXR1cm4gU09VUF9DT09LSUVfSkFSKHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShjb250ZXh0LT5z
b3VwU2Vzc2lvbigpLCBTT1VQX1RZUEVfQ09PS0lFX0pBUikpOwogfQogCkBAIC04NiwxNCArNzMs
MTQgQEAgc3RhdGljIGlubGluZSBib29sIGh0dHBPbmx5Q29va2llRXhpc3RzKAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBzZXRDb29raWVzRnJvbURPTShO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIFNvdXBDb29raWVKYXIqIGph
ciA9IGNvb2tpZUphckZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBjb250ZXh0ID8gY29va2llSmFyRm9yQ29udGV4dChjb250ZXh0KSA6IHNvdXBDb29raWVK
YXIoKTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgR093blB0cjxTb3Vw
VVJJPiBvcmlnaW4oc291cF91cmlfbmV3KHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Ci0g
ICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBfdXJpX25ldyhkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgR093blB0
cjxTb3VwVVJJPiBmaXJzdFBhcnR5VVJJKHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5LnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpKTsKIAogICAgIC8vIEdldCBleGlzdGluZyBjb29raWVzIGZvciB0aGlz
IG9yaWdpbi4KICAgICBHU0xpc3QqIGV4aXN0aW5nQ29va2llcyA9IHNvdXBfY29va2llX2phcl9n
ZXRfY29va2llX2xpc3QoamFyLCBvcmlnaW4uZ2V0KCksIFRSVUUpOwpAQCAtMTE0LDE1ICsxMDEs
MTUgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgICAgICBp
ZiAoaHR0cE9ubHlDb29raWVFeGlzdHMoZXhpc3RpbmdDb29raWVzLCBzb3VwX2Nvb2tpZV9nZXRf
bmFtZShjb29raWUuZ2V0KCkpLCBzb3VwX2Nvb2tpZV9nZXRfcGF0aChjb29raWUuZ2V0KCkpKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHNvdXBfY29va2llX2phcl9hZGRfY29v
a2llX3dpdGhfZmlyc3RfcGFydHkoamFyLCBmaXJzdFBhcnR5LmdldCgpLCBjb29raWUucmVsZWFz
ZSgpKTsKKyAgICAgICAgc291cF9jb29raWVfamFyX2FkZF9jb29raWVfd2l0aF9maXJzdF9wYXJ0
eShqYXIsIGZpcnN0UGFydHlVUkkuZ2V0KCksIGNvb2tpZS5yZWxlYXNlKCkpOwogICAgIH0KIAog
ICAgIHNvdXBfY29va2llc19mcmVlKGV4aXN0aW5nQ29va2llcyk7CiB9CiAKLXN0YXRpYyBTdHJp
bmcgY29va2llc0ZvckRvY3VtZW50KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBib29sIGZvckhUVFBIZWFkZXIpCitzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JDb250
ZXh0KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgZm9y
SFRUUEhlYWRlcikKIHsKLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1
bWVudChkb2N1bWVudCk7CisgICAgU291cENvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvb2tp
ZUphckZvckNvbnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMTMxLDI1ICsxMTgsMjUgQEAgc3RhdGlj
IFN0cmluZyBjb29raWVzRm9yRG9jdW1lbnQoY29uc3QgRAogICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KGNvb2tpZXMuZ2V0KCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVzRm9yRE9NKE5ldHdv
cmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgdXJsKQogewot
ICAgIHJldHVybiBjb29raWVzRm9yRG9jdW1lbnQoZG9jdW1lbnQsIHVybCwgZmFsc2UpOworICAg
IHJldHVybiBjb29raWVzRm9yQ29udGV4dChjb250ZXh0LCB1cmwsIGZhbHNlKTsKIH0KIAotU3Ry
aW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgcmV0
dXJuIGNvb2tpZXNGb3JEb2N1bWVudChkb2N1bWVudCwgdXJsLCB0cnVlKTsKKyAgICByZXR1cm4g
Y29va2llc0ZvckNvbnRleHQoY29udGV4dCwgdXJsLCB0cnVlKTsKIH0KIAotYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIGNvb2tpZXNFbmFibGVkKE5l
dHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiAhIWNvb2tpZUphckZvckRv
Y3VtZW50KGRvY3VtZW50KTsKKyAgICByZXR1cm4gISFjb29raWVKYXJGb3JDb250ZXh0KGNvbnRl
eHQpOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRSYXdD
b29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBT
b3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAg
U291cENvb2tpZUphciogamFyID0gY29udGV4dCA/IGNvb2tpZUphckZvckNvbnRleHQoY29udGV4
dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtMTcwLDkgKzE1Nyw5IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVu
dCogZG9jdW0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkK
K3ZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBj
b29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAgU291cENvb2tpZUphciogamFyID0g
Y29udGV4dCA/IGNvb2tpZUphckZvckNvbnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7
CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTkxLDkgKzE3OCw5IEBAIHZv
aWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWUKICAgICB9CiB9CiAKLXZvaWQg
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lk
IGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIg
PSBzb3VwQ29va2llSmFyKCk7CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gY29udGV4
dCA/IGNvb2tpZUphckZvckNvbnRleHQoY29udGV4dCkgOiBzb3VwQ29va2llSmFyKCk7CiAgICAg
R093blB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tp
ZUphcikpOwogICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRl
bSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgewogICAgICAgICBHT3duUHRyPFNvdXBDb29raWU+IGNv
b2tpZShzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkpOwpAQCAtMjAzLDEwICsx
OTAsMTAgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIH0K
IH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSkKK3ZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIENTdHJpbmcgaG9zdE5hbWVTdHJp
bmcgPSBob3N0bmFtZS51dGY4KCk7Ci0gICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc291
cENvb2tpZUphcigpOworICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IGNvbnRleHQgPyBj
b29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpIDogc291cENvb2tpZUphcigpOwogICAgIEdPd25Q
dHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIp
KTsKICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBn
X3NsaXN0X25leHQoaXRlbSkpIHsKICAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGlj
X2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwpAQCAtMjE2LDkgKzIwMyw5IEBAIHZvaWQg
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICB9CiB9CiAKLXZvaWQgZGVs
ZXRlQWxsQ29va2llcygpCit2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc291cENvb2tpZUph
cigpOworICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IGNvbnRleHQgPyBjb29raWVKYXJG
b3JDb250ZXh0KGNvbnRleHQpIDogc291cENvb2tpZUphcigpOwogICAgIEdPd25QdHI8R1NMaXN0
PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpKTsKICAgICBm
b3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25l
eHQoaXRlbSkpIHsKICAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291
cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL0Nvb2tpZUphclNvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5oCShyZXZpc2lvbiAxMzM5NzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaWZuZGVmIENvb2tpZUphclNvdXBfaAog
I2RlZmluZSBDb29raWVKYXJTb3VwX2gKIAotI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1
ZGUgPGxpYnNvdXAvc291cC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAJ
KHJldmlzaW9uIDEzMzk3MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2lu
L0Nvb2tpZUphcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMCBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAi
S1VSTC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUu
aCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8V2luaW5ldC5oPgpAQCAtMzYsMTYg
KzM1LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERvY3Vt
ZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3ZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIC8vIEZJWE1FOiBE
ZWFsIHdpdGggZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkuCisgICAgLy8gRklYTUU6
IERlYWwgd2l0aCBmaXJzdFBhcnR5IGFyZ3VtZW50LgogICAgIFN0cmluZyBzdHIgPSB1cmwuc3Ry
aW5nKCk7CiAgICAgU3RyaW5nIHZhbCA9IHZhbHVlOwogICAgIEludGVybmV0U2V0Q29va2llKHN0
ci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2YWwuY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAv
KmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBjb29raWVzRm9yRE9NKE5ldHdv
cmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHVybCkKIHsKKyAgICAvLyBG
SVhNRTogRGVhbCB3aXRoIGZpcnN0UGFydHkgYXJndW1lbnQuCisKICAgICBTdHJpbmcgc3RyID0g
dXJsLnN0cmluZygpOwogCiAgICAgRFdPUkQgY291bnQgPSAwOwpAQCAtNjMsNDAgKzY0LDQwIEBA
IFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4gU3Ry
aW5nOjphZG9wdChidWZmZXIpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBL
VVJMJiB1cmwpCiB7CiAgICAgLy8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llCi0gICAg
cmV0dXJuIGNvb2tpZXMoZG9jdW1lbnQsIHVybCk7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JET00o
Y29udGV4dCwgdXJsKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCog
Lypkb2N1bWVudCovKQorYm9vbCBjb29raWVzRW5hYmxlZChOZXR3b3JraW5nQ29udGV4dCopCiB7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgZ2V0UmF3
Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYg
cmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJh
d0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4g
aW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250
ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29y
a2luZ0NvbnRleHQqLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKICAgICAvLyBGSVhN
RTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2
b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqKQogewogICAgIC8vIEZJWE1F
OiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9Db29raWVKYXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvQ29va2llSmFyUXQuY3BwCShyZXZpc2lvbiAxMzM5NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2Rl
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29raWVKYXJRdC5oIgotCi0jaW5jbHVkZSAi
Q29va2llLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAi
S1VSTC5oIgotI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiVGhpcmRQ
YXJ0eUNvb2tpZXNRdC5oIgotI2luY2x1ZGUgPFFEYXRlVGltZT4KLSNpbmNsdWRlIDxRTmV0d29y
a0FjY2Vzc01hbmFnZXI+Ci0jaW5jbHVkZSA8UU5ldHdvcmtDb29raWU+Ci0jaW5jbHVkZSA8UVNx
bFF1ZXJ5PgotI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgotI2luY2x1ZGUgPFFWYXJpYW50PgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBTaGFyZWRDb29raWVKYXJRdCogc19zaGFyZWRDb29raWVKYXJRdCA9IDA7Ci0KLXN0YXRp
YyBOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50KQotewotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiAwOwotICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7Ci0g
ICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBsb2FkZXItPm5l
dHdvcmtpbmdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBOZXR3b3Jr
aW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBp
ZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFy
ID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7Ci0gICAgaWYg
KCFqYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwot
ICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7
Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JD
b29raWVzLCBmaXJzdFBhcnR5VXJsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUUxpc3Q8UU5l
dHdvcmtDb29raWU+IGNvb2tpZXMgPSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJp
bmcodmFsdWUpLnRvTGF0aW4xKCkpOwotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0
b3IgaXQgPSBjb29raWVzLmJlZ2luKCk7Ci0gICAgd2hpbGUgKGl0ICE9IGNvb2tpZXMuZW5kKCkp
IHsKLSAgICAgICAgaWYgKGl0LT5pc0h0dHBPbmx5KCkpCi0gICAgICAgICAgICBpdCA9IGNvb2tp
ZXMuZXJhc2UoaXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICArK2l0OwotICAgIH0KLQot
ICAgIGphci0+c2V0Q29va2llc0Zyb21VcmwoY29va2llcywgdXJsRm9yQ29va2llcyk7Ci19Ci0K
LVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
KQotewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQo
ZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdl
cigpLT5jb29raWVKYXIoKTsKLQotICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFV
cmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAg
aWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVz
LCBmaXJzdFBhcnR5VXJsKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgUUxpc3Q8
UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwodXJsRm9yQ29va2ll
cyk7Ci0gICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0KLSAgICBRU3RyaW5nTGlzdCByZXN1bHRDb29raWVzOwotICAgIGZvcmVhY2ggKGNvbnN0IFFO
ZXR3b3JrQ29va2llJiBuZXR3b3JrQ29va2llLCBjb29raWVzKSB7Ci0gICAgICAgIGlmIChuZXR3
b3JrQ29va2llLmlzSHR0cE9ubHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBy
ZXN1bHRDb29raWVzLmFwcGVuZChRU3RyaW5nOjpmcm9tTGF0aW4xKG5ldHdvcmtDb29raWUudG9S
YXdGb3JtKFFOZXR3b3JrQ29va2llOjpOYW1lQW5kVmFsdWVPbmx5KS5jb25zdERhdGEoKSkpOwot
ICAgIH0KLQotICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxhdGluMVN0cmluZygiOyAi
KSk7Ci19Ci0KLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRl
eHQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFy
ID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7Ci0KLSAgICBR
TGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVybChRVXJsKHVy
bCkpOwotICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotCi0gICAgUVN0cmluZ0xpc3QgcmVzdWx0Q29va2llczsKLSAgICBmb3JlYWNoIChRTmV0d29y
a0Nvb2tpZSBuZXR3b3JrQ29va2llLCBjb29raWVzKQotICAgICAgICByZXN1bHRDb29raWVzLmFw
cGVuZChRU3RyaW5nOjpmcm9tTGF0aW4xKG5ldHdvcmtDb29raWUudG9SYXdGb3JtKFFOZXR3b3Jr
Q29va2llOjpOYW1lQW5kVmFsdWVPbmx5KS5jb25zdERhdGEoKSkpOwotCi0gICAgcmV0dXJuIHJl
c3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3RyaW5nKCI7ICIpKTsKLX0KLQotYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRl
eHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwotfQotCi1ib29sIGdldFJhd0Nvb2tpZXMoY29u
c3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17
Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLSAgICByYXdDb29raWVzLmNsZWFy
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCi19
Ci0KLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLX0KLQotdm9p
ZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsK
LSAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgp
OwotICAgIGlmIChqYXIpCi0gICAgICAgIGphci0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9z
dG5hbWVzKTsKLX0KLQotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5n
JiBob3N0bmFtZSkKLXsKLSAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2ll
SmFyUXQ6OnNoYXJlZCgpOwotICAgIGlmIChqYXIpCi0gICAgICAgIGphci0+ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKLXsK
LSAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgp
OwotICAgIGlmIChqYXIpCi0gICAgICAgIGphci0+ZGVsZXRlQWxsQ29va2llcygpOwotfQotCi1T
aGFyZWRDb29raWVKYXJRdCogU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpCi17Ci0gICAgcmV0
dXJuIHNfc2hhcmVkQ29va2llSmFyUXQ7Ci19Ci0KLVNoYXJlZENvb2tpZUphclF0KiBTaGFyZWRD
b29raWVKYXJRdDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgY29va2llU3RvcmFnZURpcmVjdG9yeSkK
LXsKLSAgICBpZiAoIXNfc2hhcmVkQ29va2llSmFyUXQpCi0gICAgICAgIHNfc2hhcmVkQ29va2ll
SmFyUXQgPSBuZXcgU2hhcmVkQ29va2llSmFyUXQoY29va2llU3RvcmFnZURpcmVjdG9yeSk7Ci0K
LSAgICByZXR1cm4gc19zaGFyZWRDb29raWVKYXJRdDsKLX0KLQotdm9pZCBTaGFyZWRDb29raWVK
YXJRdDo6ZGVzdHJveSgpCi17Ci0gICAgZGVsZXRlIHNfc2hhcmVkQ29va2llSmFyUXQ7Ci0gICAg
c19zaGFyZWRDb29raWVKYXJRdCA9IDA7Ci19Ci0KLXZvaWQgU2hhcmVkQ29va2llSmFyUXQ6Omdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAg
IFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gYWxsQ29va2llcygpOwotICAgIGZvcmVh
Y2ggKGNvbnN0IFFOZXR3b3JrQ29va2llJiBuZXR3b3JrQ29va2llLCBjb29raWVzKQotICAgICAg
ICBob3N0bmFtZXMuYWRkKG5ldHdvcmtDb29raWUuZG9tYWluKCkpOwotfQotCi1ib29sIFNoYXJl
ZENvb2tpZUphclF0OjpkZWxldGVDb29raWUoY29uc3QgUU5ldHdvcmtDb29raWUmIGNvb2tpZSkK
LXsKLSAgICBpZiAoIVFOZXR3b3JrQ29va2llSmFyOjpkZWxldGVDb29raWUoY29va2llKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFzZSk7
Ci0gICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJERUxFVEUgRlJPTSBjb29raWVz
IFdIRVJFIGNvb2tpZUlkPTpjb29raWVJZHZhbHVlIikpOwotICAgIHNxbFF1ZXJ5LmJpbmRWYWx1
ZShRTGF0aW4xU3RyaW5nKCI6Y29va2llSWR2YWx1ZSIpLCBjb29raWUuZG9tYWluKCkuYXBwZW5k
KFFMYXRpbjFTdHJpbmcoY29va2llLm5hbWUoKSkpKTsKLSAgICBzcWxRdWVyeS5leGVjKCk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCi17Ci0gICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRTGlzdDxRTmV0d29ya0Nv
b2tpZT4gY29va2llcyA9IGFsbENvb2tpZXMoKTsKLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46
Okl0ZXJhdG9yIGl0ID0gY29va2llcy5iZWdpbigpOwotICAgIFFMaXN0PFFOZXR3b3JrQ29va2ll
Pjo6SXRlcmF0b3IgZW5kID0gY29va2llcy5lbmQoKTsKLSAgICBRU3FsUXVlcnkgc3FsUXVlcnko
bV9kYXRhYmFzZSk7Ci0gICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJERUxFVEUg
RlJPTSBjb29raWVzIFdIRVJFIGNvb2tpZUlkPTpjb29raWVJZHZhbHVlIikpOwotICAgIHdoaWxl
IChpdCAhPSBlbmQpIHsKLSAgICAgICAgaWYgKGl0LT5kb21haW4oKSA9PSBRU3RyaW5nKGhvc3Ru
YW1lKSkgewotICAgICAgICAgICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRpbjFTdHJpbmcoIjpj
b29raWVJZHZhbHVlIiksIGl0LT5kb21haW4oKS5hcHBlbmQoUUxhdGluMVN0cmluZyhpdC0+bmFt
ZSgpKSkpOwotICAgICAgICAgICAgc3FsUXVlcnkuZXhlYygpOwotICAgICAgICAgICAgaXQgPSBj
b29raWVzLmVyYXNlKGl0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpdCsrOwotICAg
IH0KLSAgICBzZXRBbGxDb29raWVzKGNvb2tpZXMpOwotfQotCi12b2lkIFNoYXJlZENvb2tpZUph
clF0OjpkZWxldGVBbGxDb29raWVzKCkKLXsKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsK
LSAgICBzcWxRdWVyeS5wcmVwYXJlKFFMYXRpbjFTdHJpbmcoIkRFTEVURSAqIEZST00gY29va2ll
cyIpKTsKLSAgICBzcWxRdWVyeS5leGVjKCk7Ci0gICAgc2V0QWxsQ29va2llcyhRTGlzdDxRTmV0
d29ya0Nvb2tpZT4oKSk7Ci19Ci0KLVNoYXJlZENvb2tpZUphclF0OjpTaGFyZWRDb29raWVKYXJR
dChjb25zdCBTdHJpbmcmIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpCi17Ci0gICAgbV9kYXRhYmFz
ZSA9IFFTcWxEYXRhYmFzZTo6YWRkRGF0YWJhc2UoUUxhdGluMVN0cmluZygiUVNRTElURSIpKTsK
LSAgICBjb25zdCBRU3RyaW5nIGNvb2tpZVN0b3JhZ2VQYXRoID0gY29va2llU3RvcmFnZURpcmVj
dG9yeTsKLSAgICBjb25zdCBRU3RyaW5nIGRhdGFCYXNlTmFtZSA9IGNvb2tpZVN0b3JhZ2VQYXRo
ICsgUUxhdGluMVN0cmluZygiL2Nvb2tpZXMuZGIiKTsKLSAgICBtX2RhdGFiYXNlLnNldERhdGFi
YXNlTmFtZShkYXRhQmFzZU5hbWUpOwotICAgIGVuc3VyZURhdGFiYXNlVGFibGUoKTsKLSAgICBs
b2FkQ29va2llcygpOwotfQotCi1TaGFyZWRDb29raWVKYXJRdDo6flNoYXJlZENvb2tpZUphclF0
KCkKLXsKLSAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci19Ci0KLWJvb2wgU2hhcmVkQ29va2llSmFy
UXQ6OnNldENvb2tpZXNGcm9tVXJsKGNvbnN0IFFMaXN0PFFOZXR3b3JrQ29va2llPiYgY29va2ll
TGlzdCwgY29uc3QgUVVybCYgdXJsKQotewotICAgIGlmICghUU5ldHdvcmtDb29raWVKYXI6OnNl
dENvb2tpZXNGcm9tVXJsKGNvb2tpZUxpc3QsIHVybCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgUVNxbFF1ZXJ5IHNxbFF1ZXJ5KG1fZGF0YWJhc2UpOwotICAgIHNxbFF1ZXJ5LnByZXBh
cmUoUUxhdGluMVN0cmluZygiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBjb29raWVzIChjb29raWVJ
ZCwgY29va2llKSBWQUxVRVMgKDpjb29raWVJZHZhbHVlLCA6Y29va2lldmFsdWUpIikpOwotICAg
IFFWYXJpYW50TGlzdCBjb29raWVzSWRzOwotICAgIFFWYXJpYW50TGlzdCBjb29raWVzVmFsdWVz
OwotICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrQ29va2llICZjb29raWUsIGNvb2tpZXNGb3JV
cmwodXJsKSkgewotICAgICAgICBpZiAoY29va2llLmlzU2Vzc2lvbkNvb2tpZSgpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGNvb2tpZXNJZHMuYXBwZW5kKGNvb2tpZS5kb21haW4o
KS5hcHBlbmQoUUxhdGluMVN0cmluZyhjb29raWUubmFtZSgpKSkpOwotICAgICAgICBjb29raWVz
VmFsdWVzLmFwcGVuZChjb29raWUudG9SYXdGb3JtKCkpOwotICAgIH0KLSAgICBzcWxRdWVyeS5i
aW5kVmFsdWUoUUxhdGluMVN0cmluZygiOmNvb2tpZUlkdmFsdWUiKSwgY29va2llc0lkcyk7Ci0g
ICAgc3FsUXVlcnkuYmluZFZhbHVlKFFMYXRpbjFTdHJpbmcoIjpjb29raWV2YWx1ZSIpLCBjb29r
aWVzVmFsdWVzKTsKLSAgICBzcWxRdWVyeS5leGVjQmF0Y2goKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBTaGFyZWRDb29raWVKYXJRdDo6ZW5zdXJlRGF0YWJhc2VUYWJsZSgpCi17Ci0g
ICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oKSkgewotICAgICAgICBxV2FybmluZygiQ2FuJ3Qgb3Bl
biBjb29raWUgZGF0YWJhc2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2RhdGFi
YXNlLmV4ZWMoUUxhdGluMVN0cmluZygiUFJBR01BIHN5bmNocm9ub3VzPU9GRiIpKTsKLQotICAg
IFFTcWxRdWVyeSBzcWxRdWVyeShtX2RhdGFiYXNlKTsKLSAgICBzcWxRdWVyeS5wcmVwYXJlKFFM
YXRpbjFTdHJpbmcoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGNvb2tpZXMgKGNvb2tpZUlk
IFZBUkNIQVIgUFJJTUFSWSBLRVksIGNvb2tpZSBCTE9CKTsiKSk7Ci0gICAgc3FsUXVlcnkuZXhl
YygpOwotfQotCi12b2lkIFNoYXJlZENvb2tpZUphclF0Ojpsb2FkQ29va2llcygpCi17Ci0gICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRTGlzdDxR
TmV0d29ya0Nvb2tpZT4gY29va2llczsKLSAgICBRU3FsUXVlcnkgc3FsUXVlcnkobV9kYXRhYmFz
ZSk7Ci0gICAgc3FsUXVlcnkucHJlcGFyZShRTGF0aW4xU3RyaW5nKCJTRUxFQ1QgY29va2llIEZS
T00gY29va2llcyIpKTsKLSAgICBzcWxRdWVyeS5leGVjKCk7Ci0gICAgd2hpbGUgKHNxbFF1ZXJ5
Lm5leHQoKSkKLSAgICAgICAgY29va2llcy5hcHBlbmQoUU5ldHdvcmtDb29raWU6OnBhcnNlQ29v
a2llcyhzcWxRdWVyeS52YWx1ZSgwKS50b0J5dGVBcnJheSgpKSk7Ci0gICAgc2V0QWxsQ29va2ll
cyhjb29raWVzKTsKLX0KLQotI2luY2x1ZGUgIm1vY19Db29raWVKYXJRdC5jcHAiCi0KLX0KLQot
Ly8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nv
b2tpZUphclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29v
a2llSmFyUXQuaAkocmV2aXNpb24gMTMzOTcyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvQ29va2llSmFyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqCi0gKi8KLQotI2lmbmRlZiBDb29raWVKYXJRdF9oCi0jZGVmaW5lIENvb2tpZUphclF0X2gK
LQotI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgotI2luY2x1ZGUgPFF0TmV0d29yay9RTmV0d29y
a0Nvb2tpZUphcj4KLSNpbmNsdWRlIDxRdFNxbC9RU3FsRGF0YWJhc2U+Ci0KLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNoYXJlZENvb2tpZUphclF0IDogcHVibGljIFFOZXR3b3Jr
Q29va2llSmFyIHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAgIHN0YXRpYyBTaGFyZWRDb29r
aWVKYXJRdCogc2hhcmVkKCk7Ci0gICAgc3RhdGljIFNoYXJlZENvb2tpZUphclF0KiBjcmVhdGUo
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBkZXN0cm95KCk7Ci0KLSAgICB2b2lkIGdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYpOwotICAgIGJvb2wgZGVsZXRlQ29va2ll
KGNvbnN0IFFOZXR3b3JrQ29va2llJik7Ci0gICAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCk7Ci0gICAgYm9v
bCBzZXRDb29raWVzRnJvbVVybChjb25zdCBRTGlzdDxRTmV0d29ya0Nvb2tpZT4mLCBjb25zdCBR
VXJsJik7Ci0gICAgdm9pZCBsb2FkQ29va2llcygpOwotCi1wcml2YXRlOgotICAgIFNoYXJlZENv
b2tpZUphclF0KGNvbnN0IFN0cmluZyYpOwotICAgIH5TaGFyZWRDb29raWVKYXJRdCgpOwotICAg
IHZvaWQgZW5zdXJlRGF0YWJhc2VUYWJsZSgpOwotCi0gICAgUVNxbERhdGFiYXNlIG1fZGF0YWJh
c2U7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTMzOTcyKQor
KysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTItMTEtMDggIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQ29va2llSmFyIHVzZXMgRG9jdW1lbnQgY2xhc3MsIHdoaWNoIGlzIGEgbGF5ZXJpbmcg
dmlvbGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDE2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaDogRG9uJ3QgaW5jbHVkZSBDb29raWVKYXIu
aCwgaXRzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkuCisKIDIwMTItMTEtMDggIEt5dW5nVGFlIEtp
bSAgPGt0Zi5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW1dLMl0gVW51c2VkIHBhcmFtZXRl
cnMgb24gTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCShyZXZpc2lvbiAxMzM5NzIpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDYgQEAKICNpbmNsdWRlICJXS1Byb3RlY3Rpb25TcGFjZVR5cGVzLmgiCiAjaW5jbHVkZSAiV0tS
ZXNvdXJjZUNhY2hlTWFuYWdlci5oIgogI2luY2x1ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DcmVkZW50aWFs
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>