<?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>82670</bug_id>
          
          <creation_ts>2012-03-29 15:25:52 -0700</creation_ts>
          <short_desc>First step toward incremental Weak&lt;T&gt; finalization</short_desc>
          <delta_ts>2012-04-04 10:17:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>83139</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>gustavo</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>591632</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-29 15:25:52 -0700</bug_when>
    <thetext>First step toward incremental Weak&lt;T&gt; finalization</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591688</commentid>
    <comment_count>1</comment_count>
      <attachid>134688</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-29 16:23:27 -0700</bug_when>
    <thetext>Created attachment 134688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591695</commentid>
    <comment_count>2</comment_count>
      <attachid>134688</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-29 16:34:16 -0700</bug_when>
    <thetext>Comment on attachment 134688
Patch

Attachment 134688 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12240002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591702</commentid>
    <comment_count>3</comment_count>
      <attachid>134688</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-29 16:44:09 -0700</bug_when>
    <thetext>Comment on attachment 134688
Patch

Attachment 134688 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12248004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591703</commentid>
    <comment_count>4</comment_count>
      <attachid>134688</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-29 16:46:20 -0700</bug_when>
    <thetext>Comment on attachment 134688
Patch

Attachment 134688 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12248001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591712</commentid>
    <comment_count>5</comment_count>
      <attachid>134688</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-29 16:56:57 -0700</bug_when>
    <thetext>Comment on attachment 134688
Patch

Attachment 134688 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12249003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591724</commentid>
    <comment_count>6</comment_count>
      <attachid>134688</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-29 17:07:46 -0700</bug_when>
    <thetext>Comment on attachment 134688
Patch

Attachment 134688 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12255002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591784</commentid>
    <comment_count>7</comment_count>
      <attachid>134688</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-29 18:23:04 -0700</bug_when>
    <thetext>Comment on attachment 134688
Patch

Attachment 134688 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12267005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591833</commentid>
    <comment_count>8</comment_count>
      <attachid>134716</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-29 19:47:16 -0700</bug_when>
    <thetext>Created attachment 134716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591835</commentid>
    <comment_count>9</comment_count>
      <attachid>134716</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-29 19:55:21 -0700</bug_when>
    <thetext>Comment on attachment 134716
Patch

Attachment 134716 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12266035</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591841</commentid>
    <comment_count>10</comment_count>
      <attachid>134716</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-29 20:05:27 -0700</bug_when>
    <thetext>Comment on attachment 134716
Patch

Attachment 134716 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12291006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591842</commentid>
    <comment_count>11</comment_count>
      <attachid>134716</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-29 20:05:52 -0700</bug_when>
    <thetext>Comment on attachment 134716
Patch

Attachment 134716 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12266040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591844</commentid>
    <comment_count>12</comment_count>
      <attachid>134716</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-29 20:13:06 -0700</bug_when>
    <thetext>Comment on attachment 134716
Patch

Attachment 134716 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12265025</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591848</commentid>
    <comment_count>13</comment_count>
      <attachid>134716</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-29 20:38:12 -0700</bug_when>
    <thetext>Comment on attachment 134716
Patch

Attachment 134716 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12266034</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591864</commentid>
    <comment_count>14</comment_count>
      <attachid>134716</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-29 21:30:49 -0700</bug_when>
    <thetext>Comment on attachment 134716
Patch

Attachment 134716 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12265049</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592293</commentid>
    <comment_count>15</comment_count>
      <attachid>134838</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-30 10:55:11 -0700</bug_when>
    <thetext>Created attachment 134838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592313</commentid>
    <comment_count>16</comment_count>
      <attachid>134838</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-30 11:07:47 -0700</bug_when>
    <thetext>Comment on attachment 134838
Patch

Attachment 134838 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12266406</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592318</commentid>
    <comment_count>17</comment_count>
      <attachid>134838</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-30 11:12:04 -0700</bug_when>
    <thetext>Comment on attachment 134838
Patch

Attachment 134838 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12265352</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592327</commentid>
    <comment_count>18</comment_count>
      <attachid>134838</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-30 11:19:21 -0700</bug_when>
    <thetext>Comment on attachment 134838
Patch

Attachment 134838 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12265351</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592335</commentid>
    <comment_count>19</comment_count>
      <attachid>134838</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-30 11:24:32 -0700</bug_when>
    <thetext>Comment on attachment 134838
Patch

Attachment 134838 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12267337</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592345</commentid>
    <comment_count>20</comment_count>
      <attachid>134848</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-30 11:38:52 -0700</bug_when>
    <thetext>Created attachment 134848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592374</commentid>
    <comment_count>21</comment_count>
      <attachid>134848</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-30 12:06:30 -0700</bug_when>
    <thetext>Comment on attachment 134848
Patch

Attachment 134848 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12288352</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592377</commentid>
    <comment_count>22</comment_count>
      <attachid>134848</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-30 12:11:40 -0700</bug_when>
    <thetext>Comment on attachment 134848
Patch

Attachment 134848 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12253385</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592387</commentid>
    <comment_count>23</comment_count>
      <attachid>134848</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-30 12:16:23 -0700</bug_when>
    <thetext>Comment on attachment 134848
Patch

Attachment 134848 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12253378</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592392</commentid>
    <comment_count>24</comment_count>
      <attachid>134848</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-30 12:20:34 -0700</bug_when>
    <thetext>Comment on attachment 134848
Patch

Attachment 134848 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12288357</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592533</commentid>
    <comment_count>25</comment_count>
      <attachid>134896</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-30 15:10:13 -0700</bug_when>
    <thetext>Created attachment 134896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592573</commentid>
    <comment_count>26</comment_count>
      <attachid>134896</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-30 15:42:49 -0700</bug_when>
    <thetext>Comment on attachment 134896
Patch

Attachment 134896 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12288470</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592577</commentid>
    <comment_count>27</comment_count>
      <attachid>134896</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-30 15:44:10 -0700</bug_when>
    <thetext>Comment on attachment 134896
Patch

Attachment 134896 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12253490</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592622</commentid>
    <comment_count>28</comment_count>
      <attachid>134896</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-30 16:07:29 -0700</bug_when>
    <thetext>Comment on attachment 134896
Patch

Attachment 134896 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12291472</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592956</commentid>
    <comment_count>29</comment_count>
      <attachid>134982</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-31 18:18:39 -0700</bug_when>
    <thetext>Created attachment 134982
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592960</commentid>
    <comment_count>30</comment_count>
      <attachid>134982</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-31 19:23:50 -0700</bug_when>
    <thetext>Comment on attachment 134982
Patch

Attachment 134982 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12291937</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592961</commentid>
    <comment_count>31</comment_count>
      <attachid>134982</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-31 19:26:49 -0700</bug_when>
    <thetext>Comment on attachment 134982
Patch

Attachment 134982 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12308021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592962</commentid>
    <comment_count>32</comment_count>
      <attachid>134982</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-31 19:30:17 -0700</bug_when>
    <thetext>Comment on attachment 134982
Patch

Attachment 134982 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12288940</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592967</commentid>
    <comment_count>33</comment_count>
      <attachid>134982</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-31 20:02:02 -0700</bug_when>
    <thetext>Comment on attachment 134982
Patch

Attachment 134982 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12253990</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593513</commentid>
    <comment_count>34</comment_count>
      <attachid>135114</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-02 09:04:35 -0700</bug_when>
    <thetext>Created attachment 135114
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593532</commentid>
    <comment_count>35</comment_count>
      <attachid>135114</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-04-02 09:32:00 -0700</bug_when>
    <thetext>Comment on attachment 135114
Patch

Attachment 135114 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12308642</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593667</commentid>
    <comment_count>36</comment_count>
      <attachid>135114</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-02 12:09:52 -0700</bug_when>
    <thetext>Comment on attachment 135114
Patch

Attachment 135114 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12312645</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593888</commentid>
    <comment_count>37</comment_count>
      <attachid>135199</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-02 14:59:02 -0700</bug_when>
    <thetext>Created attachment 135199
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593959</commentid>
    <comment_count>38</comment_count>
      <attachid>135199</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-04-02 16:03:05 -0700</bug_when>
    <thetext>Comment on attachment 135199
Patch

Attachment 135199 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12306917</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593977</commentid>
    <comment_count>39</comment_count>
      <attachid>135219</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-02 16:15:16 -0700</bug_when>
    <thetext>Created attachment 135219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593983</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-02 16:20:00 -0700</bug_when>
    <thetext>Attachment 135219 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackObject...&quot; exit_code: 1
Source/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 39 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>594804</commentid>
    <comment_count>41</comment_count>
      <attachid>135219</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-03 13:18:30 -0700</bug_when>
    <thetext>Comment on attachment 135219
Patch

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

R=me except for the one comment about possibly not having to do a round of tracing after handling dead weak handles.

&gt; Source/JavaScriptCore/heap/Heap.cpp:716
&gt; +        {
&gt; +            ParallelModeEnabler enabler(visitor);
&gt; +            visitor.donateAndDrain();
&gt; +#if ENABLE(PARALLEL_GC)
&gt; +            visitor.drainFromShared(SlotVisitor::MasterDrain);
&gt; +#endif
&gt; +        }

Why do we have to retrace?  I don&apos;t see marking in visitDeadWeakImpls.

&gt; Source/JavaScriptCore/heap/Heap.h:138
&gt; +        WeakHeap* weakHeap() { return &amp;m_weakHeap; }

Random nit: whenever I look at this code I get confused by the terms &quot;WeakHeap&quot; and &quot;HandleHeap&quot;.  Those aren&apos;t really heaps.  I mean, they do some of their own memory management, but so do many things in our code, and yet we don&apos;t call them &quot;heaps&quot; for that reason.

I feel like in the future - not in this patch - it might be good to rename &quot;HandleHeap&quot; and &quot;WeakHeap&quot; to &quot;HandleSet&quot; and &quot;WeakSet&quot;.  Thoughts?

&gt; Source/JavaScriptCore/heap/WeakHeap.h:73
&gt; +    if (!allocator)

UNLIKELY() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594810</commentid>
    <comment_count>42</comment_count>
      <attachid>135219</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-04-03 13:22:02 -0700</bug_when>
    <thetext>Comment on attachment 135219
Patch

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

&gt; Source/JavaScriptCore/Configurations/Base.xcconfig:-27
&gt; -COMPILER_SPECIFIC_WARNING_CFLAGS_LLVM_COMPILER = -Wglobal-constructors -Wexit-time-destructors;

Why have you removed this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594944</commentid>
    <comment_count>43</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-03 15:16:05 -0700</bug_when>
    <thetext>&gt; &gt; -COMPILER_SPECIFIC_WARNING_CFLAGS_LLVM_COMPILER = -Wglobal-constructors -Wexit-time-destructors;
&gt; 
&gt; Why have you removed this?

Accident. I was testing with GCC to try to figure out the build failures. Will fix before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594946</commentid>
    <comment_count>44</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-03 15:20:52 -0700</bug_when>
    <thetext>&gt; Why do we have to retrace?  I don&apos;t see marking in visitDeadWeakImpls.

True, we don&apos;t yet. I&apos;ll remove this, and add it back once it makes sense.

&gt; &gt; Source/JavaScriptCore/heap/Heap.h:138
&gt; &gt; +        WeakHeap* weakHeap() { return &amp;m_weakHeap; }
&gt; 
&gt; Random nit: whenever I look at this code I get confused by the terms &quot;WeakHeap&quot; and &quot;HandleHeap&quot;.  Those aren&apos;t really heaps.  I mean, they do some of their own memory management, but so do many things in our code, and yet we don&apos;t call them &quot;heaps&quot; for that reason.
&gt; 
&gt; I feel like in the future - not in this patch - it might be good to rename &quot;HandleHeap&quot; and &quot;WeakHeap&quot; to &quot;HandleSet&quot; and &quot;WeakSet&quot;.  Thoughts?

Sounds OK. If we go with &quot;WeakSet&quot;, I might want to change &quot;allocate&quot; and &quot;deallocate&quot; to &quot;add&quot; and &quot;remove&quot;. I&apos;m a little worried that &quot;*Set&quot; implies uniqueness, which is not true in this case. Maybe &quot;WeakList&quot;?

&gt; &gt; Source/JavaScriptCore/heap/WeakHeap.h:73
&gt; &gt; +    if (!allocator)
&gt; 
&gt; UNLIKELY() ?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595256</commentid>
    <comment_count>45</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-03 22:28:22 -0700</bug_when>
    <thetext>Committed r113141: &lt;http://trac.webkit.org/changeset/113141&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595283</commentid>
    <comment_count>46</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-04 00:18:26 -0700</bug_when>
    <thetext>Follow-up fix for WebKit2: &lt;http://trac.webkit.org/changeset/113146&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595652</commentid>
    <comment_count>47</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-04 10:17:56 -0700</bug_when>
    <thetext>Follow-up fix for Qt / 32-bit: &lt;http://trac.webkit.org/changeset/113209&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134688</attachid>
            <date>2012-03-29 16:23:27 -0700</date>
            <delta_ts>2012-03-29 19:47:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82670-20120329162323.patch</filename>
            <type>text/plain</type>
            <size>95034</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MiBA
QAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyBhIFdlYWs8VD4gaGVhcCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBpbmNyZW1l
bnRhbAorICAgICAgICBmaW5hbGl6YXRpb24sIHdoaWxlIG1ha2luZyBhcyBmZXcgYmVoYXZpb3Ig
Y2hhbmdlcyBhcyBwb3NzaWJsZS4gVGhlIGJlaGF2aW9yCisgICAgICAgIGNoYW5nZXMgaXQgbWFr
ZXMgYXJlOgorCisgICAgICAgICgqKSBXZWFrPFQ+J3MgcmF3IEpTVmFsdWUgbm8gbG9uZ2VyIHJl
dmVydHMgdG8gSlNWYWx1ZSgpIGF1dG9tYXRpY2FsbHkgLS0KKyAgICAgICAgaW5zdGVhZCwgYSBz
ZXBhcmF0ZSBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBKU1ZhbHVlIGlzIG5vIGxvbmdlciB2YWxp
ZC4KKyAgICAgICAgKFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgSlNWYWx1ZSBjYW4gYmUg
cHJlc2VydmVkIGZvciBsYXRlciBmaW5hbGl6YXRpb24uKQorICAgICAgICBPYmplY3RzIGRlYWxp
bmcgd2l0aCBXZWFrSW1wbHMgZGlyZWN0bHkgbXVzdCBjaGFuZ2UgdG8gY2hlY2sgdGhlIGZsYWcu
CisKKyAgICAgICAgKCopIFdlYWs8VD4gaXMgbm8gbG9uZ2VyIGEgc3ViY2xhc3Mgb2YgSGFuZGxl
PFQ+LgorCisgICAgICAgICgqKSBET00gR0MgcGVyZm9ybWFuY2UgaXMgZGlmZmVyZW50IC0tIDkl
IGZhc3RlciBpbiB0aGUgZ2VvbWV0cmljIG1lYW4sCisgICAgICAgIGJ1dCAxNSUgc2xvd2VyIGlu
IG9uZSBzcGVjaWZpYyBjYXNlOgorICAgICAgICAgICAgICAgIGdjLWRvbTEuaHRtbDogNiUgIGZh
c3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTIuaHRtbDogMjMlIGZhc3RlcgorICAgICAgICAg
ICAgICAgIGdjLWRvbTMuaHRtbDogMTclIGZhc3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTQu
aHRtbDogMTUlICpzbG93ZXIqCisKKyAgICAgICAgVGhlIGtleSBmZWF0dXJlcyBvZiB0aGlzIG5l
dyBoZWFwIGFyZToKKworICAgICAgICAoKikgRWFjaCBibG9jayBrbm93cyBpdHMgb3duIHN0YXRl
LCBpbmRlcGVuZGVudCBvZiBhbnkgb3RoZXIgYmxvY2tzLgorCisgICAgICAgICgqKSBFYWNoIGJs
b2NrIGNhY2hlcyBpdHMgb3duIHN3ZWVwIHJlc3VsdC4KKworICAgICAgICAoKikgVGhlIGhlYXAg
dmlzaXRzIGRlYWQgV2VhazxUPnMgYXQgdGhlIGVuZCBvZiBHQy4gKEl0IGRvZXNuJ3QKKyAgICAg
ICAgbWFyayB0aGVtIHlldCwgc2luY2UgdGhhdCB3b3VsZCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4p
CisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tPYmplY3REYXRhOjpmaW5hbGl6ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Ojppbml0KTogVXBkYXRlZCB0byB1c2Ug
dGhlIG5ldyBXZWFrSGVhcCBBUEkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6IFBhaWQgdGhlIGJ1aWxkIHN5c3RlbSB0
YXggc2luY2UgSSBhZGRlZCBzb21lIG5ldyBmaWxlcy4KKworICAgICAgICAqIGhlYXAvSGFuZGxl
Lmg6IE1hZGUgV2Vha0Jsb2NrIGEgZnJpZW5kIGFuZCBleHBvc2VkIHNsb3QoKSBhcyBwdWJsaWMs
CisgICAgICAgIHNvIHdlIGNhbiBrZWVwIHBhc3NpbmcgYSBIYW5kbGU8VD4gdG8gZmluYWxpemVy
cywgdG8gYXZvaWQgbW9yZSBzdXJmYWNlCisgICAgICAgIGFyZWEgY2hhbmdlIGluIHRoaXMgcGF0
Y2guIEEgZm9sbG93LXVwIHBhdGNoIHNob3VsZCBjaGFuZ2UgdGhlIHR5cGUgd2UKKyAgICAgICAg
cGFzcyB0byBmaW5hbGl6ZXJzLgorCisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmNwcDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OndyaXRlQmFycmllcik6Cisg
ICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUpOgorICAgICAgICAqIGhlYXAvSGFu
ZGxlSGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZUhlYXApOgorICAgICAg
ICAoTm9kZSk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUpOiBSZW1vdmVk
IGFsbCBjb2RlIHJlbGF0ZWQgdG8gV2VhazxUPiwgc2luY2UKKyAgICAgICAgd2UgaGF2ZSBhIHNl
cGFyYXRlIFdlYWtIZWFwIG5vdy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OkhlYXApOiBSZW1vdmVkIG1fZXh0cmFDb3N0IGJlY2F1c2UgZXh0cmEgY29z
dCBpcyBhY2NvdW50ZWQKKyAgICAgICAgZm9yIHRocm91Z2ggb3VyIHdhdGVybWFyayBub3cuIFJl
bW92ZWQgbV93YXRlck1hcmsgYmVjYXVzZSBpdCB3YXMgdW51c2VkLgorCisgICAgICAgIChKU0M6
OkhlYXA6OmRlc3Ryb3kpOiBVcGRhdGVkIGZvciBhZGRpdGlvbiBvZiBXZWFrSGVhcC4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZSk6IENoYW5nZWQg
ZnJvbSB1c2luZyBpdHMgb3duCisgICAgICAgIHZhcmlhYmxlIHRvIHBhcnRpY2lwYXRpbmcgaW4g
dGhlIHdhdGVybWFyayBzdHJhdGVneS4gSSB3YW50ZWQgdG8gc3RhbmRhcmRpemUKKyAgICAgICAg
V2Vha0hlYXAgYW5kIGFsbCBvdGhlciBIZWFwIGNsaWVudHMgb24gdGhpcyBzdHJhdGVneSwgdG8g
bWFrZSBzdXJlIGl0J3MKKyAgICAgICAgYWNjdXJhdGUuCisgCisgICAgICAgIChKU0M6OkhlYXA6
Om1hcmtSb290cyk6IFVwZGF0ZWQgZm9yIGFkZGl0aW9uIG9mIFdlYWtIZWFwLiBBZGRlZCBXZWFr
SGVhcAorICAgICAgICBkZWFkIHZpc2l0IHBhc3MsIGFzIGV4cGxhaW5lZCBhYm92ZS4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVzZXRBbGxv
Y2F0b3JzKTogVXBkYXRlZCBmb3IgYWRkaXRpb24gb2YgV2Vha0hlYXAuCisKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6RmluYWxpemVyT3du
ZXI6OmZpbmFsaXplKTogVXBkYXRlZCBmb3IgbmV3IFdlYWs8VD4gQVBJLgorCisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndlYWtIZWFwKToKKyAgICAgICAgKEhl
YXApOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1dhdGVyTWFyayk6IEFkZGVkIGEgd2F5IHRv
IHBhcnRpY2lwYXRlIGluIHRoZSB3YXRlcm1hcmtpbmcKKyAgICAgICAgc3RyYXRlZ3ksIHNpbmNl
IHRoaXMgaXMgdGhlIGJlc3Qgd2F5IGZvciBXZWFrSGVhcCB0byByZXBvcnQgaXRzIG1lbW9yeQor
ICAgICAgICBjb3N0LiAoSSBwbGFuIHRvIHVwZGF0ZSB0aGlzIGluIGEgZm9sbG93LXVwIHBhdGNo
IHRvIG1ha2UgaXQgbW9yZSBhY2N1cmF0ZSwKKyAgICAgICAgYnV0IGZvciBub3cgaXQgaXMgbm90
IGxlc3MgYWNjdXJhdGUgdGhhbiBpdCB1c2VkIHRvIGJlLikKKworICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjphZGRUb1dhdGVyTWFyayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpkaWRDb25zdW1lRnJlZUxpc3QpOiBSZW1vdmVkIG1fbnVyc2VyeVdhdGVyTWFyayBiZWNhdXNl
CisgICAgICAgIGl0IHdhcyB1bnVzZWQsIGFuZCBJIGRpZG4ndCB3YW50IHRvIHVwZGF0ZSBXZWFr
SGVhcCB0byBrZWVwIGFuIHVzdXNlZAorICAgICAgICB2YXJpYWJsZSB3b3JraW5nLiBBZGRlZCBB
UEkgZm9yIGFib3ZlLgorCisgICAgICAgICogaGVhcC9QYXNzV2Vhay5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKFdlYWtJbXBsQWNjZXNzb3IpOgorICAgICAgICAoUGFzc1dlYWspOgorICAg
ICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6OjpnZXQpOgorICAgICAgICAo
SlNDOjo6Ondhcyk6CisgICAgICAgIChKU0M6Ojo6UGFzc1dlYWspOgorICAgICAgICAoSlNDOjo6
On5QYXNzV2Vhayk6CisgICAgICAgIChKU0M6OlVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAg
ICAoSlNDOjo6OmxlYWtJbXBsKToKKyAgICAgICAgKEpTQzo6YWRvcHRXZWFrKToKKyAgICAgICAg
KiBoZWFwL1N0cm9uZy5oOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yISk6CisgICAg
ICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKToKKyAgICAgICAgKEpTQzo6U3Ryb25nOjpnZXQpOgorICAgICAgICAqIGhlYXAv
V2Vhay5oOgorICAgICAgICAoV2Vhayk6CisgICAgICAgIChKU0M6Ojo6V2Vhayk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjo6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6Ojp+V2Vhayk6CisgICAgICAgIChKU0M6Ojo6c3dhcCk6CisgICAgICAgIChKU0M6
Oj0pOgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6VW5zcGVjaWZp
ZWRCb29sVHlwZSk6CisgICAgICAgIChKU0M6Ojo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6Ojo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjo6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IExvdHMgb2Yg
Y29kZSBjaGFuZ2VzIGhlcmUsIGJ1dCB0aGV5IGJvaWwKKyAgICAgICAgZG93biB0byB0d28gdGhp
bmdzOgorCisgICAgICAgICgqKSBBbGxvY2F0ZSBXZWFrSW1wbHMgZnJvbSB0aGUgV2Vha0hlYXAg
aW5zdGVhZCBvZiBIYW5kbGVzIGZyb20gdGhlIEhhbmRsZUhlYXAuCisKKyAgICAgICAgKCopIEV4
cGxpY2l0bHkgY2hlY2sgV2Vha0ltcGw6OnN0YXRlKCkgZm9yIG5vbi1saXZlbmVzcyBiZWZvcmUg
cmV0dXJuaW5nCisgICAgICAgIGEgdmFsdWUgKGV4cGxhaW5lZCBhYm92ZSkuCisKKyAgICAgICAg
VGhlc2UgZmlsZXMgaW1wbGVtZW50IHRoZSBuZXcgV2VhazxUPiBoZWFwIGJlaGF2aW9yIGRlc2Ny
aWJlZCBhYm92ZToKKworICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDogQWRkZWQuCisgICAg
ICAgICogaGVhcC9XZWFrQmxvY2suaDogQWRkZWQuCisgICAgICAgICogaGVhcC9XZWFrSGFuZGxl
T3duZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIYW5kbGVPd25lci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIZWFwLmNwcDogQWRkZWQuCisgICAgICAgICogaGVhcC9X
ZWFrSGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtJbXBsLmg6IEFkZGVkLgorCisg
ICAgICAgIE9uZSBpbnRlcmVzdGluZyBkaWZmZXJlbmNlIGZyb20gdGhlIG9sZCBoZWFwIGlzIHRo
YXQgd2UgZG9uJ3QgYWxsb3cKKyAgICAgICAgY2xpZW50cyB0byBvdmVyd3JpdGUgYSBXZWFrSW1w
bCBhZnRlciBhbGxvY2F0aW5nIGl0LCBhbmQgd2UgZG9uJ3QgcmVjeWNsZQorICAgICAgICBXZWFr
SW1wbHMgcHJpb3IgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBs
YXp5IGZpbmFsaXphdGlvbiwKKyAgICAgICAgYnV0IGl0IHdpbGwgYWxzbyBoZWxwIHVzIGVzYWJs
aXNoIGEgdXNlZnVsIGludmFyaWFudCBpbiB0aGUgZnV0dXJlOiBhbGxvY2F0aW5nCisgICAgICAg
IGEgV2Vha0ltcGwgd2lsbCBiZSBhIGJpbmRpbmcgY29udHJhY3QgdG8gcnVuIGEgZmluYWxpemVy
IGF0IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgIGZ1dHVyZSwgZXZlbiBpZiB0aGUgV2Vha0lt
cGwgaXMgbGF0ZXIgZGVhbGxvY2F0ZWQuCisKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOiBDaGVjayB0aGUgV2Vh
azxUPiBmb3IgISBpbnN0ZWFkIG9mCisgICAgICAgIGl0cyBKU1ZhbHVlLCBzaW5jZSB0aGF0J3Mg
b3VyIEFQSSBjb250cmFjdCBub3csIGFuZCB0aGUgSlNWYWx1ZSBtaWdodAorICAgICAgICBiZSBz
dGFsZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OmpzQ2Fz
dCk6IEFsbG93IGNhc3RpbmcgTlVMTCBwb2ludGVycyBiZWNhdXNlIGl0J3MgdXNlZnVsIGFuZCBo
YXJtbGVzcy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOiBJIGNhbid0IHJlbWVtYmVyIHdoeSBJ
IGRpZCB0aGlzLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOiBJIGhhZCB0byB1cGRhdGUgdGhlc2Ug
Y2xhc3NlcyBiZWNhdXNlIHRoZXkgYWxsb2NhdGUKKyAgICAgICAgYW5kIGRlYWxsb2NhdGUgd2Vh
ayBwb2ludGVycyBtYW51YWxseS4gVGhleSBzaG91bGQgcHJvYmFibHkgc3RvcCBkb2luZyB0aGF0
LgorCiAyMDEyLTAzLTI5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeCBwMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDE5IEBAIFNF
VChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwCisgICAgaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCi0gICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSGVhcC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAg
ICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcAogICAg
IGhlYXAvTWFya2VkU3BhY2UuY3BwCi0gICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAg
ICBoZWFwL01hcmtTdGFjay5jcHAKKyAgICBoZWFwL1dlYWtIZWFwLmNwcAorICAgIGhlYXAvV2Vh
a0hhbmRsZU93bmVyLmNwcAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogCiAgICAgZGVidWdnZXIv
RGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAsNiArMjUwLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFwLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDYgKzIxNyw5IEBACiAgICAgICAgICAgICAnYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAnLAogICAgICAgICAgICAgJ2J5dGVjb21waWxlci9SZWdpc3RlcklELmgnLAogICAgICAgICAg
ICAgJ2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwJywKKyAgICAgICAgICAgICdoZWFwL1dlYWtI
ZWFwLmNwcCcsCisgICAgICAgICAgICAnaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwJywKKyAgICAg
ICAgICAgICdoZWFwL1dlYWtCbG9jay5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlSGVh
cC5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlU3RhY2suY3BwJywKICAgICAgICAgICAg
ICdoZWFwL0hlYXAuY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0NvcGllZFNwYWNl
LmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAogICAgIGhlYXAvREZHQ29k
ZUJsb2Nrcy5jcHAgXAorICAgIGhlYXAvV2Vha0hlYXAuY3BwIFwKKyAgICBoZWFwL1dlYWtIYW5k
bGVPd25lci5jcHAgXAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVI
ZWFwLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw3IEBAIHZvaWQgSlND
YWxsYmFja09iamVjdERhdGE6OmZpbmFsaXplKEhhbmQKICAgICBmb3IgKDsganNDbGFzczsganND
bGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKQogICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6
ZUNhbGxiYWNrIGZpbmFsaXplID0ganNDbGFzcy0+ZmluYWxpemUpCiAgICAgICAgICAgICBmaW5h
bGl6ZSh0aGlzUmVmKTsKLSAgICBIYW5kbGVTbG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwotICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgV2Vha0hl
YXA6OmRlYWxsb2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQog
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTEyNTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNCArMTAyLDExIEBAIHZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojppbml0KEV4ZWMKICAgICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwg
dG9SZWYodGhpcykpOwogICAgIH0KIAotICAgIGJvb2wgbmVlZHNGaW5hbGl6ZXIgPSBmYWxzZTsK
LSAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHIg
JiYgIW5lZWRzRmluYWxpemVyOyBqc0NsYXNzUHRyID0ganNDbGFzc1B0ci0+cGFyZW50Q2xhc3Mp
Ci0gICAgICAgIG5lZWRzRmluYWxpemVyID0ganNDbGFzc1B0ci0+ZmluYWxpemU7Ci0gICAgaWYg
KG5lZWRzRmluYWxpemVyKSB7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGV4ZWMtPmdsb2Jh
bERhdGEoKS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0
KCksIGNsYXNzUmVmKCkpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0
ZUJhcnJpZXIoc2xvdCwgdGhpcyk7Ci0gICAgICAgICpzbG90ID0gdGhpczsKKyAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHI7IGpzQ2xhc3NQdHIg
PSBqc0NsYXNzUHRyLT5wYXJlbnRDbGFzcykgeworICAgICAgICBpZiAoanNDbGFzc1B0ci0+Zmlu
YWxpemUpIHsKKyAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLndlYWtIZWFwKCkt
PmFsbG9jYXRlKHRoaXMsIG1fY2FsbGJhY2tPYmplY3REYXRhLmdldCgpLCBjbGFzc1JlZigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagko
cmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMzAsNiArMjEzMCwzNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtCbG9jay5jcHAiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0Jsb2NrLmgi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhl
YXBcV2Vha0hlYXAuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtIZWFwLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0ltcGwuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrSGFuZGxl
T3duZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxoZWFwXFdlYWtIYW5kbGVPd25lci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEhhbmRsZVN0YWNrLmNwcCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxMiw3ICszMTIsMTQgQEAKIAkJ
MTRDNTI0MkIwRjUzNTVFOTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEE2NTgxQTBGNEUzNkY0MDAwMTUwRkQgLyog
SklUU3R1YnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMkYzRDgxMzlGNEJFMjAw
NDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCAqLzsgfTsKIAkJMTREMkYzREIxMzlGNEJFMjAwNDkx
MDMxIC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEU4NEY5RTE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxv
Y2suY3BwICovOyB9OworCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEU4NEY5QTE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRFODRGQTAxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtI
ZWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
RTg0RjlCMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5jcHAgKi87IH07CisJCTE0RTg0RkEx
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFODRGOUMxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRF
ODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEU4NEY5RDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vh
a0ltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNEU5RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NTZGQzYw
RTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAqLzsgfTsKKwkJ
MTRGNzI1NjUxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEY3MjU2MzE0RUUyNjVFMDBC
MTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmNwcCAqLzsgfTsKKwkJMTRGNzI1NjYxNEVFMjY1RTAw
QjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTRGNzI1NjQxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVP
d25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Rjk3NDQ2MTM4Qzg1M0UwMERB
MUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZl
cnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQy
MTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9OwogCQk0NTE1
MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDUxNTM5QjgxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTI1LDcg
KzkzMiwxNCBAQAogCQkxNERBODE4RTBEOTlGRDIwMDBCMEE0RkIgLyogSlNBY3RpdmF0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQWN0aXZhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNBY3Rp
dmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQWN0aXZh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REUwRDY4MEQwMjQzMTQw
MEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0dsb2JhbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrQmxvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYWtIZWFwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUMxNEVFMUFDQzAwRDZENUQ0IC8qIFdl
YWtIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtIZWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RTg0RjlEMTRFRTFBQ0MwMEQ2RDVENCAvKiBX
ZWFrSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEYyNTI1NjBEMDhERDhEMDA0RUNGRkYgLyog
SlNWYXJpYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Zh
cmlhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RjcyNTYzMTRF
RTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2Vha0hhbmRsZU93bmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMTRGNzI1NjQxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrSGFuZGxlT3duZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8qIEhl
YXBSb290VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwUm9v
dFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5MDUxNDIwQkE5RThB
NzAwODFFOUQwIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBw
YXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5
MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2OCw2ICsxNTgyLDEzIEBACiAJCQkJMEZDODE1MTIx
NDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLywKIAkJCQkwRkM4MTUxNDE0
MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLywKIAkJCQkxNDJFMzEzMzEzNEZG
MEE2MDBBRkFEQjUgLyogV2Vhay5oICovLAorCQkJCTE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAv
KiBXZWFrQmxvY2suY3BwICovLAorCQkJCTE0RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFr
QmxvY2suaCAqLywKKwkJCQkxNEY3MjU2MzE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93
bmVyLmNwcCAqLywKKwkJCQkxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93
bmVyLmggKi8sCisJCQkJMTRFODRGOUIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCAq
LywKKwkJCQkxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuaCAqLywKKwkJCQkx
NEU4NEY5RDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCAqLywKIAkJCQkwRjI0MkRBNTEz
RjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovLAogCQkJCTBGQzgx
NTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLywKIAkJCQkw
RkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovLApAQCAt
MjUwNSw2ICsyNTI2LDEwIEBACiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0
RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDk3MjA5MTE0RUI4MzE1MDBGRUIxQjcgLyogUGFzc1dlYWsuaCBp
biBIZWFkZXJzICovLAorCQkJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2su
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0RTg0RkExMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVh
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJ
bXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIgLyogV2Vh
a0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI1NDY3NzE0RjU5QjVDMDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0
NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRp
b25FZmZvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzA2MCw2ICszMDg1LDkgQEAKIAkJCQk4NkI1
ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDMkI5MTZDNTE0REEwNDBDMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0RTg0RjlFMTRFRTFBQ0MwMEQ2RDVE
NCAvKiBXZWFrQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRFODRGQTAxNEVFMUFDQzAw
RDZENUQ0IC8qIFdlYWtIZWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0RjcyNTY1MTRFRTI2
NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
RkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTU5MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyogREZHUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAkocmV2aXNpb24g
MTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDYgKzU5LDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNWYWx1ZSAoSGFu
ZGxlQmFzZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gKG1fc2xvdCAmJiAqbV9zbG90KSA/IHJlaW50ZXJw
cmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsgfQogCisgICAgSGFuZGxlU2xv
dCBzbG90KCkgY29uc3QgeyByZXR1cm4gbV9zbG90OyB9CisKIHByb3RlY3RlZDoKICAgICBIYW5k
bGVCYXNlKEhhbmRsZVNsb3Qgc2xvdCkKICAgICAgICAgOiBtX3Nsb3Qoc2xvdCkKQEAgLTY3LDcg
KzY5LDYgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHZvaWQgc3dhcChIYW5kbGVCYXNlJiBvdGhl
cikgeyBzdGQ6OnN3YXAobV9zbG90LCBvdGhlci5tX3Nsb3QpOyB9CiAKLSAgICBIYW5kbGVTbG90
IHNsb3QoKSBjb25zdCB7IHJldHVybiBtX3Nsb3Q7IH0KICAgICB2b2lkIHNldFNsb3QoSGFuZGxl
U2xvdCBzbG90KQogICAgIHsKICAgICAgICAgbV9zbG90ID0gc2xvdDsKQEAgLTEzMyw2ICsxMzQs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVI
ZWFwOworICAgIGZyaWVuZCBjbGFzcyBXZWFrQmxvY2s7CiAKICAgICBzdGF0aWMgSGFuZGxlPFQ+
IHdyYXBTbG90KEhhbmRsZVNsb3Qgc2xvdCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE5
ICszMSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1XZWFrSGFuZGxlT3duZXI6On5XZWFrSGFu
ZGxlT3duZXIoKQotewotfQotCi1ib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiwgU2xvdFZpc2l0b3ImKQotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWFrSGFuZGxlT3duZXI6OmZpbmFsaXplKEhhbmRs
ZTxVbmtub3duPiwgdm9pZCopCi17Ci19Ci0KIEhhbmRsZUhlYXA6OkhhbmRsZUhlYXAoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAg
LCBtX25leHRUb0ZpbmFsaXplKDApCkBAIC03Myw2MiArNjAsNiBAQCB2b2lkIEhhbmRsZUhlYXA6
OnZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwCiAgICAgfQogfQogCi12b2lkIEhhbmRsZUhlYXA6OnZp
c2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17Ci0gICAg
U2xvdFZpc2l0b3ImIHZpc2l0b3IgPSBoZWFwUm9vdFZpc2l0b3IudmlzaXRvcigpOwotCi0gICAg
Tm9kZSogZW5kID0gbV93ZWFrTGlzdC5lbmQoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX3dl
YWtMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0gbm9kZS0+bmV4dCgpKSB7Ci0jaWYg
RU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgICAgIGlmICghaXNWYWxpZFdlYWtOb2RlKG5vZGUp
KQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgICAgICBKU0NlbGwqIGNlbGwgPSBu
b2RlLT5zbG90KCktPmFzQ2VsbCgpOwotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBXZWFrSGFuZGxlT3duZXIqIHdlYWtP
d25lciA9IG5vZGUtPndlYWtPd25lcigpOwotICAgICAgICBpZiAoIXdlYWtPd25lcikKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghd2Vha093bmVyLT5pc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KG5vZGUtPnNsb3QoKSksIG5v
ZGUtPndlYWtPd25lckNvbnRleHQoKSwgdmlzaXRvcikpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQobm9kZS0+c2xvdCgpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSGFuZGxlSGVhcDo6ZmluYWxpemVXZWFrSGFuZGxlcygpCi17Ci0gICAgTm9kZSog
ZW5kID0gbV93ZWFrTGlzdC5lbmQoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX3dlYWtMaXN0
LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0gbV9uZXh0VG9GaW5hbGl6ZSkgewotICAgICAg
ICBtX25leHRUb0ZpbmFsaXplID0gbm9kZS0+bmV4dCgpOwotI2lmIEVOQUJMRShHQ19WQUxJREFU
SU9OKQotICAgICAgICBpZiAoIWlzVmFsaWRXZWFrTm9kZShub2RlKSkKLSAgICAgICAgICAgIENS
QVNIKCk7Ci0jZW5kaWYKLQotICAgICAgICBKU0NlbGwqIGNlbGwgPSBub2RlLT5zbG90KCktPmFz
Q2VsbCgpOwotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpZiAoV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIgPSBub2Rl
LT53ZWFrT3duZXIoKSkgewotICAgICAgICAgICAgd2Vha093bmVyLT5maW5hbGl6ZShIYW5kbGU8
VW5rbm93bj46OndyYXBTbG90KG5vZGUtPnNsb3QoKSksIG5vZGUtPndlYWtPd25lckNvbnRleHQo
KSk7Ci0gICAgICAgICAgICBpZiAobV9uZXh0VG9GaW5hbGl6ZSAhPSBub2RlLT5uZXh0KCkpIC8v
IE93bmVyIGRlYWxsb2NhdGVkIG5vZGUuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFpc0xpdmVOb2Rl
KG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgICAgICAqbm9kZS0+c2xv
dCgpID0gSlNWYWx1ZSgpOwotICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92
ZShub2RlKTsKLSAgICAgICAgbV9pbW1lZGlhdGVMaXN0LnB1c2gobm9kZSk7Ci0gICAgfQotICAg
IAotICAgIG1fbmV4dFRvRmluYWxpemUgPSAwOwotfQotCiB2b2lkIEhhbmRsZUhlYXA6OndyaXRl
QmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFsdWUmIHZhbHVlKQogewogICAgIC8v
IEZvcmJpZCBhc3NpZ25tZW50IHRvIGhhbmRsZXMgZHVyaW5nIHRoZSBmaW5hbGl6YXRpb24gcGhh
c2UsIHNpbmNlIGl0IHdvdWxkIHZpb2xhdGUgbWFueSBHQyBpbnZhcmlhbnRzLgpAQCAtMTUwLDE1
ICs4MSw2IEBAIHZvaWQgSGFuZGxlSGVhcDo6d3JpdGVCYXJyaWVyKEhhbmRsZVNsb3QKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChub2RlLT5pc1dlYWsoKSkgewotICAgICAgICBt
X3dlYWtMaXN0LnB1c2gobm9kZSk7Ci0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgICAg
IGlmICghaXNMaXZlTm9kZShub2RlKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0jZW5kaWYKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIG1fc3Ryb25nTGlzdC5wdXNoKG5vZGUpOwogI2lm
IEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIGlmICghaXNMaXZlTm9kZShub2RlKSkKQEAgLTE4
OCwyNCArMTEwLDYgQEAgYm9vbCBIYW5kbGVIZWFwOjppc0xpdmVOb2RlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIAogICAgIHJldHVybiB0cnVlOwogfQotCi1ib29sIEhhbmRsZUhlYXA6OmlzVmFsaWRX
ZWFrTm9kZShOb2RlKiBub2RlKQotewotICAgIGlmICghaXNMaXZlTm9kZShub2RlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbm9kZS0+aXNXZWFrKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSAqbm9kZS0+c2xvdCgpOwotICAgIGlmICgh
dmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBK
U0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICBpZiAoIWNlbGwgfHwgIWNlbGwtPnN0
cnVjdHVyZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
ICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hhbmRsZUhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IYW5kbGVIZWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDYgQEAg
Y2xhc3MgSlNHbG9iYWxEYXRhOwogY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwog
Ci1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFrSGFuZGxlT3duZXIgewotcHVibGljOgotICAg
IHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOwotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNp
dG9yJik7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCog
Y29udGV4dCk7Ci19OwotCiBjbGFzcyBIYW5kbGVIZWFwIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
SGFuZGxlSGVhcCogaGVhcEZvcihIYW5kbGVTbG90KTsKQEAgLTU4LDIwICs1MSwxMCBAQCBwdWJs
aWM6CiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5k
bGVTbG90KTsKIAotICAgIHZvaWQgbWFrZVdlYWsoSGFuZGxlU2xvdCwgV2Vha0hhbmRsZU93bmVy
KiA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKTsKLSAgICBIYW5kbGVTbG90IGNvcHlXZWFrKEhhbmRs
ZVNsb3QpOwotCiAgICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQg
ZmluYWxpemVXZWFrSGFuZGxlcygpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0
ZUJhcnJpZXIoSGFuZGxlU2xvdCwgY29uc3QgSlNWYWx1ZSYpOwogCi0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIGJvb2wgaGFzV2Vha093bmVyKEhhbmRsZVNsb3QsIFdlYWtIYW5kbGVPd25lciop
OwotICAgIGJvb2wgaGFzRmluYWxpemVyKEhhbmRsZVNsb3QpOwotI2VuZGlmCi0KICAgICB1bnNp
Z25lZCBwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoU3Ryb25nSGFuZGxlKEZ1bmN0b3ImLCBjb25zdCBIYXNo
Q291bnRlZFNldDxKU0NlbGwqPiYgc2tpcFNldCk7CkBAIC04NSwxMiArNjgsNiBAQCBwcml2YXRl
OgogICAgICAgICBIYW5kbGVTbG90IHNsb3QoKTsKICAgICAgICAgSGFuZGxlSGVhcCogaGFuZGxl
SGVhcCgpOwogCi0gICAgICAgIHZvaWQgbWFrZVdlYWsoV2Vha0hhbmRsZU93bmVyKiwgdm9pZCog
Y29udGV4dCk7Ci0gICAgICAgIGJvb2wgaXNXZWFrKCk7Ci0gICAgICAgIAotICAgICAgICBXZWFr
SGFuZGxlT3duZXIqIHdlYWtPd25lcigpOwotICAgICAgICB2b2lkKiB3ZWFrT3duZXJDb250ZXh0
KCk7Ci0KICAgICAgICAgdm9pZCBzZXRQcmV2KE5vZGUqKTsKICAgICAgICAgTm9kZSogcHJldigp
OwogCkBAIC05OCwxMiArNzUsOCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBuZXh0KCk7CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBXZWFrSGFuZGxlT3duZXIqIGVtcHR5V2Vha093bmVyKCk7
Ci0KICAgICAgICAgSlNWYWx1ZSBtX3ZhbHVlOwogICAgICAgICBIYW5kbGVIZWFwKiBtX2hhbmRs
ZUhlYXA7Ci0gICAgICAgIFdlYWtIYW5kbGVPd25lciogbV93ZWFrT3duZXI7Ci0gICAgICAgIHZv
aWQqIG1fd2Vha093bmVyQ29udGV4dDsKICAgICAgICAgTm9kZSogbV9wcmV2OwogICAgICAgICBO
b2RlKiBtX25leHQ7CiAgICAgfTsKQEAgLTExNCw3ICs4Nyw2IEBAIHByaXZhdGU6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBncm93KCk7CiAgICAgCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJ
T04pIHx8ICFBU1NFUlRfRElTQUJMRUQKLSAgICBib29sIGlzVmFsaWRXZWFrTm9kZShOb2RlKik7
CiAgICAgYm9vbCBpc0xpdmVOb2RlKE5vZGUqKTsKICNlbmRpZgogCkBAIC0xMjIsNyArOTQsNiBA
QCBwcml2YXRlOgogICAgIEJsb2NrU3RhY2s8Tm9kZT4gbV9ibG9ja1N0YWNrOwogCiAgICAgU2Vu
dGluZWxMaW5rZWRMaXN0PE5vZGU+IG1fc3Ryb25nTGlzdDsKLSAgICBTZW50aW5lbExpbmtlZExp
c3Q8Tm9kZT4gbV93ZWFrTGlzdDsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT4gbV9pbW1l
ZGlhdGVMaXN0OwogICAgIFNpbmdseUxpbmtlZExpc3Q8Tm9kZT4gbV9mcmVlTGlzdDsKICAgICBO
b2RlKiBtX25leHRUb0ZpbmFsaXplOwpAQCAtMTc1LDQ5ICsxNDYsOCBAQCBpbmxpbmUgdm9pZCBI
YW5kbGVIZWFwOjpkZWFsbG9jYXRlKEhhbmRsCiAgICAgbV9mcmVlTGlzdC5wdXNoKG5vZGUpOwog
fQogCi1pbmxpbmUgSGFuZGxlU2xvdCBIYW5kbGVIZWFwOjpjb3B5V2VhayhIYW5kbGVTbG90IG90
aGVyKQotewotICAgIE5vZGUqIG5vZGUgPSB0b05vZGUoYWxsb2NhdGUoKSk7Ci0gICAgbm9kZS0+
bWFrZVdlYWsodG9Ob2RlKG90aGVyKS0+d2Vha093bmVyKCksIHRvTm9kZShvdGhlciktPndlYWtP
d25lckNvbnRleHQoKSk7Ci0gICAgd3JpdGVCYXJyaWVyKG5vZGUtPnNsb3QoKSwgKm90aGVyKTsK
LSAgICAqbm9kZS0+c2xvdCgpID0gKm90aGVyOwotICAgIHJldHVybiB0b0hhbmRsZShub2RlKTsK
LX0KLQotaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6bWFrZVdlYWsoSGFuZGxlU2xvdCBoYW5kbGUs
IFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyLCB2b2lkKiBjb250ZXh0KQotewotICAgIC8vIEZv
cmJpZCBhc3NpZ25tZW50IHRvIGhhbmRsZXMgZHVyaW5nIHRoZSBmaW5hbGl6YXRpb24gcGhhc2Us
IHNpbmNlIGl0IHdvdWxkIHZpb2xhdGUgbWFueSBHQyBpbnZhcmlhbnRzLgotICAgIC8vIEZpbGUg
YSBidWcgd2l0aCBzdGFjayB0cmFjZSBpZiB5b3UgaGl0IHRoaXMuCi0gICAgaWYgKG1fbmV4dFRv
RmluYWxpemUpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgTm9kZSogbm9kZSA9IHRvTm9kZShoYW5k
bGUpOwotICAgIG5vZGUtPm1ha2VXZWFrKHdlYWtPd25lciwgY29udGV4dCk7Ci0KLSAgICBTZW50
aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92ZShub2RlKTsKLSAgICBpZiAoISpoYW5kbGUgfHwg
IWhhbmRsZS0+aXNDZWxsKCkpIHsKLSAgICAgICAgbV9pbW1lZGlhdGVMaXN0LnB1c2gobm9kZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3dlYWtMaXN0LnB1c2gobm9kZSk7Ci19
Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi1pbmxpbmUgYm9vbCBIYW5kbGVIZWFwOjpoYXNXZWFr
T3duZXIoSGFuZGxlU2xvdCBoYW5kbGUsIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyKQotewot
ICAgIHJldHVybiB0b05vZGUoaGFuZGxlKS0+d2Vha093bmVyKCkgPT0gd2Vha093bmVyOwotfQot
Ci1pbmxpbmUgYm9vbCBIYW5kbGVIZWFwOjpoYXNGaW5hbGl6ZXIoSGFuZGxlU2xvdCBoYW5kbGUp
Ci17Ci0gICAgcmV0dXJuIHRvTm9kZShoYW5kbGUpLT53ZWFrT3duZXIoKTsKLX0KLSNlbmRpZgot
CiBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKQog
ICAgIDogbV9oYW5kbGVIZWFwKGhhbmRsZUhlYXApCi0gICAgLCBtX3dlYWtPd25lcigwKQotICAg
ICwgbV93ZWFrT3duZXJDb250ZXh0KDApCiAgICAgLCBtX3ByZXYoMCkKICAgICAsIG1fbmV4dCgw
KQogewpAQCAtMjI1LDggKzE1NSw2IEBAIGlubGluZSBIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKEhh
bmRsZUhlYXAKIAogaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoV1RGOjpTZW50aW5lbFRh
ZykKICAgICA6IG1faGFuZGxlSGVhcCgwKQotICAgICwgbV93ZWFrT3duZXIoMCkKLSAgICAsIG1f
d2Vha093bmVyQ29udGV4dCgwKQogICAgICwgbV9wcmV2KDApCiAgICAgLCBtX25leHQoMCkKIHsK
QEAgLTI0MiwyOCArMTcwLDYgQEAgaW5saW5lIEhhbmRsZUhlYXAqIEhhbmRsZUhlYXA6Ok5vZGU6
OmhhbgogICAgIHJldHVybiBtX2hhbmRsZUhlYXA7CiB9CiAKLWlubGluZSB2b2lkIEhhbmRsZUhl
YXA6Ok5vZGU6Om1ha2VXZWFrKFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyLCB2b2lkKiBjb250
ZXh0KQotewotICAgIG1fd2Vha093bmVyID0gd2Vha093bmVyID8gd2Vha093bmVyIDogZW1wdHlX
ZWFrT3duZXIoKTsKLSAgICBtX3dlYWtPd25lckNvbnRleHQgPSBjb250ZXh0OwotfQotCi1pbmxp
bmUgYm9vbCBIYW5kbGVIZWFwOjpOb2RlOjppc1dlYWsoKQotewotICAgIHJldHVybiBtX3dlYWtP
d25lcjsgLy8gVHJ1ZSBmb3IgZW1wdHlXZWFrT3duZXIoKS4KLX0KLQotaW5saW5lIFdlYWtIYW5k
bGVPd25lciogSGFuZGxlSGVhcDo6Tm9kZTo6d2Vha093bmVyKCkKLXsKLSAgICByZXR1cm4gbV93
ZWFrT3duZXIgPT0gZW1wdHlXZWFrT3duZXIoKSA/IDAgOiBtX3dlYWtPd25lcjsgLy8gMCBmb3Ig
ZW1wdHlXZWFrT3duZXIoKS4KLX0KLQotaW5saW5lIHZvaWQqIEhhbmRsZUhlYXA6Ok5vZGU6Ondl
YWtPd25lckNvbnRleHQoKQotewotICAgIEFTU0VSVCh3ZWFrT3duZXIoKSk7Ci0gICAgcmV0dXJu
IG1fd2Vha093bmVyQ29udGV4dDsKLX0KLQogaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6Tm9kZTo6
c2V0UHJldihOb2RlKiBwcmV2KQogewogICAgIG1fcHJldiA9IHByZXY7CkBAIC0yODQsMTMgKzE5
MCw2IEBAIGlubGluZSBIYW5kbGVIZWFwOjpOb2RlKiBIYW5kbGVIZWFwOjpOb2QKICAgICByZXR1
cm4gbV9uZXh0OwogfQogCi0vLyBTZW50aW5lbCB0byBpbmRpY2F0ZSB0aGF0IGEgbm9kZSBpcyB3
ZWFrLCBidXQgaXRzIG93bmVyIGhhcyBubyBtZWFuaW5nZnVsCi0vLyBjYWxsYmFja3MuIFRoaXMg
YWxsb3dzIHVzIHRvIG9wdGltaXplIGJ5IHNraXBwaW5nIHN1Y2ggbm9kZXMuCi1pbmxpbmUgV2Vh
a0hhbmRsZU93bmVyKiBIYW5kbGVIZWFwOjpOb2RlOjplbXB0eVdlYWtPd25lcigpCi17Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0hhbmRsZU93bmVyKj4oLTEpOwotfQotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIEhhbmRsZUhlYXA6OmZvckVhY2hTdHJvbmdIYW5k
bGUoRnVuY3RvciYgZnVuY3RvciwgY29uc3QgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4mIHNraXBT
ZXQpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVuZCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsMTggKzMxMywx
NyBAQCBIZWFwOjpIZWFwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSGVhCiAgICAgOiBtX2hl
YXBTaXplKGhlYXBTaXplKQogICAgICwgbV9taW5CeXRlc1BlckN5Y2xlKGhlYXBTaXplRm9ySGlu
dChoZWFwU2l6ZSkpCiAgICAgLCBtX2xhc3RGdWxsR0NTaXplKDApCi0gICAgLCBtX3dhdGVyTWFy
aygwKQogICAgICwgbV9oaWdoV2F0ZXJNYXJrKG1fbWluQnl0ZXNQZXJDeWNsZSkKICAgICAsIG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyhOb09wZXJhdGlvbikKICAgICAsIG1fb2JqZWN0U3BhY2UodGhp
cykKICAgICAsIG1fc3RvcmFnZVNwYWNlKHRoaXMpCiAgICAgLCBtX2Jsb2NrRnJlZWluZ1RocmVh
ZFNob3VsZFF1aXQoZmFsc2UpCi0gICAgLCBtX2V4dHJhQ29zdCgwKQogICAgICwgbV9tYXJrTGlz
dFNldCgwKQogICAgICwgbV9hY3Rpdml0eUNhbGxiYWNrKERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJh
Y2s6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1f
c2hhcmVkRGF0YShnbG9iYWxEYXRhKQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEp
CisgICAgLCBtX3dlYWtIZWFwKHRoaXMpCiAgICAgLCBtX2hhbmRsZUhlYXAoZ2xvYmFsRGF0YSkK
ICAgICAsIG1faXNTYWZlVG9Db2xsZWN0KGZhbHNlKQogICAgICwgbV9nbG9iYWxEYXRhKGdsb2Jh
bERhdGEpCkBAIC0zNzYsNyArMzc1LDcgQEAgdm9pZCBIZWFwOjpkZXN0cm95KCkKICAgICBjYW5v
bmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CiAgICAgY2xlYXJNYXJrcygpOwogCi0gICAgbV9o
YW5kbGVIZWFwLmZpbmFsaXplV2Vha0hhbmRsZXMoKTsKKyAgICBtX3dlYWtIZWFwLmZpbmFsaXpl
QWxsKCk7CiAgICAgbV9nbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZmluYWxpemVTbWFsbFN0cmlu
Z3MoKTsKICAgICBzaHJpbmsoKTsKICAgICBtX3N0b3JhZ2VTcGFjZS5kZXN0cm95KCk7CkBAIC00
NjYsOSArNDY1LDcgQEAgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZQog
ICAgIC8vIGlmIGEgbGFyZ2UgdmFsdWUgc3Vydml2ZXMgb25lIGdhcmJhZ2UgY29sbGVjdGlvbiwg
dGhlcmUgaXMgbm90IG11Y2ggcG9pbnQgdG8KICAgICAvLyBjb2xsZWN0aW5nIG1vcmUgZnJlcXVl
bnRseSBhcyBsb25nIGFzIGl0IHN0YXlzIGFsaXZlLgogCi0gICAgaWYgKG1fZXh0cmFDb3N0ID4g
bWF4RXh0cmFDb3N0ICYmIG1fZXh0cmFDb3N0ID4gaGlnaFdhdGVyTWFyaygpIC8gMikKLSAgICAg
ICAgY29sbGVjdEFsbEdhcmJhZ2UoKTsKLSAgICBtX2V4dHJhQ29zdCArPSBjb3N0OworICAgIGFk
ZFRvV2F0ZXJNYXJrKGNvc3QpOwogfQogCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQpA
QCAtNjg3LDEyICs2ODQsMTIgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAj
ZW5kaWYKICAgICB9CiAKLSAgICAvLyBXZWFrIGhhbmRsZXMgbXVzdCBiZSBtYXJrZWQgbGFzdCwg
YmVjYXVzZSB0aGVpciBvd25lcnMgdXNlIHRoZSBzZXQgb2YKLSAgICAvLyBvcGFxdWUgcm9vdHMg
dG8gZGV0ZXJtaW5lIHJlYWNoYWJpbGl0eS4KKyAgICAvLyBXZWFrIHJlZmVyZW5jZXMgbXVzdCBi
ZSBtYXJrZWQgbGFzdCBiZWNhdXNlIHRoZWlyIGxpdmVuZXNzIGRlcGVuZHMgb24KKyAgICAvLyB0
aGUgbGl2ZW5lc3Mgb2YgdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCBncmFwaC4KICAgICB7Ci0gICAg
ICAgIEdDUEhBU0UoVmlzaXRpbmdXZWFrSGFuZGxlcyk7CisgICAgICAgIEdDUEhBU0UoVmlzaXRp
bmdMaXZlV2Vha0hhbmRsZXMpOwogICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAg
bV9oYW5kbGVIZWFwLnZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAg
ICAgIG1fd2Vha0hlYXAudmlzaXRMaXZlV2Vha0ltcGxzKGhlYXBSb290VmlzaXRvcik7CiAgICAg
ICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAgICAgIGlmICh2aXNpdG9y
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTcwNSw2ICs3MDIsMjAgQEAg
dm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CisKKyAgICB7CisgICAgICAgIEdDUEhBU0UoVmlzaXRpbmdEZWFkV2Vha0hhbmRs
ZXMpOworICAgICAgICBtX3dlYWtIZWFwLnZpc2l0RGVhZFdlYWtJbXBscyhoZWFwUm9vdFZpc2l0
b3IpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cih2aXNpdG9yKTsKKyAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyNpZiBF
TkFCTEUoUEFSQUxMRUxfR0MpCisgICAgICAgICAgICB2aXNpdG9yLmRyYWluRnJvbVNoYXJlZChT
bG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKICAg
ICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKIAog
ICAgIHZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKQEAgLTgwNSw3ICs4MTYsNyBAQCB2b2lkIEhlYXA6
OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgICAgIAogICAgIHsKICAgICAgICAg
R0NQSEFTRShGaW5hbGl6ZVdlYWtIYW5kbGVzKTsKLSAgICAgICAgbV9oYW5kbGVIZWFwLmZpbmFs
aXplV2Vha0hhbmRsZXMoKTsKKyAgICAgICAgbV93ZWFrSGVhcC5zd2VlcCgpOwogICAgICAgICBt
X2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5maW5hbGl6ZVNtYWxsU3RyaW5ncygpOwogICAgIH0K
ICAgICAKQEAgLTgzNiw3ICs4NDcsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUg
c3dlZXBUb2dnCiAgICAgc2l6ZV90IHByb3BvcnRpb25hbEJ5dGVzID0gMiAqIG5ld1NpemU7CiAg
ICAgaWYgKGZ1bGxHQykgewogICAgICAgICBtX2xhc3RGdWxsR0NTaXplID0gbmV3U2l6ZTsKLSAg
ICAgICAgc2V0SGlnaFdhdGVyTWFyayhtYXgocHJvcG9ydGlvbmFsQnl0ZXMsIG1fbWluQnl0ZXNQ
ZXJDeWNsZSkpOworICAgICAgICBtX2hpZ2hXYXRlck1hcmsgPSBtYXgocHJvcG9ydGlvbmFsQnl0
ZXMsIG1fbWluQnl0ZXNQZXJDeWNsZSk7CiAgICAgfQogICAgIGRvdWJsZSBsYXN0R0NFbmRUaW1l
ID0gV1RGOjpjdXJyZW50VGltZSgpOwogICAgIG1fbGFzdEdDTGVuZ3RoID0gbGFzdEdDRW5kVGlt
ZSAtIGxhc3RHQ1N0YXJ0VGltZTsKQEAgLTg1Miw4ICs4NjMsOCBAQCB2b2lkIEhlYXA6OmNhbm9u
aWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoCiAKIHZvaWQgSGVhcDo6cmVzZXRBbGxvY2F0b3JzKCkK
IHsKLSAgICBtX2V4dHJhQ29zdCA9IDA7CiAgICAgbV9vYmplY3RTcGFjZS5yZXNldEFsbG9jYXRv
cnMoKTsKKyAgICBtX3dlYWtIZWFwLnJlc2V0QWxsb2NhdG9yKCk7CiB9CiAKIHZvaWQgSGVhcDo6
c2V0QWN0aXZpdHlDYWxsYmFjayhQYXNzT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gYWN0aXZp
dHlDYWxsYmFjaykKQEAgLTkxNCwxNSArOTI1LDE1IEBAIHZvaWQgSGVhcDo6cmVsZWFzZUZyZWVC
bG9ja3MoKQogCiB2b2lkIEhlYXA6OmFkZEZpbmFsaXplcihKU0NlbGwqIGNlbGwsIEZpbmFsaXpl
ciBmaW5hbGl6ZXIpCiB7Ci0gICAgV2VhazxKU0NlbGw+IHdlYWsoKmdsb2JhbERhdGEoKSwgY2Vs
bCwgJm1fZmluYWxpemVyT3duZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpbmFsaXplcikp
OwotICAgIHdlYWsubGVha0hhbmRsZSgpOyAvLyBCYWxhbmNlZCBieSBGaW5hbGl6ZXJPd25lcjo6
ZmluYWxpemUoKS4KKyAgICB3ZWFrSGVhcCgpLT5hbGxvY2F0ZShjZWxsLCAmbV9maW5hbGl6ZXJP
d25lciwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmluYWxpemVyKSk7IC8vIEJhbGFuY2VkIGJ5
IEZpbmFsaXplck93bmVyOjpmaW5hbGl6ZSgpLgogfQogCiB2b2lkIEhlYXA6OkZpbmFsaXplck93
bmVyOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQogewot
ICAgIFdlYWs8SlNDZWxsPiB3ZWFrKFdlYWs8SlNDZWxsPjo6QWRvcHQsIGhhbmRsZSk7CisgICAg
SGFuZGxlU2xvdCBzbG90ID0gaGFuZGxlLnNsb3QoKTsKICAgICBGaW5hbGl6ZXIgZmluYWxpemVy
ID0gcmVpbnRlcnByZXRfY2FzdDxGaW5hbGl6ZXI+KGNvbnRleHQpOwotICAgIGZpbmFsaXplcih3
ZWFrLmdldCgpKTsKKyAgICBmaW5hbGl6ZXIoc2xvdC0+YXNDZWxsKCkpOworICAgIFdlYWtIZWFw
OjpkZWFsbG9jYXRlKFdlYWtJbXBsOjphc1dlYWtJbXBsKHNsb3QpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxMTI1
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2luY2x1ZGUg
Ik1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXZWFr
SGFuZGxlT3duZXIuaCIKKyNpbmNsdWRlICJXZWFrSGVhcC5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllclN1cHBvcnQuaCIKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMzMsMTEgKzEzNSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0
dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVkQ2VsbChGdW5jdG9yJik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaFBy
b3RlY3RlZENlbGwoKTsKIAorICAgICAgICBXZWFrSGVhcCogd2Vha0hlYXAoKSB7IHJldHVybiAm
bV93ZWFrSGVhcDsgfQogICAgICAgICBIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKCkgeyByZXR1cm4g
Jm1faGFuZGxlSGVhcDsgfQogICAgICAgICBIYW5kbGVTdGFjayogaGFuZGxlU3RhY2soKSB7IHJl
dHVybiAmbV9oYW5kbGVTdGFjazsgfQogCiAgICAgICAgIHZvaWQgZ2V0Q29uc2VydmF0aXZlUmVn
aXN0ZXJSb290cyhIYXNoU2V0PEpTQ2VsbCo+JiByb290cyk7CiAKKyAgICAgICAgdm9pZCBhZGRU
b1dhdGVyTWFyayhzaXplX3QpOworCiAgICAgICAgIGRvdWJsZSBsYXN0R0NMZW5ndGgoKSB7IHJl
dHVybiBtX2xhc3RHQ0xlbmd0aDsgfQogCiAgICAgcHJpdmF0ZToKQEAgLTE1NSw3ICsxNjAsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzaXplX3Qgd2F0ZXJNYXJrKCk7CiAgICAgICAg
IHNpemVfdCBoaWdoV2F0ZXJNYXJrKCk7Ci0gICAgICAgIHZvaWQgc2V0SGlnaFdhdGVyTWFyayhz
aXplX3QpOwogICAgICAgICBib29sIHNob3VsZENvbGxlY3QoKTsKIAogICAgICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IG1pbkV4dHJhQ29zdCA9IDI1NjsKQEAgLTE5OSw3ICsyMDMsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgSGVhcFNpemUgbV9oZWFwU2l6ZTsKICAgICAgICAg
Y29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKICAgICAgICAgc2l6ZV90IG1fbGFzdEZ1
bGxHQ1NpemU7Ci0gICAgICAgIHNpemVfdCBtX3dhdGVyTWFyazsKICAgICAgICAgc2l6ZV90IG1f
aGlnaFdhdGVyTWFyazsKICAgICAgICAgCiAgICAgICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3MgbV9v
cGVyYXRpb25JblByb2dyZXNzOwpAQCAtMjE4LDggKzIyMSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBWVGFibGVTcGVjdHJ1bSBtX2Rlc3Ryb3llZFR5cGVDb3VudHM7CiAjZW5kaWYKIAot
ICAgICAgICBzaXplX3QgbV9leHRyYUNvc3Q7Ci0KICAgICAgICAgUHJvdGVjdENvdW50U2V0IG1f
cHJvdGVjdGVkVmFsdWVzOwogICAgICAgICBWZWN0b3I8VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4q
ID4gbV90ZW1wU29ydGluZ1ZlY3RvcnM7CiAgICAgICAgIEhhc2hTZXQ8TWFya2VkQXJndW1lbnRC
dWZmZXIqPiogbV9tYXJrTGlzdFNldDsKQEAgLTIzMSw2ICsyMzIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJlZERhdGE7CiAgICAg
ICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CiAKKyAgICAgICAgV2Vha0hlYXAgbV93ZWFr
SGVhcDsKICAgICAgICAgSGFuZGxlSGVhcCBtX2hhbmRsZUhlYXA7CiAgICAgICAgIEhhbmRsZVN0
YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgICAgIERGR0NvZGVCbG9ja3MgbV9kZmdDb2RlQmxvY2tz
OwpAQCAtMjkzLDkgKzI5NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1f
aGlnaFdhdGVyTWFyazsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjpzZXRIaWdoV2F0
ZXJNYXJrKHNpemVfdCBuZXdIaWdoV2F0ZXJNYXJrKQorICAgIGlubGluZSB2b2lkIEhlYXA6OmFk
ZFRvV2F0ZXJNYXJrKHNpemVfdCBzaXplKQogICAgIHsKLSAgICAgICAgbV9oaWdoV2F0ZXJNYXJr
ID0gbmV3SGlnaFdhdGVyTWFyazsKKyAgICAgICAgbV9vYmplY3RTcGFjZS5hZGRUb1dhdGVyTWFy
ayhzaXplKTsKKyAgICAgICAgaWYgKHdhdGVyTWFyaygpID4gaGlnaFdhdGVyTWFyaygpKQorICAg
ICAgICAgICAgY29sbGVjdChEb05vdFN3ZWVwKTsKICAgICB9CiAKICNpZiBFTkFCTEUoR0dDKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNp
b24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIGNsYXNzIFN0cnVjdHVyZTsKIAogTWFy
a2VkU3BhY2U6Ok1hcmtlZFNwYWNlKEhlYXAqIGhlYXApCiAgICAgOiBtX3dhdGVyTWFyaygwKQot
ICAgICwgbV9udXJzZXJ5V2F0ZXJNYXJrKDApCiAgICAgLCBtX2hlYXAoaGVhcCkKIHsKICAgICBm
b3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0
b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewpAQCAtNDksNyArNDgsNiBAQCBNYXJrZWRT
cGFjZTo6TWFya2VkU3BhY2UoSGVhcCogaGVhcCkKIHZvaWQgTWFya2VkU3BhY2U6OnJlc2V0QWxs
b2NhdG9ycygpCiB7CiAgICAgbV93YXRlck1hcmsgPSAwOwotICAgIG1fbnVyc2VyeVdhdGVyTWFy
ayA9IDA7CiAKICAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6
ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewogICAgICAgICBh
bGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcg
QEAgcHVibGljOgogICAgIHZvaWQgY2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpOwogCiAg
ICAgc2l6ZV90IHdhdGVyTWFyaygpOwotICAgIHNpemVfdCBudXJzZXJ5V2F0ZXJNYXJrKCk7Cisg
ICAgdm9pZCBhZGRUb1dhdGVyTWFyayhzaXplX3QpOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PE1h
cmtlZEJsb2NrKj46Oml0ZXJhdG9yIEJsb2NrSXRlcmF0b3I7CiAgICAgCkBAIC03Nyw2ICs3Nyw3
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHNocmluaygpOwogICAgIHZvaWQgZnJlZUJsb2Nr
cyhNYXJrZWRCbG9jayogaGVhZCk7CisKICAgICB2b2lkIGRpZEFkZEJsb2NrKE1hcmtlZEJsb2Nr
Kik7CiAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoTWFya2VkQmxvY2sqKTsKIApAQCAtMTAy
LDcgKzEwMyw2IEBAIHByaXZhdGU6CiAgICAgU3Vic3BhY2UgbV9ub3JtYWxTcGFjZTsKIAogICAg
IHNpemVfdCBtX3dhdGVyTWFyazsKLSAgICBzaXplX3QgbV9udXJzZXJ5V2F0ZXJNYXJrOwogICAg
IEhlYXAqIG1faGVhcDsKICAgICBNYXJrZWRCbG9ja1NldCBtX2Jsb2NrczsKIH07CkBAIC0xMTIs
OSArMTEyLDkgQEAgaW5saW5lIHNpemVfdCBNYXJrZWRTcGFjZTo6d2F0ZXJNYXJrKCkKICAgICBy
ZXR1cm4gbV93YXRlck1hcms7CiB9CiAKLWlubGluZSBzaXplX3QgTWFya2VkU3BhY2U6Om51cnNl
cnlXYXRlck1hcmsoKQoraW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmFkZFRvV2F0ZXJNYXJrKHNp
emVfdCBzaXplKQogewotICAgIHJldHVybiBtX251cnNlcnlXYXRlck1hcms7CisgICAgbV93YXRl
ck1hcmsgKz0gc2l6ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5
cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgTWFya2VkU3BhY2U6OmZvckVhY2hDZWxsKEZ1bmN0
b3ImIGZ1bmN0b3IpCkBAIC0xOTksNyArMTk5LDYgQEAgaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6
OmRpZEFkZEJsb2NrKE1hcgogCiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6ZGlkQ29uc3VtZUZy
ZWVMaXN0KE1hcmtlZEJsb2NrKiBibG9jaykKIHsKLSAgICBtX251cnNlcnlXYXRlck1hcmsgKz0g
YmxvY2stPmNhcGFjaXR5KCkgLSBibG9jay0+c2l6ZSgpOwogICAgIG1fd2F0ZXJNYXJrICs9IGJs
b2NrLT5jYXBhY2l0eSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Q
YXNzV2Vhay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NX
ZWFrLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bh
c3NXZWFrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgUGFzc1dl
YWtfaAogI2RlZmluZSBQYXNzV2Vha19oCiAKKyNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgIkhhbmRsZS5oIgogI2luY2x1ZGUgPHd0Zi9O
dWxsUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KIApAQCAtMzUsNjEgKzM1LDE2
NCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NXZWFrOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gUGFzc1dlYWs8VD4gYWRvcHRXZWFrKEhhbmRsZVNsb3QpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gUGFzc1dlYWs8VD4gYWRvcHRXZWFrKFdlYWtJbXBsKik7CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNsYXNzIFBhc3NXZWFrIDogcHVibGljIEhhbmRsZTxUPiB7Ci0gICAgdXNpbmcgSGFuZGxl
PFQ+OjpzbG90OwotICAgIHVzaW5nIEhhbmRsZTxUPjo6c2V0U2xvdDsKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWtJbXBsQWNjZXNzb3IgeworcHVibGljOgor
ICAgIHR5cGVkZWYgVCogR2V0VHlwZTsKKworICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdDsKKyAg
ICBUJiBvcGVyYXRvciooKSBjb25zdDsKKyAgICBHZXRUeXBlIGdldCgpIGNvbnN0OworCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgd2FzKEdldFR5cGUpIGNvbnN0OworI2VuZGlmCit9
OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBjbGFzcyBXZWFrSW1wbEFjY2Vzc29yPEJhc2Us
IFVua25vd24+IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhbmRsZTxUPjo6RXh0
ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKKyAgICB0eXBlZGVmIEpTVmFsdWUgR2V0VHlwZTsKIAot
ICAgIFBhc3NXZWFrKCkgOiBIYW5kbGU8VD4oKSB7IH0KLSAgICBQYXNzV2VhayhzdGQ6Om51bGxw
dHJfdCkgOiBIYW5kbGU8VD4oKSB7IH0KKyAgICBjb25zdCBKU1ZhbHVlKiBvcGVyYXRvci0+KCkg
Y29uc3Q7CisgICAgY29uc3QgSlNWYWx1ZSYgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgR2V0VHlw
ZSBnZXQoKSBjb25zdDsKK307CiAKLSAgICBQYXNzV2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEV4dGVybmFsVHlwZSBleHRlcm5hbFR5cGUgPSBFeHRlcm5hbFR5cGUoKSwgV2Vha0hhbmRs
ZU93bmVyKiB3ZWFrT3duZXIgPSAwLCB2b2lkKiBjb250ZXh0ID0gMCkKLSAgICAgICAgOiBIYW5k
bGU8VD4oZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKSkKLSAgICB7Ci0g
ICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+bWFrZVdlYWsoc2xvdCgpLCB3ZWFr
T3duZXIsIGNvbnRleHQpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSGFuZGxlVHlwZXM8VD46
OnRvSlNWYWx1ZShleHRlcm5hbFR5cGUpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNs
b3QoKSktPndyaXRlQmFycmllcihzbG90KCksIHZhbHVlKTsKLSAgICAgICAgKnNsb3QoKSA9IHZh
bHVlOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NXZWFrIDogcHVibGlj
IFdlYWtJbXBsQWNjZXNzb3I8UGFzc1dlYWs8VD4sIFQ+IHsKK3B1YmxpYzoKKyAgICBmcmllbmQg
Y2xhc3MgV2Vha0ltcGxBY2Nlc3NvcjxQYXNzV2VhazxUPiwgVD47CisgICAgdXNpbmcgdHlwZW5h
bWUgV2Vha0ltcGxBY2Nlc3NvcjxQYXNzV2VhazxUPiwgVD46OkdldFR5cGU7CisKKyAgICBQYXNz
V2VhaygpOworICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBQYXNzV2VhayhKU0ds
b2JhbERhdGEmLCBHZXRUeXBlID0gR2V0VHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqID0gMCwgdm9p
ZCogY29udGV4dCA9IDApOwogCiAgICAgLy8gSXQgc29tZXdoYXQgYnJlYWtzIHRoZSB0eXBlIHN5
c3RlbSB0byBhbGxvdyB0cmFuc2ZlciBvZiBvd25lcnNoaXAgb3V0IG9mCiAgICAgLy8gYSBjb25z
dCBQYXNzV2Vhay4gSG93ZXZlciwgaXQgbWFrZXMgaXQgbXVjaCBlYXNpZXIgdG8gd29yayB3aXRo
IFBhc3NXZWFrCiAgICAgLy8gdGVtcG9yYXJpZXMsIGFuZCB3ZSBkb24ndCBoYXZlIGEgbmVlZCB0
byB1c2UgcmVhbCBjb25zdCBQYXNzV2Vha3MgYW55d2F5LgotICAgIFBhc3NXZWFrKGNvbnN0IFBh
c3NXZWFrJiBvKSA6IEhhbmRsZTxUPihvLmxlYWtIYW5kbGUoKSkgeyB9Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gUGFzc1dlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG8pIDogSGFuZGxlPFQ+KG8u
bGVha0hhbmRsZSgpKSB7IH0KKyAgICBQYXNzV2Vhayhjb25zdCBQYXNzV2VhayYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+Jik7CisKKyAgICB+
UGFzc1dlYWsoKTsKIAotICAgIH5QYXNzV2VhaygpCi0gICAgewotICAgICAgICBpZiAoIXNsb3Qo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90
KCkpLT5kZWFsbG9jYXRlKHNsb3QoKSk7Ci0gICAgICAgIHNldFNsb3QoMCk7Ci0gICAgfQorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CiAKLSAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29uc3Qg
eyByZXR1cm4gIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdChzbG90KCkpOyB9CisgICAgLy8g
VGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJv
b2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgSlNWYWx1ZSAo
UGFzc1dlYWs6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmll
ZEJvb2xUeXBlKigpIGNvbnN0OwogCi0gICAgSGFuZGxlU2xvdCBsZWFrSGFuZGxlKCkgY29uc3Qg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdlYWtJbXBsKiBsZWFrSW1wbCgpIGNvbnN0IFdBUk5f
VU5VU0VEX1JFVFVSTjsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgUGFzc1dlYWsgYWRvcHRXZWFr
PFQ+KEhhbmRsZVNsb3QpOworICAgIGZyaWVuZCBQYXNzV2VhayBhZG9wdFdlYWs8VD4oV2Vha0lt
cGwqKTsKKyAgICBleHBsaWNpdCBQYXNzV2VhayhXZWFrSW1wbCopOwogCi0gICAgZXhwbGljaXQg
UGFzc1dlYWsoSGFuZGxlU2xvdCBzbG90KSA6IEhhbmRsZTxUPihzbG90KSB7IH0KKyAgICBXZWFr
SW1wbCogbV9pbXBsOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEhhbmRsZVNs
b3QgUGFzc1dlYWs8VD46OmxlYWtIYW5kbGUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgQmFz
ZSwgdHlwZW5hbWUgVD4gaW5saW5lIFQqIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVD46Om9wZXJh
dG9yLT4oKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhp
cyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+c3Rh
dGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGlubGluZSBUJiBXZWFrSW1wbEFj
Y2Vzc29yPEJhc2UsIFQ+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNl
Kj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJu
ICpqc0Nhc3Q8VCo+KHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1Zh
bHVlKCkuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBXZWFr
SW1wbEFjY2Vzc29yPEJhc2UsIFQ+OjpnZXQoKSBjb25zdAoreworICAgIGlmICghc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwgfHwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+
KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgIHJldHVy
biBHZXRUeXBlKCk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
ZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9CisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBUPiBpbmxpbmUgYm9v
bCBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+Ojp3YXModHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3Nv
cjxCYXNlLCBUPjo6R2V0VHlwZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4ganNDYXN0PFQq
PihzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+anNWYWx1ZSgpLmFzQ2Vs
bCgpKSA9PSBvdGhlcjsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBpbmxp
bmUgY29uc3QgSlNWYWx1ZSogV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBVbmtub3duPjo6b3BlcmF0
b3ItPigpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlz
KS0+bV9pbXBsICYmIHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5zdGF0
ZSgpID09IFdlYWtJbXBsOjpMaXZlKTsKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PGNvbnN0IEJh
c2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJh
c2U+IGlubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25vd24+
OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBCYXNl
Kj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1w
bC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhc2U+IGlubGluZSB0eXBlbmFtZSBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25vd24+
OjpHZXRUeXBlIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93bj46OmdldCgpIGNvbnN0Cit7
CisgICAgaWYgKCFzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCB8fCBzdGF0
aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1wbDo6
TGl2ZSkKKyAgICAgICAgcmV0dXJuIEdldFR5cGUoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2VhaygpCisgICAgOiBtX2ltcGwoMCkK
K3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2Vh
ayhzdGQ6Om51bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgR2V0VHlwZSBnZXRUeXBlLCBXZWFrSGFuZGxlT3duZXIqIHdlYWtPd25lciwgdm9pZCog
Y29udGV4dCkKKyAgICA6IG1faW1wbChnbG9iYWxEYXRhLmhlYXAud2Vha0hlYXAoKS0+YWxsb2Nh
dGUoZ2V0VHlwZSwgd2Vha093bmVyLCBjb250ZXh0KSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2Vhayhjb25zdCBQYXNzV2VhayYgbykKKyAg
ICA6IG1faW1wbChvLmxlYWtJbXBsKCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRl
bXBsYXRlPHR5cGVuYW1lIFU+IGlubGluZSBQYXNzV2VhazxUPjo6UGFzc1dlYWsoY29uc3QgUGFz
c1dlYWs8VT4mIG8pCisgICAgOiBtX2ltcGwoby5sZWFrSW1wbCgpKQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46On5QYXNzV2VhaygpCit7CisgICAgaWYg
KCFtX2ltcGwpCisgICAgICAgIHJldHVybjsKKyAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShtX2lt
cGwpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBQYXNzV2VhazxUPjo6
b3BlcmF0b3IhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faW1wbCB8fCBtX2ltcGwtPnN0YXRl
KCkgIT0gV2Vha0ltcGw6OkxpdmUgfHwgIW1faW1wbC0+anNWYWx1ZSgpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9v
bFR5cGUqKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmll
ZEJvb2xUeXBlKj4oISEqdGhpcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQ
YXNzV2VhazxUPjo6UGFzc1dlYWsoV2Vha0ltcGwqIGltcGwpCis6IG1faW1wbChpbXBsKQorewor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2Vha0ltcGwqIFBhc3NXZWFrPFQ+Ojps
ZWFrSW1wbCgpIGNvbnN0CiB7Ci0gICAgSGFuZGxlU2xvdCBzbG90ID0gdGhpcy0+c2xvdCgpOwot
ICAgIGNvbnN0X2Nhc3Q8UGFzc1dlYWs8VD4qPih0aGlzKS0+c2V0U2xvdCgwKTsKLSAgICByZXR1
cm4gc2xvdDsKKyAgICBXZWFrSW1wbCogdG1wID0gMDsKKyAgICBzdGQ6OnN3YXAodG1wLCBjb25z
dF9jYXN0PFdlYWtJbXBsKiY+KG1faW1wbCkpOworICAgIHJldHVybiB0bXA7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFBhc3NXZWFrPFQ+IGFkb3B0V2VhayhIYW5kbGVTbG90IHNsb3QpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNzV2VhazxUPiBpbmxpbmUgYWRvcHRXZWFrKFdlYWtJbXBs
KiBpbXBsKQogewotICAgIHJldHVybiBQYXNzV2VhazxUPihzbG90KTsKKyAgICByZXR1cm4gUGFz
c1dlYWs8VD4oaW1wbCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFzc1dlYWs8VD4mIGEsIGNvbnN0IFBhc3NXZWFr
PFU+JiBiKSAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZy5oCShyZXZpc2lvbiAx
MTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtODEsMTEgKzgxLDE5IEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXIoKTsKICAgICB9
CiAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFzbG90KCkgfHwgISpzbG90
KCk7IH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQg
Y29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0
eXBlZGVmIEpTVmFsdWUgKEhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBv
cGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgPyBy
ZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7IH0KKwogICAgIHZv
aWQgc3dhcChTdHJvbmcmIG90aGVyKQogICAgIHsKICAgICAgICAgSGFuZGxlPFQ+Ojpzd2FwKG90
aGVyKTsKICAgICB9CiAKKyAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29uc3QgeyByZXR1cm4gSGFu
ZGxlVHlwZXM8VD46OmdldEZyb21TbG90KHRoaXMtPnNsb3QoKSk7IH0KKwogICAgIHZvaWQgc2V0
KEpTR2xvYmFsRGF0YSYsIEV4dGVybmFsVHlwZSk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4gU3Ryb25nJiBvcGVyYXRvcj0oY29uc3QgU3Ryb25nPFU+JiBvdGhlcikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWsuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTA5ICsyNywxMjkgQEAK
ICNkZWZpbmUgV2Vha19oCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
IkhhbmRsZS5oIgotI2luY2x1ZGUgIkhhbmRsZUhlYXAuaCIKICNpbmNsdWRlICJKU0dsb2JhbERh
dGEuaCIKICNpbmNsdWRlICJQYXNzV2Vhay5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotLy8gQSB3
ZWFrbHkgcmVmZXJlbmNlZCBoYW5kbGUgdGhhdCBiZWNvbWVzIDAgd2hlbiB0aGUgdmFsdWUgaXQg
cG9pbnRzIHRvIGlzIGdhcmJhZ2UgY29sbGVjdGVkLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNs
YXNzIFdlYWsgOiBwdWJsaWMgSGFuZGxlPFQ+IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNz
IFdlYWsgOiBwdWJsaWMgV2Vha0ltcGxBY2Nlc3NvcjxXZWFrPFQ+LCBUPiB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoV2Vhayk7Ci0KLSAgICB1c2luZyBIYW5kbGU8VD46OnNsb3Q7Ci0gICAg
dXNpbmcgSGFuZGxlPFQ+OjpzZXRTbG90OwotCiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBIYW5kbGU8VD46OkV4dGVybmFsVHlwZSBFeHRlcm5hbFR5cGU7CisgICAgZnJpZW5kIGNsYXNz
IFdlYWtJbXBsQWNjZXNzb3I8V2VhazxUPiwgVD47CisgICAgdXNpbmcgdHlwZW5hbWUgV2Vha0lt
cGxBY2Nlc3NvcjxXZWFrPFQ+LCBUPjo6R2V0VHlwZTsKIAotICAgIFdlYWsoKQotICAgICAgICA6
IEhhbmRsZTxUPigpCi0gICAgewotICAgIH0KLQotICAgIFdlYWsoc3RkOjpudWxscHRyX3QpCi0g
ICAgICAgIDogSGFuZGxlPFQ+KCkKLSAgICB7Ci0gICAgfQotCi0gICAgV2VhayhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEV4dGVybmFsVHlwZSBleHRlcm5hbFR5cGUgPSBFeHRlcm5hbFR5cGUo
KSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIgPSAwLCB2b2lkKiBjb250ZXh0ID0gMCkKLSAg
ICAgICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUo
KSkKLSAgICB7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+bWFrZVdlYWso
c2xvdCgpLCB3ZWFrT3duZXIsIGNvbnRleHQpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSGFu
ZGxlVHlwZXM8VD46OnRvSlNWYWx1ZShleHRlcm5hbFR5cGUpOwotICAgICAgICBIYW5kbGVIZWFw
OjpoZWFwRm9yKHNsb3QoKSktPndyaXRlQmFycmllcihzbG90KCksIHZhbHVlKTsKLSAgICAgICAg
KnNsb3QoKSA9IHZhbHVlOwotICAgIH0KLQotICAgIGVudW0gQWRvcHRUYWcgeyBBZG9wdCB9Owot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFdlYWsoQWRvcHRUYWcsIEhhbmRsZTxVPiBoYW5kbGUp
Ci0gICAgICAgIDogSGFuZGxlPFQ+KGhhbmRsZS5zbG90KCkpCi0gICAgewotICAgICAgICB2YWxp
ZGF0ZUNlbGwoZ2V0KCkpOwotICAgIH0KKyAgICBXZWFrKCk7CisgICAgV2VhayhzdGQ6Om51bGxw
dHJfdCk7CisgICAgV2VhayhKU0dsb2JhbERhdGEmLCBHZXRUeXBlID0gR2V0VHlwZSgpLCBXZWFr
SGFuZGxlT3duZXIqID0gMCwgdm9pZCogY29udGV4dCA9IDApOwogCiAgICAgZW51bSBIYXNoVGFi
bGVEZWxldGVkVmFsdWVUYWcgeyBIYXNoVGFibGVEZWxldGVkVmFsdWUgfTsKLSAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc2xvdCgpID09IGhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpOyB9Ci0gICAgV2VhayhIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCi0g
ICAgICAgIDogSGFuZGxlPFQ+KGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQotICAgIHsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBXZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvdGhl
cikKLSAgICAgICAgOiBIYW5kbGU8VD4ob3RoZXIubGVha0hhbmRsZSgpKQotICAgIHsKLSAgICB9
Ci0KLSAgICB+V2VhaygpCi0gICAgewotICAgICAgICBjbGVhcigpOwotICAgIH0KLQotICAgIHZv
aWQgc3dhcChXZWFrJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEhhbmRsZTxUPjo6c3dhcChvdGhl
cik7Ci0gICAgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdDsKKyAg
ICBXZWFrKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZyk7CiAKLSAgICBXZWFrJiBvcGVyYXRvcj0o
Y29uc3QgUGFzc1dlYWs8VD4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBXZWFrKGNvbnN0
IFBhc3NXZWFrPFU+Jik7CiAKLSAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29uc3QgeyByZXR1cm4g
IEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdChzbG90KCkpOyB9Ci0gICAgCi0gICAgUGFzc1dl
YWs8VD4gcmVsZWFzZSgpIHsgUGFzc1dlYWs8VD4gdG1wID0gYWRvcHRXZWFrPFQ+KHNsb3QoKSk7
IHNldFNsb3QoMCk7IHJldHVybiB0bXA7IH0KKyAgICB+V2VhaygpOwogCi0gICAgdm9pZCBjbGVh
cigpCi0gICAgewotICAgICAgICBpZiAoIXNsb3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5kZWFsbG9jYXRlKHNsb3QoKSk7Ci0g
ICAgICAgIHNldFNsb3QoMCk7Ci0gICAgfQorICAgIHZvaWQgc3dhcChXZWFrJik7CisgICAgV2Vh
ayYgb3BlcmF0b3I9KGNvbnN0IFBhc3NXZWFrPFQ+Jik7CiAgICAgCi0gICAgSGFuZGxlU2xvdCBs
ZWFrSGFuZGxlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChIYW5kbGVIZWFwOjpoZWFwRm9yKHNs
b3QoKSktPmhhc0ZpbmFsaXplcihzbG90KCkpKTsKLSAgICAgICAgSGFuZGxlU2xvdCByZXN1bHQg
PSBzbG90KCk7Ci0gICAgICAgIHNldFNsb3QoMCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CisKKyAgICAvLyBUaGlzIGNvbnZlcnNp
b24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRv
IG90aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNlOjoq
VW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSoo
KSBjb25zdDsKIAorICAgIFBhc3NXZWFrPFQ+IHJlbGVhc2UoKTsKKyAgICB2b2lkIGNsZWFyKCk7
CisgICAgCiBwcml2YXRlOgotICAgIHN0YXRpYyBIYW5kbGVTbG90IGhhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SGFuZGxlU2xvdD4oLTEpOyB9CisgICAg
c3RhdGljIFdlYWtJbXBsKiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKworICAgIFdlYWtJbXBs
KiBtX2ltcGw7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2Vh
aygpCisgICAgOiBtX2ltcGwoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IFdlYWs8VD46OldlYWsoc3RkOjpudWxscHRyX3QpCisgICAgOiBtX2ltcGwoMCkKK3sKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWsoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBHZXRUeXBlIGdldFR5cGUsIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyLCB2
b2lkKiBjb250ZXh0KQorICAgIDogbV9pbXBsKGdsb2JhbERhdGEuaGVhcC53ZWFrSGVhcCgpLT5h
bGxvY2F0ZShnZXRUeXBlLCB3ZWFrT3duZXIsIGNvbnRleHQpKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFrPFQ+Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbCA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWsoV2VhazxUPjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKQorICAgIDogbV9pbXBsKGhhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiAgaW5saW5lIFdlYWs8VD46OldlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG90aGVyKQorICAgIDog
bV9pbXBsKG90aGVyLmxlYWtJbXBsKCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBXZWFrPFQ+Ojp+V2VhaygpCit7CisgICAgY2xlYXIoKTsKK30KKwogdGVtcGxhdGU8Y2xh
c3MgVD4gaW5saW5lIHZvaWQgc3dhcChXZWFrPFQ+JiBhLCBXZWFrPFQ+JiBiKQogewogICAgIGEu
c3dhcChiKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgV2VhazxUPjo6
c3dhcChXZWFrJiBvdGhlcikKK3sKKyAgICBzdGQ6OnN3YXAobV9pbXBsLCBvdGhlci5tX2ltcGwp
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPiYgV2VhazxUPjo6b3Bl
cmF0b3I9KGNvbnN0IFBhc3NXZWFrPFQ+JiBvKQogewogICAgIGNsZWFyKCk7Ci0gICAgc2V0U2xv
dChvLmxlYWtIYW5kbGUoKSk7CisgICAgbV9pbXBsID0gby5sZWFrSW1wbCgpOwogICAgIHJldHVy
biAqdGhpczsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgV2VhazxUPjo6
b3BlcmF0b3IhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faW1wbCB8fCAhbV9pbXBsLT5qc1Zh
bHVlKCkgfHwgbV9pbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSooKSBjb25zdAoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9v
bFR5cGUqPighISp0aGlzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NX
ZWFrPFQ+IFdlYWs8VD46OnJlbGVhc2UoKQoreworICAgIFBhc3NXZWFrPFQ+IHRtcCA9IGFkb3B0
V2VhazxUPihtX2ltcGwpOworICAgIG1faW1wbCA9IDA7CisgICAgcmV0dXJuIHRtcDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgV2VhazxUPjo6Y2xlYXIoKQoreworICAg
IGlmICghbV9pbXBsKQorICAgICAgICByZXR1cm47CisgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUo
bV9pbXBsKTsKKyAgICBtX2ltcGwgPSAwOworfQorICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIFdlYWtJbXBsKiBXZWFrPFQ+OjpoYXNoVGFibGVEZWxldGVkVmFsdWUoKQoreworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4oLTEpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0xNTEsNyArMTcxLDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM8SgogICAgIHN0YXRpYyBQYXNzT3V0VHlwZSBw
YXNzT3V0KFN0b3JhZ2VUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUucmVsZWFzZSgpOyB9CiAg
ICAgc3RhdGljIFBhc3NPdXRUeXBlIHBhc3NPdXQoRW1wdHlWYWx1ZVR5cGUpIHsgcmV0dXJuIFBh
c3NPdXRUeXBlKCk7IH0KIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgU3RvcmFnZVR5cGU6OkV4dGVy
bmFsVHlwZSBQZWVrVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFN0b3JhZ2VUeXBlOjpHZXRU
eXBlIFBlZWtUeXBlOwogICAgIHN0YXRpYyBQZWVrVHlwZSBwZWVrKGNvbnN0IFN0b3JhZ2VUeXBl
JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCk7IH0KICAgICBzdGF0aWMgUGVla1R5cGUgcGVl
ayhFbXB0eVZhbHVlVHlwZSkgeyByZXR1cm4gUGVla1R5cGUoKTsgfQogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YWtCbG9jay5oIgorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkhlYXBSb290VmlzaXRv
ci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworV2Vha0Js
b2NrKiBXZWFrQmxvY2s6OmNyZWF0ZSgpCit7CisgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFs
bG9jYXRpb24gPSBQYWdlQWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKGJsb2NrU2l6ZSwgYmxv
Y2tTaXplLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYgKCFzdGF0aWNfY2Fz
dDxib29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gbmV3IChO
b3ROdWxsLCBhbGxvY2F0aW9uLmJhc2UoKSkgV2Vha0Jsb2NrKGFsbG9jYXRpb24pOworfQorCit2
b2lkIFdlYWtCbG9jazo6ZGVzdHJveShXZWFrQmxvY2sqIGJsb2NrKQoreworICAgIGJsb2NrLT5t
X2FsbG9jYXRpb24uZGVhbGxvY2F0ZSgpOworfQorCitXZWFrQmxvY2s6OldlYWtCbG9jayhQYWdl
QWxsb2NhdGlvbkFsaWduZWQmIGFsbG9jYXRpb24pCisgICAgOiBIZWFwQmxvY2soYWxsb2NhdGlv
bikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYWtJbXBsQ291bnQoKTsgKytpKSB7
CisgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsKKyAgICAgICAg
bmV3IChOb3ROdWxsLCB3ZWFrSW1wbCkgV2Vha0ltcGw7CisgICAgICAgIGFkZFRvRnJlZUxpc3Qo
Jm1fc3dlZXBSZXN1bHQuZnJlZUxpc3QsIHdlYWtJbXBsKTsKKyAgICB9CisKKyAgICBBU1NFUlQo
IW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkgJiYgbV9zd2VlcFJlc3VsdC5ibG9ja0lzRnJlZSk7Cit9
CisKK3ZvaWQgV2Vha0Jsb2NrOjpmaW5hbGl6ZUFsbCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB3ZWFrSW1wbENvdW50KCk7ICsraSkgeworICAgICAgICBXZWFrSW1wbCogd2Vha0lt
cGwgPSAmd2Vha0ltcGxzKClbaV07CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA+PSBX
ZWFrSW1wbDo6RmluYWxpemVkKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHdlYWtJ
bXBsLT5zZXRTdGF0ZShXZWFrSW1wbDo6RGVhZCk7CisgICAgICAgIGZpbmFsaXplKHdlYWtJbXBs
KTsKKyAgICB9Cit9CisKK3ZvaWQgV2Vha0Jsb2NrOjpzd2VlcCgpCit7CisgICAgaWYgKCFtX3N3
ZWVwUmVzdWx0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTd2VlcFJlc3VsdCBz
d2VlcFJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYWtJbXBsQ291bnQoKTsg
KytpKSB7CisgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsKKyAg
ICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID09IFdlYWtJbXBsOjpEZWFkKQorICAgICAgICAg
ICAgZmluYWxpemUod2Vha0ltcGwpOworICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPT0g
V2Vha0ltcGw6OkRlYWxsb2NhdGVkKQorICAgICAgICAgICAgYWRkVG9GcmVlTGlzdCgmc3dlZXBS
ZXN1bHQuZnJlZUxpc3QsIHdlYWtJbXBsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3dl
ZXBSZXN1bHQuYmxvY2tJc0ZyZWUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtX3N3ZWVwUmVzdWx0
ID0gc3dlZXBSZXN1bHQ7CisgICAgQVNTRVJUKCFtX3N3ZWVwUmVzdWx0LmlzTnVsbCgpKTsKK30K
Kwordm9pZCBXZWFrQmxvY2s6OnZpc2l0TGl2ZVdlYWtJbXBscyhIZWFwUm9vdFZpc2l0b3ImIGhl
YXBSb290VmlzaXRvcikKK3sKKyAgICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBsZXRlbHkgZW1wdHks
IGEgdmlzaXQgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgorICAgIGlmICghbV9zd2VlcFJlc3VsdC5p
c051bGwoKSAmJiBtX3N3ZWVwUmVzdWx0LmJsb2NrSXNGcmVlKQorICAgICAgICByZXR1cm47CisK
KyAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IGhlYXBSb290VmlzaXRvci52aXNpdG9yKCk7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYWtJbXBsQ291bnQoKTsgKytpKSB7CisgICAg
ICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsKKyAgICAgICAgaWYgKHdl
YWtJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgY29uc3QgSlNWYWx1ZSYganNWYWx1ZSA9IHdlYWtJbXBsLT5qc1ZhbHVlKCk7
CisgICAgICAgIGlmICghanNWYWx1ZSB8fCAhanNWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIEpTQ2VsbCoganNDZWxsID0ganNWYWx1ZS5hc0NlbGwoKTsK
KyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGpzQ2VsbCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBXZWFrSGFuZGxlT3duZXIqIHdlYWtIYW5kbGVPd25lciA9IHdlYWtJbXBs
LT53ZWFrSGFuZGxlT3duZXIoKTsKKyAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXIpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2Fz
dDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmY29u
c3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpOworICAgIH0KK30KKwordm9pZCBXZWFrQmxvY2s6
OnZpc2l0RGVhZFdlYWtJbXBscyhIZWFwUm9vdFZpc2l0b3ImKQoreworICAgIC8vIElmIGEgYmxv
Y2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCisg
ICAgaWYgKCFtX3N3ZWVwUmVzdWx0LmlzTnVsbCgpICYmIG1fc3dlZXBSZXN1bHQuYmxvY2tJc0Zy
ZWUpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0lt
cGxDb3VudCgpOyArK2kpIHsKKyAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBs
cygpW2ldOworICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPiBXZWFrSW1wbDo6RGVhZCkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IEpTVmFsdWUmIGpzVmFsdWUg
PSB3ZWFrSW1wbC0+anNWYWx1ZSgpOworICAgICAgICBpZiAoIWpzVmFsdWUgfHwgIWpzVmFsdWUu
aXNDZWxsKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBKU0NlbGwqIGpzQ2Vs
bCA9IGpzVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChqc0NlbGwp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgd2Vha0ltcGwtPnNldFN0YXRlKFdl
YWtJbXBsOjpEZWFkKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYWtCbG9ja19oCisjZGVmaW5lIFdlYWtCbG9j
a19oCisKKyNpbmNsdWRlICJIZWFwQmxvY2suaCIKKyNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIu
aCIKKyNpbmNsdWRlICJXZWFrSW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0
Lmg+CisjaW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0aW9uQWxpZ25lZC5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEhlYXBSb290Vmlz
aXRvcjsKK2NsYXNzIEpTVmFsdWU7CitjbGFzcyBXZWFrSGFuZGxlT3duZXI7CisKK2NsYXNzIFdl
YWtCbG9jayA6IHB1YmxpYyBIZWFwQmxvY2sgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgYmxvY2tTaXplID0gNCAqIEtCOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tN
YXNrID0gfihibG9ja1NpemUgLSAxKTsKKworICAgIHN0cnVjdCBGcmVlQ2VsbCB7CisgICAgICAg
IEZyZWVDZWxsKiBuZXh0OworICAgIH07CisKKyAgICBzdHJ1Y3QgU3dlZXBSZXN1bHQgeworICAg
ICAgICBTd2VlcFJlc3VsdCgpOworICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0OworCisgICAg
ICAgIGJvb2wgYmxvY2tJc0ZyZWU7CisgICAgICAgIEZyZWVDZWxsKiBmcmVlTGlzdDsKKyAgICB9
OworCisgICAgc3RhdGljIFdlYWtCbG9jayogY3JlYXRlKCk7CisgICAgc3RhdGljIHZvaWQgZGVz
dHJveShXZWFrQmxvY2sqKTsKKworICAgIHN0YXRpYyBXZWFrQmxvY2sqIGJsb2NrRm9yKFdlYWtJ
bXBsKik7CisgICAgc3RhdGljIFdlYWtJbXBsKiBhc1dlYWtJbXBsKEZyZWVDZWxsKik7CisKKyAg
ICB2b2lkIHN3ZWVwKCk7CisgICAgY29uc3QgU3dlZXBSZXN1bHQmIHN3ZWVwUmVzdWx0KCk7Cisg
ICAgU3dlZXBSZXN1bHQgdGFrZVN3ZWVwUmVzdWx0KCk7CisKKyAgICB2b2lkIGRlYWxsb2NhdGUo
V2Vha0ltcGwqKTsKKworICAgIHZvaWQgdmlzaXRMaXZlV2Vha0ltcGxzKEhlYXBSb290VmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXREZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpOworCisg
ICAgdm9pZCBmaW5hbGl6ZUFsbCgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBGcmVlQ2VsbCog
YXNGcmVlQ2VsbChXZWFrSW1wbCopOworCisgICAgV2Vha0Jsb2NrKFBhZ2VBbGxvY2F0aW9uQWxp
Z25lZCYpOworICAgIFdlYWtJbXBsKiBmaXJzdFdlYWtJbXBsKCk7CisgICAgdm9pZCBmaW5hbGl6
ZShXZWFrSW1wbCopOworICAgIFdlYWtJbXBsKiB3ZWFrSW1wbHMoKTsKKyAgICBzaXplX3Qgd2Vh
a0ltcGxDb3VudCgpOworICAgIHZvaWQgYWRkVG9GcmVlTGlzdChGcmVlQ2VsbCoqLCBXZWFrSW1w
bCopOworCisgICAgU3dlZXBSZXN1bHQgbV9zd2VlcFJlc3VsdDsKK307CisKK2lubGluZSBXZWFr
QmxvY2s6OlN3ZWVwUmVzdWx0OjpTd2VlcFJlc3VsdCgpCisgICAgOiBibG9ja0lzRnJlZSh0cnVl
KQorICAgICwgZnJlZUxpc3QoMCkKK3sKKyAgICBBU1NFUlQoaXNOdWxsKCkpOworfQorCitpbmxp
bmUgYm9vbCBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0Ojppc051bGwoKSBjb25zdAoreworICAgIHJl
dHVybiBibG9ja0lzRnJlZSAmJiAhZnJlZUxpc3Q7IC8vIFRoaXMgc3RhdGUgaXMgaW1wb3NzaWJs
ZSwgc28gd2UgY2FuIHVzZSBpdCB0byBtZWFuIG51bGwuCit9CisKK2lubGluZSBXZWFrQmxvY2sq
IFdlYWtCbG9jazo6YmxvY2tGb3IoV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFdlYWtCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih3
ZWFrSW1wbCkgJiBibG9ja01hc2spOworfQorCitpbmxpbmUgV2Vha0ltcGwqIFdlYWtCbG9jazo6
YXNXZWFrSW1wbChGcmVlQ2VsbCogZnJlZUNlbGwpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8V2Vha0ltcGwqPihmcmVlQ2VsbCk7Cit9CisKK2lubGluZSBXZWFrQmxvY2s6OlN3ZWVw
UmVzdWx0IFdlYWtCbG9jazo6dGFrZVN3ZWVwUmVzdWx0KCkKK3sKKyAgICBTd2VlcFJlc3VsdCB0
bXA7CisgICAgc3RkOjpzd2FwKHRtcCwgbV9zd2VlcFJlc3VsdCk7CisgICAgQVNTRVJUKG1fc3dl
ZXBSZXN1bHQuaXNOdWxsKCkpOworICAgIHJldHVybiB0bXA7Cit9CisKK2lubGluZSBjb25zdCBX
ZWFrQmxvY2s6OlN3ZWVwUmVzdWx0JiBXZWFrQmxvY2s6OnN3ZWVwUmVzdWx0KCkKK3sKKyAgICBy
ZXR1cm4gbV9zd2VlcFJlc3VsdDsKK30KKworaW5saW5lIFdlYWtCbG9jazo6RnJlZUNlbGwqIFdl
YWtCbG9jazo6YXNGcmVlQ2VsbChXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwqPih3ZWFrSW1wbCk7Cit9CisKK2lubGluZSB2b2lkIFdl
YWtCbG9jazo6ZGVhbGxvY2F0ZShXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgd2Vha0ltcGwt
PnNldFN0YXRlKFdlYWtJbXBsOjpEZWFsbG9jYXRlZCk7Cit9CisKK2lubGluZSB2b2lkIFdlYWtC
bG9jazo6ZmluYWxpemUoV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIEFTU0VSVCh3ZWFrSW1w
bC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6RGVhZCk7CisgICAgd2Vha0ltcGwtPnNldFN0YXRlKFdl
YWtJbXBsOjpGaW5hbGl6ZWQpOworICAgIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVy
ID0gd2Vha0ltcGwtPndlYWtIYW5kbGVPd25lcigpOworICAgIGlmICghd2Vha0hhbmRsZU93bmVy
KQorICAgICAgICByZXR1cm47CisgICAgd2Vha0hhbmRsZU93bmVyLT5maW5hbGl6ZShIYW5kbGU8
VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPih3ZWFrSW1wbC0+anNWYWx1
ZSgpKSksIHdlYWtJbXBsLT5jb250ZXh0KCkpOworfQorCitpbmxpbmUgV2Vha0ltcGwqIFdlYWtC
bG9jazo6d2Vha0ltcGxzKCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXZWFrSW1w
bCo+KHRoaXMpICsgKChzaXplb2YoV2Vha0Jsb2NrKSArIHNpemVvZihXZWFrSW1wbCkgLSAxKSAv
IHNpemVvZihXZWFrSW1wbCkpOworfQorCitpbmxpbmUgc2l6ZV90IFdlYWtCbG9jazo6d2Vha0lt
cGxDb3VudCgpCit7CisgICAgcmV0dXJuIChibG9ja1NpemUgLyBzaXplb2YoV2Vha0ltcGwpKSAt
ICgoc2l6ZW9mKFdlYWtCbG9jaykgKyBzaXplb2YoV2Vha0ltcGwpIC0gMSkgLyBzaXplb2YoV2Vh
a0ltcGwpKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Jsb2NrOjphZGRUb0ZyZWVMaXN0KEZyZWVD
ZWxsKiogZnJlZUxpc3QsIFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICBBU1NFUlQod2Vha0lt
cGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkRlYWxsb2NhdGVkKTsKKyAgICBGcmVlQ2VsbCogZnJl
ZUNlbGwgPSBhc0ZyZWVDZWxsKHdlYWtJbXBsKTsKKyAgICBBU1NFUlQoISpmcmVlTGlzdCB8fCAo
KGNoYXIqKSpmcmVlTGlzdCA+IChjaGFyKil0aGlzICYmIChjaGFyKikqZnJlZUxpc3QgPCAoY2hh
ciopdGhpcyArIGJsb2NrU2l6ZSkpOworICAgIEFTU0VSVCgoY2hhciopZnJlZUNlbGwgPiAoY2hh
ciopdGhpcyAmJiAoY2hhciopZnJlZUNlbGwgPCAoY2hhciopdGhpcyArIGJsb2NrU2l6ZSk7Cisg
ICAgZnJlZUNlbGwtPm5leHQgPSAqZnJlZUxpc3Q7CisgICAgKmZyZWVMaXN0ID0gZnJlZUNlbGw7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gV2Vha0Jsb2NrX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2Vha0hhbmRsZU93bmVyLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBTbG90VmlzaXRvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEhhbmRs
ZTsKKworV2Vha0hhbmRsZU93bmVyOjp+V2Vha0hhbmRsZU93bmVyKCkKK3sKK30KKworYm9vbCBX
ZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3du
Piwgdm9pZCosIFNsb3RWaXNpdG9yJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
V2Vha0hhbmRsZU93bmVyOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqKQoreworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtIYW5kbGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYWtIYW5kbGVPd25lcl9oCisjZGVmaW5lIFdlYWtIYW5kbGVP
d25lcl9oCisKKyNpbmNsdWRlICJIYW5kbGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFNsb3RWaXNpdG9yOworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFrSGFuZGxlT3duZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOworICAgIHZpcnR1YWwg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxV
bmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIFdlYWtIYW5kbGVPd25lcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha0hlYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha0hlYXAuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWFrSGVhcC5oIgorCisjaW5jbHVkZSAi
SGVhcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworV2Vha0hlYXA6On5XZWFrSGVhcCgpCit7Cisg
ICAgV2Vha0Jsb2NrKiBuZXh0ID0gMDsKKyAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBzdGF0
aWNfY2FzdDxXZWFrQmxvY2sqPihtX2Jsb2Nrcy5oZWFkKCkpOyBibG9jazsgYmxvY2sgPSBuZXh0
KSB7CisgICAgICAgIG5leHQgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihibG9jay0+bmV4dCgp
KTsKKyAgICAgICAgV2Vha0Jsb2NrOjpkZXN0cm95KGJsb2NrKTsKKyAgICB9CisgICAgbV9ibG9j
a3MuY2xlYXIoKTsKK30KKwordm9pZCBXZWFrSGVhcDo6ZmluYWxpemVBbGwoKQoreworICAgIGZv
ciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhl
YWQoKSk7IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0
KCkpKQorICAgICAgICBibG9jay0+ZmluYWxpemVBbGwoKTsKK30KKwordm9pZCBXZWFrSGVhcDo6
dmlzaXRMaXZlV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3Ig
KFdlYWtCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihtX2Jsb2Nrcy5oZWFk
KCkpOyBibG9jazsgYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihibG9jay0+bmV4dCgp
KSkKKyAgICAgICAgYmxvY2stPnZpc2l0TGl2ZVdlYWtJbXBscyh2aXNpdG9yKTsKK30KKwordm9p
ZCBXZWFrSGVhcDo6dmlzaXREZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPiht
X2Jsb2Nrcy5oZWFkKCkpOyBibG9jazsgYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihi
bG9jay0+bmV4dCgpKSkKKyAgICAgICAgYmxvY2stPnZpc2l0RGVhZFdlYWtJbXBscyh2aXNpdG9y
KTsKK30KKwordm9pZCBXZWFrSGVhcDo6c3dlZXAoKQoreworICAgIFdlYWtCbG9jayogbmV4dDsK
KyAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihtX2Js
b2Nrcy5oZWFkKCkpOyBibG9jazsgYmxvY2sgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBzdGF0
aWNfY2FzdDxXZWFrQmxvY2sqPihibG9jay0+bmV4dCgpKTsKKworICAgICAgICAvLyBJZiBhIGJs
b2NrIGlzIGNvbXBsZXRlbHkgZW1wdHksIGEgbmV3IHN3ZWVwIHdvbid0IGhhdmUgYW55IGVmZmVj
dC4KKyAgICAgICAgaWYgKCFibG9jay0+c3dlZXBSZXN1bHQoKS5pc051bGwoKSAmJiBibG9jay0+
c3dlZXBSZXN1bHQoKS5ibG9ja0lzRnJlZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGJsb2NrLT50YWtlU3dlZXBSZXN1bHQoKTsgLy8gRm9yY2UgYSBuZXcgc3dlZXAgYnkgZGlz
Y2FyZGluZyB0aGUgbGFzdCBzd2VlcC4KKyAgICAgICAgYmxvY2stPnN3ZWVwKCk7CisgICAgfQor
fQorCit2b2lkIFdlYWtIZWFwOjpyZXNldEFsbG9jYXRvcigpCit7CisgICAgbV9hbGxvY2F0b3Ig
PSAwOworICAgIG1fbmV4dEFsbG9jYXRvciA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxv
Y2tzLmhlYWQoKSk7Cit9CisKK1dlYWtCbG9jazo6RnJlZUNlbGwqIFdlYWtIZWFwOjpmaW5kQWxs
b2NhdG9yKCkKK3sKKyAgICBpZiAoV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWxsb2NhdG9yID0gdHJ5
RmluZEFsbG9jYXRvcigpKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yOworCisgICAgbV9oZWFw
LT5hZGRUb1dhdGVyTWFyayhXZWFrQmxvY2s6OmJsb2NrU2l6ZSk7CisKKyAgICAvLyBhZGRUb1dh
dGVyTWFyaygpIG1heSBjYXVzZSBhIEdDLCBzbyB0cnkgYWdhaW4uCisgICAgaWYgKFdlYWtCbG9j
azo6RnJlZUNlbGwqIGFsbG9jYXRvciA9IHRyeUZpbmRBbGxvY2F0b3IoKSkKKyAgICAgICAgcmV0
dXJuIGFsbG9jYXRvcjsKKworICAgIHJldHVybiBhZGRBbGxvY2F0b3IoKTsKK30KKworV2Vha0Js
b2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OnRyeUZpbmRBbGxvY2F0b3IoKQoreworICAgIHdoaWxl
IChtX25leHRBbGxvY2F0b3IpIHsKKyAgICAgICAgV2Vha0Jsb2NrKiBibG9jayA9IG1fbmV4dEFs
bG9jYXRvcjsKKyAgICAgICAgbV9uZXh0QWxsb2NhdG9yID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2Nr
Kj4obV9uZXh0QWxsb2NhdG9yLT5uZXh0KCkpOworCisgICAgICAgIGJsb2NrLT5zd2VlcCgpOwor
ICAgICAgICBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0IHN3ZWVwUmVzdWx0ID0gYmxvY2stPnRha2VT
d2VlcFJlc3VsdCgpOworICAgICAgICBpZiAoc3dlZXBSZXN1bHQuZnJlZUxpc3QpCisgICAgICAg
ICAgICByZXR1cm4gc3dlZXBSZXN1bHQuZnJlZUxpc3Q7CisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK1dlYWtCbG9jazo6RnJlZUNlbGwqIFdlYWtIZWFwOjphZGRBbGxvY2F0b3IoKQorewor
ICAgIFdlYWtCbG9jayogYmxvY2sgPSBXZWFrQmxvY2s6OmNyZWF0ZSgpOworICAgIG1fYmxvY2tz
LmFwcGVuZChibG9jayk7CisgICAgV2Vha0Jsb2NrOjpTd2VlcFJlc3VsdCBzd2VlcFJlc3VsdCA9
IGJsb2NrLT50YWtlU3dlZXBSZXN1bHQoKTsKKyAgICBBU1NFUlQoIXN3ZWVwUmVzdWx0LmlzTnVs
bCgpICYmIHN3ZWVwUmVzdWx0LmZyZWVMaXN0KTsKKyAgICByZXR1cm4gc3dlZXBSZXN1bHQuZnJl
ZUxpc3Q7Cit9CisKK3ZvaWQgV2Vha0hlYXA6OnJlbW92ZUFsbG9jYXRvcihXZWFrQmxvY2sqIGJs
b2NrKQoreworICAgIG1fYmxvY2tzLnJlbW92ZShibG9jayk7CisgICAgV2Vha0Jsb2NrOjpkZXN0
cm95KGJsb2NrKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIZWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrSGVhcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWFrSGVhcF9oCisjZGVmaW5lIFdlYWtIZWFwX2gKKworI2luY2x1ZGUg
IldlYWtCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcDsKK2NsYXNzIFdl
YWtJbXBsOworCitjbGFzcyBXZWFrSGVhcCB7CitwdWJsaWM6CisgICAgV2Vha0hlYXAoSGVhcCop
OworICAgIHZvaWQgZmluYWxpemVBbGwoKTsKKyAgICB+V2Vha0hlYXAoKTsKKworICAgIFdlYWtJ
bXBsKiBhbGxvY2F0ZShKU1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqID0gMCwgdm9pZCogY29udGV4
dCA9IDApOworICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoV2Vha0ltcGwqKTsKKworICAgIHZv
aWQgdmlzaXRMaXZlV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRE
ZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpOworCisgICAgdm9pZCBzd2VlcCgpOworICAg
IHZvaWQgcmVzZXRBbGxvY2F0b3IoKTsKKworcHJpdmF0ZToKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBXZWFrQmxvY2s6OkZyZWVDZWxsKiBmaW5kQWxsb2NhdG9yKCk7CisgICAgV2Vha0Jsb2NrOjpG
cmVlQ2VsbCogdHJ5RmluZEFsbG9jYXRvcigpOworICAgIFdlYWtCbG9jazo6RnJlZUNlbGwqIGFk
ZEFsbG9jYXRvcigpOworICAgIHZvaWQgcmVtb3ZlQWxsb2NhdG9yKFdlYWtCbG9jayopOworCisg
ICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogbV9hbGxvY2F0b3I7CisgICAgV2Vha0Jsb2NrKiBtX25l
eHRBbGxvY2F0b3I7CisgICAgRG91Ymx5TGlua2VkTGlzdDxIZWFwQmxvY2s+IG1fYmxvY2tzOwor
ICAgIEhlYXAqIG1faGVhcDsKK307CisKK2lubGluZSBXZWFrSGVhcDo6V2Vha0hlYXAoSGVhcCog
aGVhcCkKKyAgICA6IG1fYWxsb2NhdG9yKDApCisgICAgLCBtX25leHRBbGxvY2F0b3IoMCkKKyAg
ICAsIG1faGVhcChoZWFwKQoreworfQorCitpbmxpbmUgV2Vha0ltcGwqIFdlYWtIZWFwOjphbGxv
Y2F0ZShKU1ZhbHVlIGpzVmFsdWUsIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyLCB2
b2lkKiBjb250ZXh0KQoreworICAgIFdlYWtCbG9jazo6RnJlZUNlbGwqIGFsbG9jYXRvciA9IG1f
YWxsb2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBhbGxvY2F0b3IgPSBmaW5k
QWxsb2NhdG9yKCk7CisgICAgbV9hbGxvY2F0b3IgPSBhbGxvY2F0b3ItPm5leHQ7CisKKyAgICBX
ZWFrSW1wbCogd2Vha0ltcGwgPSBXZWFrQmxvY2s6OmFzV2Vha0ltcGwoYWxsb2NhdG9yKTsKKyAg
ICByZXR1cm4gbmV3IChOb3ROdWxsLCB3ZWFrSW1wbCkgV2Vha0ltcGwoanNWYWx1ZSwgd2Vha0hh
bmRsZU93bmVyLCBjb250ZXh0KTsKK30KKworaW5saW5lIHZvaWQgV2Vha0hlYXA6OmRlYWxsb2Nh
dGUoV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIFdlYWtCbG9jazo6YmxvY2tGb3Iod2Vha0lt
cGwpLT5kZWFsbG9jYXRlKHdlYWtJbXBsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBXZWFrSGVhcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBs
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW1wbC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vh
a0ltcGxfaAorI2RlZmluZSBXZWFrSW1wbF9oCisKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWFrSGFuZGxlT3duZXI7CisKK2NsYXNzIFdlYWtJbXBs
IHsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgTGl2ZSAgICAgICAgPSAweDAs
CisgICAgICAgIERlYWQgICAgICAgID0gMHgxLAorICAgICAgICBGaW5hbGl6ZWQgICA9IDB4MiwK
KyAgICAgICAgRGVhbGxvY2F0ZWQgPSAweDMKKyAgICB9OworCisgICAgZW51bSB7CisgICAgICAg
IFN0YXRlTWFzayAgID0gMHgzCisgICAgfTsKKworICAgIFdlYWtJbXBsKCk7CisgICAgV2Vha0lt
cGwoSlNWYWx1ZSwgV2Vha0hhbmRsZU93bmVyKiwgdm9pZCogY29udGV4dCk7CisKKyAgICBTdGF0
ZSBzdGF0ZSgpOworICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUpOworCisgICAgY29uc3QgSlNWYWx1
ZSYganNWYWx1ZSgpOworICAgIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyKCk7Cisg
ICAgdm9pZCogY29udGV4dCgpOworCisgICAgc3RhdGljIFdlYWtJbXBsKiBhc1dlYWtJbXBsKEpT
VmFsdWUqKTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBKU1ZhbHVlIG1fanNWYWx1ZTsKKyAgICBX
ZWFrSGFuZGxlT3duZXIqIG1fd2Vha0hhbmRsZU93bmVyOworICAgIHZvaWQqIG1fY29udGV4dDsK
K307CisKK2lubGluZSBXZWFrSW1wbDo6V2Vha0ltcGwoKQorICAgIDogbV93ZWFrSGFuZGxlT3du
ZXIoMCkKKyAgICAsIG1fY29udGV4dCgwKQoreworICAgIHNldFN0YXRlKERlYWxsb2NhdGVkKTsK
K30KKworaW5saW5lIFdlYWtJbXBsOjpXZWFrSW1wbChKU1ZhbHVlIGpzVmFsdWUsIFdlYWtIYW5k
bGVPd25lciogd2Vha0hhbmRsZU93bmVyLCB2b2lkKiBjb250ZXh0KQorICAgIDogbV9qc1ZhbHVl
KGpzVmFsdWUpCisgICAgLCBtX3dlYWtIYW5kbGVPd25lcih3ZWFrSGFuZGxlT3duZXIpCisgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKK3sKKyAgICBBU1NFUlQoc3RhdGUoKSA9PSBMaXZlKTsKK30K
KworaW5saW5lIFdlYWtJbXBsOjpTdGF0ZSBXZWFrSW1wbDo6c3RhdGUoKQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTdGF0ZT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fd2Vha0hh
bmRsZU93bmVyKSAmIFN0YXRlTWFzayk7Cit9CisKK2lubGluZSB2b2lkIFdlYWtJbXBsOjpzZXRT
dGF0ZShXZWFrSW1wbDo6U3RhdGUgc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlID49IHRoaXMt
PnN0YXRlKCkpOworICAgIG1fd2Vha0hhbmRsZU93bmVyID0gcmVpbnRlcnByZXRfY2FzdDxXZWFr
SGFuZGxlT3duZXIqPigocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fd2Vha0hhbmRsZU93
bmVyKSAmIH5TdGF0ZU1hc2spIHwgc3RhdGUpOworfQorCitpbmxpbmUgY29uc3QgSlNWYWx1ZSYg
V2Vha0ltcGw6OmpzVmFsdWUoKQoreworICAgIHJldHVybiBtX2pzVmFsdWU7Cit9CisKK2lubGlu
ZSBXZWFrSGFuZGxlT3duZXIqIFdlYWtJbXBsOjp3ZWFrSGFuZGxlT3duZXIoKQoreworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFdlYWtIYW5kbGVPd25lcio+KChyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxlT3duZXIpICYgflN0YXRlTWFzaykpOworfQorCitpbmxp
bmUgdm9pZCogV2Vha0ltcGw6OmNvbnRleHQoKQoreworICAgIHJldHVybiBtX2NvbnRleHQ7Cit9
CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0ltcGw6OmFzV2Vha0ltcGwoSlNWYWx1ZSogc2xvdCkK
K3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXZWFrSW1wbCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHNsb3QpICsgT0JKRUNUX09GRlNFVE9GKFdlYWtJbXBsLCBtX2pzVmFsdWUpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBXZWFrSW1wbF9oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1NzUsNyArMzU3NSw3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0
aW8KIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMpCiB7CiAgICAgSG9zdEZ1bmN0aW9uU3R1
Yk1hcDo6QWRkUmVzdWx0IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rp
b24sIFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCkpOwotICAgIGlmICghKmVudHJ5Lml0ZXJh
dG9yLT5zZWNvbmQpIHsKKyAgICBpZiAoIWVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQpIHsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGU7CiAgICAgICAgIGlmIChnZW5lcmF0b3IpIHsK
ICAgICAgICAgICAgIGlmIChnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDcg
KzM1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBl
bmFtZSBGcm9tPgogICAgIGlubGluZSBUbyBqc0Nhc3QoRnJvbSogZnJvbSkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChmcm9tLT5pbmhlcml0cygmV1RGOjpSZW1vdmVQb2ludGVyPFRvPjo6VHlwZTo6
c19pbmZvKSk7CisgICAgICAgIEFTU0VSVCghZnJvbSB8fCBmcm9tLT5pbmhlcml0cygmV1RGOjpS
ZW1vdmVQb2ludGVyPFRvPjo6VHlwZTo6c19pbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUbz4oZnJvbSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsx
MDcsNyBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkCiAgICAgICAg
IC8vIFRoZXJlIGFscmVhZHkgaXMgYW4gZW50cnkhIC0gd2Ugc2hvdWxkIG9ubHkgaGl0IHRoaXMg
d2hlbiBkZXNwZWNpZnlpbmcuCiAgICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3IuZ2V0KCku
c2Vjb25kLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKICAgICAgICAgQVNTRVJUKCFzdHJ1
Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOwotICAgICAgICBtYXAoKS0+c2V0KHJl
c3VsdC5pdGVyYXRvciwgc3RydWN0dXJlKTsKKyAgICAgICAgbWFwKCktPnNldChnbG9iYWxEYXRh
LCByZXN1bHQuaXRlcmF0b3IuZ2V0KCkuZmlyc3QsIHN0cnVjdHVyZSk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTQ2VsbDsKIGNs
YXNzIFN0cnVjdHVyZTsKIAogY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKQEAgLTgz
LDEwICs4NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCk7Ci0gICAgICAgIGlmICghc2xv
dCkKKyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSB0aGlzLT53ZWFrSW1wbCgpOworICAgICAgICBp
ZiAoIWltcGwpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBG
b3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRl
KGltcGwpOwogICAgIH0KIAogICAgIGlubGluZSB2b2lkIGFkZChKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKQEAgLTEwNSwxOCArMTA2LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFRyYW5zaXRpb25NYXAqPihtX2RhdGEpOwogICAgIH0KIAotICAgIEhh
bmRsZVNsb3Qgc2xvdCgpIGNvbnN0CisgICAgV2Vha0ltcGwqIHdlYWtJbXBsKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKLSAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8SGFuZGxlU2xvdD4obV9kYXRhICYgflVzaW5nU2luZ2xlU2xvdEZs
YWcpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXZWFrSW1wbCo+KG1fZGF0YSAm
IH5Vc2luZ1NpbmdsZVNsb3RGbGFnKTsKICAgICB9CiAKICAgICB2b2lkIHNldE1hcChUcmFuc2l0
aW9uTWFwKiBtYXApCiAgICAgewogICAgICAgICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7
CiAgICAgICAgIAotICAgICAgICBpZiAoSGFuZGxlU2xvdCBzbG90ID0gdGhpcy0+c2xvdCgpKQot
ICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShzbG90KTsK
KyAgICAgICAgaWYgKFdlYWtJbXBsKiBpbXBsID0gdGhpcy0+d2Vha0ltcGwoKSkKKyAgICAgICAg
ICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogCiAgICAgICAgIC8vIFRoaXMgaW1wbGlj
aXRseSBjbGVhcnMgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2UncmUgdXNpbmcgYSBzaW5nbGUg
dHJhbnNpdGlvbgogICAgICAgICBtX2RhdGEgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Piht
YXApOwpAQCAtMTI3LDkgKzEyOCw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlKiBzaW5nbGVU
cmFuc2l0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xv
dCgpKTsKLSAgICAgICAgaWYgKEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKSkgewotICAg
ICAgICAgICAgaWYgKCpzbG90KQotICAgICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PFN0cnVjdHVyZSo+KHNsb3QtPmFzQ2VsbCgpKTsKKyAgICAgICAgaWYgKFdlYWtJbXBsKiBp
bXBsID0gdGhpcy0+d2Vha0ltcGwoKSkgeworICAgICAgICAgICAgaWYgKGltcGwtPnN0YXRlKCkg
PT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8U3RydWN0dXJlKj4oaW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xMzcsMTQgKzEzOCwxMCBAQCBwcml2YXRlOgogICAg
IHZvaWQgc2V0U2luZ2xlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90
KCkpOwotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCk7Ci0gICAgICAgIGlm
ICghc2xvdCkgewotICAgICAgICAgICAgc2xvdCA9IGdsb2JhbERhdGEuaGVhcC5oYW5kbGVIZWFw
KCktPmFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5t
YWtlV2VhayhzbG90LCAwLCAwKTsKLSAgICAgICAgICAgIG1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHNsb3QpIHwgVXNpbmdTaW5nbGVTbG90RmxhZzsKLSAgICAgICAgfQotICAg
ICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgcmVpbnRl
cnByZXRfY2FzdDxKU0NlbGwqPihzdHJ1Y3R1cmUpKTsKLSAgICAgICAgKnNsb3QgPSByZWludGVy
cHJldF9jYXN0PEpTQ2VsbCo+KHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChXZWFrSW1wbCogaW1w
bCA9IHRoaXMtPndlYWtJbXBsKCkpCisgICAgICAgICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShp
bXBsKTsKKyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSBnbG9iYWxEYXRhLmhlYXAud2Vha0hlYXAo
KS0+YWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihzdHJ1Y3R1cmUpKTsKKyAgICAg
ICAgbV9kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW1wbCkgfCBVc2luZ1Npbmds
ZVNsb3RGbGFnOwogICAgIH0KIAogICAgIGludHB0cl90IG1fZGF0YTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNyArNTEsNyBAQCBjbGFzcyBXZWFrR0NNYXAgOiBwcml2YXRlIFdlYWtIYW5kbGVPd25l
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
V2Vha0dDTWFwKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlUeXBlLCBIYW5kbGVTbG90LCBI
YXNoQXJnLCBLZXlUcmFpdHNBcmc+IE1hcFR5cGU7CisgICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5
cGUsIFdlYWtJbXBsKiwgSGFzaEFyZywgS2V5VHJhaXRzQXJnPiBNYXBUeXBlOwogICAgIHR5cGVk
ZWYgdHlwZW5hbWUgSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OkV4dGVybmFsVHlwZSBFeHRlcm5h
bFR5cGU7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBtYXBfaXRlcmF0
b3I7CiAKQEAgLTY0LDggKzY0LDcgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5cGU+IGdldCgpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0LCBIYW5kbGVUeXBl
czxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QobV9pdGVyYXRvci0+c2Vjb25kKSk7IH0KLSAgICAg
ICAgc3RkOjpwYWlyPEtleVR5cGUsIEhhbmRsZVNsb3Q+IGdldFNsb3QoKSBjb25zdCB7IHJldHVy
biAqbV9pdGVyYXRvcjsgfQorICAgICAgICBzdGQ6OnBhaXI8S2V5VHlwZSwgRXh0ZXJuYWxUeXBl
PiBnZXQoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihtX2l0ZXJhdG9yLT5maXJzdCwg
SGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21TbG90KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+
KCZtX2l0ZXJhdG9yLT5zZWNvbmQtPmpzVmFsdWUoKSkpKTsgfQogICAgICAgICAKICAgICAgICAg
aXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7ICsrbV9pdGVyYXRvcjsgcmV0dXJuICp0aGlzOyB9CiAg
ICAgICAgIApAQCAtOTAsNyArODksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtYXBfaXRl
cmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAgICAgIGZvciAobWFwX2l0ZXJhdG9yIHB0ciA9
IG1fbWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihwdHItPnNlY29uZCktPmRlYWxsb2NhdGUocHRyLT5zZWNvbmQpOworICAgICAg
ICAgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUocHRyLT5zZWNvbmQpOwogICAgICAgICBtX21hcC5j
bGVhcigpOwogICAgIH0KIApAQCAtMTA3LDY0ICsxMDYsNDIgQEAgcHVibGljOgogICAgIHZvaWQg
cmVtb3ZlKGl0ZXJhdG9yIGl0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQoaXRlci5tX2l0ZXJh
dG9yICE9IG1fbWFwLmVuZCgpKTsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gaXRlci5tX2l0
ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgICAgIEFTU0VSVChzbG90KTsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShzbG90KTsKKyAgICAgICAgV2Vha0ltcGwqIGlt
cGwgPSBpdGVyLm1faXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQVNTRVJUKGltcGwpOworICAg
ICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShpbXBsKTsKICAgICAgICAgbV9tYXAucmVtb3ZlKGl0
ZXIubV9pdGVyYXRvcik7CiAgICAgfQogCiAgICAgRXh0ZXJuYWxUeXBlIGdldChjb25zdCBLZXlU
eXBlJiBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gSGFuZGxlVHlwZXM8TWFwcGVk
VHlwZT46OmdldEZyb21TbG90KG1fbWFwLmdldChrZXkpKTsKLSAgICB9Ci0KLSAgICBIYW5kbGVT
bG90IGdldFNsb3QoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbWFwLmdldChrZXkpOworICAgICAgICByZXR1cm4gSGFuZGxlVHlwZXM8TWFwcGVkVHlw
ZT46OmdldEZyb21TbG90KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KCZtX21hcC5nZXQoa2V5KS0+anNW
YWx1ZSgpKSk7CiAgICAgfQogCiAgICAgQWRkUmVzdWx0IGFkZChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIGNvbnN0IEtleVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIHsKICAg
ICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChrZXks
IDApOwotICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgIEhhbmRs
ZVNsb3Qgc2xvdCA9IGdsb2JhbERhdGEuaGVhcC5oYW5kbGVIZWFwKCktPmFsbG9jYXRlKCk7Ci0g
ICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHNsb3Q7Ci0gICAgICAgICAgICBI
YW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5tYWtlV2VhayhzbG90LCB0aGlzLCBGaW5hbGl6ZXJD
YWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKLSAgICAgICAgICAgIEhhbmRsZUhl
YXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihzbG90LCB2YWx1ZSk7Ci0gICAgICAgICAg
ICAqc2xvdCA9IHZhbHVlOwotICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gZ2xvYmFsRGF0YS5oZWFw
LndlYWtIZWFwKCktPmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxsYmFjazo6Zmlu
YWxpemVyQ29udGV4dEZvcihrZXkpKTsKKwogICAgICAgICAvLyBXZWFrR0NNYXAgZXhwb3NlcyBh
IGRpZmZlcmVudCBpdGVyYXRvciwgc28gd2UgbmVlZCB0byB3cmFwIGl0IGFuZCBjcmVhdGUgb3Vy
IG93biBBZGRSZXN1bHQuCiAgICAgICAgIHJldHVybiBBZGRSZXN1bHQoaXRlcmF0b3IocmVzdWx0
Lml0ZXJhdG9yKSwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNl
dChpdGVyYXRvciBpdGVyLCBFeHRlcm5hbFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBIYW5k
bGVTbG90IHNsb3QgPSBpdGVyLm1faXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgQVNTRVJUKHNs
b3QpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xv
dCwgdmFsdWUpOwotICAgICAgICAqc2xvdCA9IHZhbHVlOwotICAgIH0KIAogICAgIHZvaWQgc2V0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5
cGUgdmFsdWUpCiAgICAgewogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kOwotICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAg
ICAgICAgICAgIHNsb3QgPSBnbG9iYWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgp
OwotICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwg
dGhpcywga2V5KTsKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gc2xvdDsK
LSAgICAgICAgfQotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJp
ZXIoc2xvdCwgdmFsdWUpOwotICAgICAgICAqc2xvdCA9IHZhbHVlOworICAgICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUocmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGds
b2JhbERhdGEuaGVhcC53ZWFrSGVhcCgpLT5hbGxvY2F0ZSh2YWx1ZSwgdGhpcywgRmluYWxpemVy
Q2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7CiAgICAgfQogCiAgICAgRXh0ZXJu
YWxUeXBlIHRha2UoY29uc3QgS2V5VHlwZSYga2V5KQogICAgIHsKLSAgICAgICAgSGFuZGxlU2xv
dCBzbG90ID0gbV9tYXAudGFrZShrZXkpOwotICAgICAgICBpZiAoIXNsb3QpCisgICAgICAgIFdl
YWtJbXBsKiBpbXBsID0gbV9tYXAudGFrZShrZXkpOworICAgICAgICBpZiAoIWltcGwpCiAgICAg
ICAgICAgICByZXR1cm4gSGFzaFRyYWl0czxFeHRlcm5hbFR5cGU+OjplbXB0eVZhbHVlKCk7Ci0g
ICAgICAgIEV4dGVybmFsVHlwZSByZXN1bHQgPSBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0
RnJvbVNsb3Qoc2xvdCk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxs
b2NhdGUoc2xvdCk7CisgICAgICAgIEV4dGVybmFsVHlwZSByZXN1bHQgPSBIYW5kbGVUeXBlczxN
YXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJmltcGwtPmpzVmFs
dWUoKSkpOworICAgICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShpbXBsKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTE4MSw5ICsxNTgsOSBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gbV9tYXAudGFrZShG
aW5hbGl6ZXJDYWxsYmFjazo6a2V5Rm9yRmluYWxpemVyKGNvbnRleHQsIEhhbmRsZVR5cGVzPE1h
cHBlZFR5cGU+OjpnZXRGcm9tU2xvdChoYW5kbGUuc2xvdCgpKSkpOwotICAgICAgICBBU1NFUlQo
c2xvdCk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xv
dCk7CisgICAgICAgIFdlYWtJbXBsKiBpbXBsID0gbV9tYXAudGFrZShGaW5hbGl6ZXJDYWxsYmFj
azo6a2V5Rm9yRmluYWxpemVyKGNvbnRleHQsIEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRG
cm9tU2xvdChoYW5kbGUuc2xvdCgpKSkpOworICAgICAgICBBU1NFUlQoaW1wbCk7CisgICAgICAg
IFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgIH0KIAogICAgIE1hcFR5cGUgbV9tYXA7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTI1ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxMi0wMy0yOSAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIEZpcnN0IHN0ZXAgdG93YXJk
IGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgV2ViQ29yZSBmb3IgV2VhazxUPiBBUEkg
Y2hhbmdlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1N0cmluZ093bmVyOjpmaW5hbGl6ZSk6IFdlJ3JlIG5vdCBhbGxv
d2VkIHRvIGdldCgpIGEgZGVhZCBXZWFrPFQ+CisgICAgICAgIGFueW1vcmUsIHNvIHVzZSB0aGUg
ZGVidWctb25seSB3YXMoKSBoZWxwZXIgZnVuY3Rpb24gaW5zdGVhZC4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6dW5jYWNoZVdyYXBw
ZXIpOiBEaXR0by4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SW5saW5lQ2FjaGVkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpjbGVhcklubGluZUNhY2hlZFdyYXBwZXIpOiBXZSdyZSBub3QgYWxsb3dlZCB0byBnZXQoKSBh
IGRlYWQKKyAgICAgICAgV2VhazxUPiwgc28gSSBoYWQgdG8gcHVzaCBkb3duIHRoZXNlIEFTU0VS
VHMgaW50byBTY3JpcHRXcmFwcGFibGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2RlKTogVXBkYXRlZCBmb3Igbm9uLUhhbmRsZS1uZXNzCisgICAgICAgIG9m
IFdlYWs8VD4uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdFdyYXBwYWJsZTo6c2V0V3JhcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRXcmFwcGFibGU6OmNsZWFyV3JhcHBlcik6IFVzZSB3YXMoKSwgYXMgYWJv
dmUuCisKIDIwMTItMDMtMjkgIEJlYXIgVHJhdmlzICA8YmV0cmF2aXNAYWRvYmUuY29tPgogCiAg
ICAgICAgIFVwZGF0ZSBDU1MgRXhjbHVzaW9uIHdyYXAtZmxvdyB2YWx1ZXMgbGVmdCAmIHJpZ2h0
IHRvIHN0YXJ0ICYgZW5kCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFw
cGVyV29ybGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RP
TVdyYXBwZXJXb3JsZC5jcHAJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgdm9pZCBKU1N0cmluZ093bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZQogewogICAgIEpT
U3RyaW5nKiBqc1N0cmluZyA9IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oaGFuZGxlLmdldCgpLmFz
Q2VsbCgpKTsKICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5n
SW1wbCo+KGNvbnRleHQpOwotICAgIEFTU0VSVF9VTlVTRUQoanNTdHJpbmcsIG1fd29ybGQtPm1f
c3RyaW5nQ2FjaGUuZmluZChzdHJpbmdJbXBsKS0+c2Vjb25kLmdldCgpID09IGpzU3RyaW5nKTsK
KyAgICBBU1NFUlRfVU5VU0VEKGpzU3RyaW5nLCBtX3dvcmxkLT5tX3N0cmluZ0NhY2hlLmZpbmQo
c3RyaW5nSW1wbCktPnNlY29uZC53YXMoanNTdHJpbmcpKTsKICAgICBtX3dvcmxkLT5tX3N0cmlu
Z0NhY2hlLnJlbW92ZShzdHJpbmdJbXBsKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyAr
MTUwLDcgQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsKICAgICB7CiAgICAgICAgIGlm
IChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCh3b3JsZC0+bV93cmFwcGVycy5maW5k
KGRvbU9iamVjdCktPnNlY29uZC5nZXQoKSA9PSB3cmFwcGVyKTsKKyAgICAgICAgQVNTRVJUKHdv
cmxkLT5tX3dyYXBwZXJzLmZpbmQoZG9tT2JqZWN0KS0+c2Vjb25kLndhcyh3cmFwcGVyKSk7CiAg
ICAgICAgIHdvcmxkLT5tX3dyYXBwZXJzLnJlbW92ZShkb21PYmplY3QpOwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCBpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyCiB7CiAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVCghbm9kZS0+d3JhcHBlcigpKTsKICAgICBub2RlLT5z
ZXRXcmFwcGVyKCp3b3JsZC0+Z2xvYmFsRGF0YSgpLCB3cmFwcGVyLCB3cmFwcGVyT3duZXIod29y
bGQsIG5vZGUpLCB3cmFwcGVyQ29udGV4dCh3b3JsZCwgbm9kZSkpOwogICAgIHJldHVybiB0cnVl
OwogfQpAQCAtNTEsOCArNTAsNyBAQCBpbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBw
ZXIoRE9NCiB7CiAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIEFTU0VSVF9VTlVTRUQod3JhcHBlciwgbm9kZS0+d3JhcHBlcigpID09IHdyYXBw
ZXIpOwotICAgIG5vZGUtPmNsZWFyV3JhcHBlcigpOworICAgIG5vZGUtPmNsZWFyV3JhcHBlcih3
cmFwcGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCShyZXZpc2lvbiAx
MTI1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHNob3J0IEpTTm9kZUZpbHRl
ckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSgKIHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogCi0gICAgaWYgKCFtX2ZpbHRlci5pc09iamVjdCgpKQorICAgIGlmICghbV9m
aWx0ZXIgfHwgIW1fZmlsdGVyLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRl
cjo6RklMVEVSX0FDQ0VQVDsKIAogICAgLy8gVGhlIGV4ZWMgYXJndW1lbnQgaGVyZSBzaG91bGQg
b25seSBiZSBudWxsIGlmIHRoaXMgd2FzIGNhbGxlZCBmcm9tIGEKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oCShyZXZpc2lvbiAxMTI1NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsMTEgKzQ1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0V3JhcHBlcihK
U0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNET01XcmFwcGVyKiB3cmFwcGVyLCBKU0M6
OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFtX3dyYXBwZXIpOwogICAgICAgICBtX3dyYXBwZXIgPSBKU0M6OlBhc3NX
ZWFrPEpTRE9NV3JhcHBlcj4oZ2xvYmFsRGF0YSwgd3JhcHBlciwgd3JhcHBlck93bmVyLCBjb250
ZXh0KTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyV3JhcHBlcigpCisgICAgdm9pZCBjbGVhcldy
YXBwZXIoSlNET01XcmFwcGVyKiB3cmFwcGVyKQogICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNF
RCh3cmFwcGVyLCBtX3dyYXBwZXIud2FzKHdyYXBwZXIpKTsKICAgICAgICAgbV93cmFwcGVyLmNs
ZWFyKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTI1ODcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAx
Mi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIEZp
cnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgZm9yIEFQSSBj
aGFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1l
T2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpmaW5h
bGl6ZSk6CisKIDIwMTItMDMtMjkgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21h
aWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTI1NTMuCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2Jq
ZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVj
dE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lkIE5QUnVudGlt
ZU9iamVjdE1hcDo6ZmluYWxpemUoSlNDOjpICiB7CiAgICAgSGFzaE1hcDxOUE9iamVjdCosIEpT
Qzo6V2VhazxKU05QT2JqZWN0PiA+OjppdGVyYXRvciBmb3VuZCA9IG1fanNOUE9iamVjdHMuZmlu
ZChzdGF0aWNfY2FzdDxOUE9iamVjdCo+KGNvbnRleHQpKTsKICAgICBBU1NFUlQoZm91bmQgIT0g
bV9qc05QT2JqZWN0cy5lbmQoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGFzT2JqZWN0
KGhhbmRsZS5nZXQoKSkgPT0gZm91bmQtPnNlY29uZCk7CisgICAgQVNTRVJUX1VOVVNFRChoYW5k
bGUsIGFzT2JqZWN0KGhhbmRsZS5nZXQoKSkgPT0gZm91bmQtPnNlY29uZC5nZXQoKSk7CiAgICAg
SlNOUE9iamVjdCogb2JqZWN0ID0gZm91bmQtPnNlY29uZC5nZXQoKTsKICAgICBtX2pzTlBPYmpl
Y3RzLnJlbW92ZShmb3VuZCk7CiAgICAgYWRkVG9JbnZhbGlkYXRpb25RdWV1ZShvYmplY3QtPmxl
YWtOUE9iamVjdCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134716</attachid>
            <date>2012-03-29 19:47:16 -0700</date>
            <delta_ts>2012-03-30 10:54:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82670-20120329194715.patch</filename>
            <type>text/plain</type>
            <size>95083</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MiBA
QAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyBhIFdlYWs8VD4gaGVhcCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBpbmNyZW1l
bnRhbAorICAgICAgICBmaW5hbGl6YXRpb24sIHdoaWxlIG1ha2luZyBhcyBmZXcgYmVoYXZpb3Ig
Y2hhbmdlcyBhcyBwb3NzaWJsZS4gVGhlIGJlaGF2aW9yCisgICAgICAgIGNoYW5nZXMgaXQgbWFr
ZXMgYXJlOgorCisgICAgICAgICgqKSBXZWFrPFQ+J3MgcmF3IEpTVmFsdWUgbm8gbG9uZ2VyIHJl
dmVydHMgdG8gSlNWYWx1ZSgpIGF1dG9tYXRpY2FsbHkgLS0KKyAgICAgICAgaW5zdGVhZCwgYSBz
ZXBhcmF0ZSBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBKU1ZhbHVlIGlzIG5vIGxvbmdlciB2YWxp
ZC4KKyAgICAgICAgKFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgSlNWYWx1ZSBjYW4gYmUg
cHJlc2VydmVkIGZvciBsYXRlciBmaW5hbGl6YXRpb24uKQorICAgICAgICBPYmplY3RzIGRlYWxp
bmcgd2l0aCBXZWFrSW1wbHMgZGlyZWN0bHkgbXVzdCBjaGFuZ2UgdG8gY2hlY2sgdGhlIGZsYWcu
CisKKyAgICAgICAgKCopIFdlYWs8VD4gaXMgbm8gbG9uZ2VyIGEgc3ViY2xhc3Mgb2YgSGFuZGxl
PFQ+LgorCisgICAgICAgICgqKSBET00gR0MgcGVyZm9ybWFuY2UgaXMgZGlmZmVyZW50IC0tIDkl
IGZhc3RlciBpbiB0aGUgZ2VvbWV0cmljIG1lYW4sCisgICAgICAgIGJ1dCAxNSUgc2xvd2VyIGlu
IG9uZSBzcGVjaWZpYyBjYXNlOgorICAgICAgICAgICAgICAgIGdjLWRvbTEuaHRtbDogNiUgIGZh
c3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTIuaHRtbDogMjMlIGZhc3RlcgorICAgICAgICAg
ICAgICAgIGdjLWRvbTMuaHRtbDogMTclIGZhc3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTQu
aHRtbDogMTUlICpzbG93ZXIqCisKKyAgICAgICAgVGhlIGtleSBmZWF0dXJlcyBvZiB0aGlzIG5l
dyBoZWFwIGFyZToKKworICAgICAgICAoKikgRWFjaCBibG9jayBrbm93cyBpdHMgb3duIHN0YXRl
LCBpbmRlcGVuZGVudCBvZiBhbnkgb3RoZXIgYmxvY2tzLgorCisgICAgICAgICgqKSBFYWNoIGJs
b2NrIGNhY2hlcyBpdHMgb3duIHN3ZWVwIHJlc3VsdC4KKworICAgICAgICAoKikgVGhlIGhlYXAg
dmlzaXRzIGRlYWQgV2VhazxUPnMgYXQgdGhlIGVuZCBvZiBHQy4gKEl0IGRvZXNuJ3QKKyAgICAg
ICAgbWFyayB0aGVtIHlldCwgc2luY2UgdGhhdCB3b3VsZCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4p
CisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tPYmplY3REYXRhOjpmaW5hbGl6ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Ojppbml0KTogVXBkYXRlZCB0byB1c2Ug
dGhlIG5ldyBXZWFrSGVhcCBBUEkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6IFBhaWQgdGhlIGJ1aWxkIHN5c3RlbSB0
YXggc2luY2UgSSBhZGRlZCBzb21lIG5ldyBmaWxlcy4KKworICAgICAgICAqIGhlYXAvSGFuZGxl
Lmg6IE1hZGUgV2Vha0Jsb2NrIGEgZnJpZW5kIGFuZCBleHBvc2VkIHNsb3QoKSBhcyBwdWJsaWMs
CisgICAgICAgIHNvIHdlIGNhbiBrZWVwIHBhc3NpbmcgYSBIYW5kbGU8VD4gdG8gZmluYWxpemVy
cywgdG8gYXZvaWQgbW9yZSBzdXJmYWNlCisgICAgICAgIGFyZWEgY2hhbmdlIGluIHRoaXMgcGF0
Y2guIEEgZm9sbG93LXVwIHBhdGNoIHNob3VsZCBjaGFuZ2UgdGhlIHR5cGUgd2UKKyAgICAgICAg
cGFzcyB0byBmaW5hbGl6ZXJzLgorCisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmNwcDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OndyaXRlQmFycmllcik6Cisg
ICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUpOgorICAgICAgICAqIGhlYXAvSGFu
ZGxlSGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZUhlYXApOgorICAgICAg
ICAoTm9kZSk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUpOiBSZW1vdmVk
IGFsbCBjb2RlIHJlbGF0ZWQgdG8gV2VhazxUPiwgc2luY2UKKyAgICAgICAgd2UgaGF2ZSBhIHNl
cGFyYXRlIFdlYWtIZWFwIG5vdy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OkhlYXApOiBSZW1vdmVkIG1fZXh0cmFDb3N0IGJlY2F1c2UgZXh0cmEgY29z
dCBpcyBhY2NvdW50ZWQKKyAgICAgICAgZm9yIHRocm91Z2ggb3VyIHdhdGVybWFyayBub3cuIFJl
bW92ZWQgbV93YXRlck1hcmsgYmVjYXVzZSBpdCB3YXMgdW51c2VkLgorCisgICAgICAgIChKU0M6
OkhlYXA6OmRlc3Ryb3kpOiBVcGRhdGVkIGZvciBhZGRpdGlvbiBvZiBXZWFrSGVhcC4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZSk6IENoYW5nZWQg
ZnJvbSB1c2luZyBpdHMgb3duCisgICAgICAgIHZhcmlhYmxlIHRvIHBhcnRpY2lwYXRpbmcgaW4g
dGhlIHdhdGVybWFyayBzdHJhdGVneS4gSSB3YW50ZWQgdG8gc3RhbmRhcmRpemUKKyAgICAgICAg
V2Vha0hlYXAgYW5kIGFsbCBvdGhlciBIZWFwIGNsaWVudHMgb24gdGhpcyBzdHJhdGVneSwgdG8g
bWFrZSBzdXJlIGl0J3MKKyAgICAgICAgYWNjdXJhdGUuCisgCisgICAgICAgIChKU0M6OkhlYXA6
Om1hcmtSb290cyk6IFVwZGF0ZWQgZm9yIGFkZGl0aW9uIG9mIFdlYWtIZWFwLiBBZGRlZCBXZWFr
SGVhcAorICAgICAgICBkZWFkIHZpc2l0IHBhc3MsIGFzIGV4cGxhaW5lZCBhYm92ZS4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVzZXRBbGxv
Y2F0b3JzKTogVXBkYXRlZCBmb3IgYWRkaXRpb24gb2YgV2Vha0hlYXAuCisKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6RmluYWxpemVyT3du
ZXI6OmZpbmFsaXplKTogVXBkYXRlZCBmb3IgbmV3IFdlYWs8VD4gQVBJLgorCisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndlYWtIZWFwKToKKyAgICAgICAgKEhl
YXApOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1dhdGVyTWFyayk6IEFkZGVkIGEgd2F5IHRv
IHBhcnRpY2lwYXRlIGluIHRoZSB3YXRlcm1hcmtpbmcKKyAgICAgICAgc3RyYXRlZ3ksIHNpbmNl
IHRoaXMgaXMgdGhlIGJlc3Qgd2F5IGZvciBXZWFrSGVhcCB0byByZXBvcnQgaXRzIG1lbW9yeQor
ICAgICAgICBjb3N0LiAoSSBwbGFuIHRvIHVwZGF0ZSB0aGlzIGluIGEgZm9sbG93LXVwIHBhdGNo
IHRvIG1ha2UgaXQgbW9yZSBhY2N1cmF0ZSwKKyAgICAgICAgYnV0IGZvciBub3cgaXQgaXMgbm90
IGxlc3MgYWNjdXJhdGUgdGhhbiBpdCB1c2VkIHRvIGJlLikKKworICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjphZGRUb1dhdGVyTWFyayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpkaWRDb25zdW1lRnJlZUxpc3QpOiBSZW1vdmVkIG1fbnVyc2VyeVdhdGVyTWFyayBiZWNhdXNl
CisgICAgICAgIGl0IHdhcyB1bnVzZWQsIGFuZCBJIGRpZG4ndCB3YW50IHRvIHVwZGF0ZSBXZWFr
SGVhcCB0byBrZWVwIGFuIHVzdXNlZAorICAgICAgICB2YXJpYWJsZSB3b3JraW5nLiBBZGRlZCBB
UEkgZm9yIGFib3ZlLgorCisgICAgICAgICogaGVhcC9QYXNzV2Vhay5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKFdlYWtJbXBsQWNjZXNzb3IpOgorICAgICAgICAoUGFzc1dlYWspOgorICAg
ICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6OjpnZXQpOgorICAgICAgICAo
SlNDOjo6Ondhcyk6CisgICAgICAgIChKU0M6Ojo6UGFzc1dlYWspOgorICAgICAgICAoSlNDOjo6
On5QYXNzV2Vhayk6CisgICAgICAgIChKU0M6OlVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAg
ICAoSlNDOjo6OmxlYWtJbXBsKToKKyAgICAgICAgKEpTQzo6YWRvcHRXZWFrKToKKyAgICAgICAg
KiBoZWFwL1N0cm9uZy5oOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yISk6CisgICAg
ICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKToKKyAgICAgICAgKEpTQzo6U3Ryb25nOjpnZXQpOgorICAgICAgICAqIGhlYXAv
V2Vhay5oOgorICAgICAgICAoV2Vhayk6CisgICAgICAgIChKU0M6Ojo6V2Vhayk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjo6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6Ojp+V2Vhayk6CisgICAgICAgIChKU0M6Ojo6c3dhcCk6CisgICAgICAgIChKU0M6
Oj0pOgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6VW5zcGVjaWZp
ZWRCb29sVHlwZSk6CisgICAgICAgIChKU0M6Ojo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6Ojo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjo6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IExvdHMgb2Yg
Y29kZSBjaGFuZ2VzIGhlcmUsIGJ1dCB0aGV5IGJvaWwKKyAgICAgICAgZG93biB0byB0d28gdGhp
bmdzOgorCisgICAgICAgICgqKSBBbGxvY2F0ZSBXZWFrSW1wbHMgZnJvbSB0aGUgV2Vha0hlYXAg
aW5zdGVhZCBvZiBIYW5kbGVzIGZyb20gdGhlIEhhbmRsZUhlYXAuCisKKyAgICAgICAgKCopIEV4
cGxpY2l0bHkgY2hlY2sgV2Vha0ltcGw6OnN0YXRlKCkgZm9yIG5vbi1saXZlbmVzcyBiZWZvcmUg
cmV0dXJuaW5nCisgICAgICAgIGEgdmFsdWUgKGV4cGxhaW5lZCBhYm92ZSkuCisKKyAgICAgICAg
VGhlc2UgZmlsZXMgaW1wbGVtZW50IHRoZSBuZXcgV2VhazxUPiBoZWFwIGJlaGF2aW9yIGRlc2Ny
aWJlZCBhYm92ZToKKworICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDogQWRkZWQuCisgICAg
ICAgICogaGVhcC9XZWFrQmxvY2suaDogQWRkZWQuCisgICAgICAgICogaGVhcC9XZWFrSGFuZGxl
T3duZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIYW5kbGVPd25lci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIZWFwLmNwcDogQWRkZWQuCisgICAgICAgICogaGVhcC9X
ZWFrSGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtJbXBsLmg6IEFkZGVkLgorCisg
ICAgICAgIE9uZSBpbnRlcmVzdGluZyBkaWZmZXJlbmNlIGZyb20gdGhlIG9sZCBoZWFwIGlzIHRo
YXQgd2UgZG9uJ3QgYWxsb3cKKyAgICAgICAgY2xpZW50cyB0byBvdmVyd3JpdGUgYSBXZWFrSW1w
bCBhZnRlciBhbGxvY2F0aW5nIGl0LCBhbmQgd2UgZG9uJ3QgcmVjeWNsZQorICAgICAgICBXZWFr
SW1wbHMgcHJpb3IgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBs
YXp5IGZpbmFsaXphdGlvbiwKKyAgICAgICAgYnV0IGl0IHdpbGwgYWxzbyBoZWxwIHVzIGVzYWJs
aXNoIGEgdXNlZnVsIGludmFyaWFudCBpbiB0aGUgZnV0dXJlOiBhbGxvY2F0aW5nCisgICAgICAg
IGEgV2Vha0ltcGwgd2lsbCBiZSBhIGJpbmRpbmcgY29udHJhY3QgdG8gcnVuIGEgZmluYWxpemVy
IGF0IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgIGZ1dHVyZSwgZXZlbiBpZiB0aGUgV2Vha0lt
cGwgaXMgbGF0ZXIgZGVhbGxvY2F0ZWQuCisKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOiBDaGVjayB0aGUgV2Vh
azxUPiBmb3IgISBpbnN0ZWFkIG9mCisgICAgICAgIGl0cyBKU1ZhbHVlLCBzaW5jZSB0aGF0J3Mg
b3VyIEFQSSBjb250cmFjdCBub3csIGFuZCB0aGUgSlNWYWx1ZSBtaWdodAorICAgICAgICBiZSBz
dGFsZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OmpzQ2Fz
dCk6IEFsbG93IGNhc3RpbmcgTlVMTCBwb2ludGVycyBiZWNhdXNlIGl0J3MgdXNlZnVsIGFuZCBo
YXJtbGVzcy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOiBJIGNhbid0IHJlbWVtYmVyIHdoeSBJ
IGRpZCB0aGlzLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOiBJIGhhZCB0byB1cGRhdGUgdGhlc2Ug
Y2xhc3NlcyBiZWNhdXNlIHRoZXkgYWxsb2NhdGUKKyAgICAgICAgYW5kIGRlYWxsb2NhdGUgd2Vh
ayBwb2ludGVycyBtYW51YWxseS4gVGhleSBzaG91bGQgcHJvYmFibHkgc3RvcCBkb2luZyB0aGF0
LgorCiAyMDEyLTAzLTI5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeCBwMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDE5IEBAIFNF
VChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwCisgICAgaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCi0gICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSGVhcC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAg
ICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcAogICAg
IGhlYXAvTWFya2VkU3BhY2UuY3BwCi0gICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAg
ICBoZWFwL01hcmtTdGFjay5jcHAKKyAgICBoZWFwL1dlYWtIZWFwLmNwcAorICAgIGhlYXAvV2Vh
a0hhbmRsZU93bmVyLmNwcAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogCiAgICAgZGVidWdnZXIv
RGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAsNiArMjUwLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFwLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDYgKzIxNyw5IEBACiAgICAgICAgICAgICAnYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAnLAogICAgICAgICAgICAgJ2J5dGVjb21waWxlci9SZWdpc3RlcklELmgnLAogICAgICAgICAg
ICAgJ2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwJywKKyAgICAgICAgICAgICdoZWFwL1dlYWtI
ZWFwLmNwcCcsCisgICAgICAgICAgICAnaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwJywKKyAgICAg
ICAgICAgICdoZWFwL1dlYWtCbG9jay5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlSGVh
cC5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlU3RhY2suY3BwJywKICAgICAgICAgICAg
ICdoZWFwL0hlYXAuY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0NvcGllZFNwYWNl
LmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAogICAgIGhlYXAvREZHQ29k
ZUJsb2Nrcy5jcHAgXAorICAgIGhlYXAvV2Vha0hlYXAuY3BwIFwKKyAgICBoZWFwL1dlYWtIYW5k
bGVPd25lci5jcHAgXAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVI
ZWFwLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw3IEBAIHZvaWQgSlND
YWxsYmFja09iamVjdERhdGE6OmZpbmFsaXplKEhhbmQKICAgICBmb3IgKDsganNDbGFzczsganND
bGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKQogICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6
ZUNhbGxiYWNrIGZpbmFsaXplID0ganNDbGFzcy0+ZmluYWxpemUpCiAgICAgICAgICAgICBmaW5h
bGl6ZSh0aGlzUmVmKTsKLSAgICBIYW5kbGVTbG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwotICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgV2Vha0hl
YXA6OmRlYWxsb2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQog
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTEyNTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNCArMTAyLDExIEBAIHZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojppbml0KEV4ZWMKICAgICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwg
dG9SZWYodGhpcykpOwogICAgIH0KIAotICAgIGJvb2wgbmVlZHNGaW5hbGl6ZXIgPSBmYWxzZTsK
LSAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHIg
JiYgIW5lZWRzRmluYWxpemVyOyBqc0NsYXNzUHRyID0ganNDbGFzc1B0ci0+cGFyZW50Q2xhc3Mp
Ci0gICAgICAgIG5lZWRzRmluYWxpemVyID0ganNDbGFzc1B0ci0+ZmluYWxpemU7Ci0gICAgaWYg
KG5lZWRzRmluYWxpemVyKSB7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGV4ZWMtPmdsb2Jh
bERhdGEoKS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0
KCksIGNsYXNzUmVmKCkpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0
ZUJhcnJpZXIoc2xvdCwgdGhpcyk7Ci0gICAgICAgICpzbG90ID0gdGhpczsKKyAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHI7IGpzQ2xhc3NQdHIg
PSBqc0NsYXNzUHRyLT5wYXJlbnRDbGFzcykgeworICAgICAgICBpZiAoanNDbGFzc1B0ci0+Zmlu
YWxpemUpIHsKKyAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLndlYWtIZWFwKCkt
PmFsbG9jYXRlKHRoaXMsIG1fY2FsbGJhY2tPYmplY3REYXRhLmdldCgpLCBjbGFzc1JlZigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagko
cmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMzAsNiArMjEzMCwzNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtCbG9jay5jcHAiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0Jsb2NrLmgi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhl
YXBcV2Vha0hlYXAuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtIZWFwLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0ltcGwuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrSGFuZGxl
T3duZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxoZWFwXFdlYWtIYW5kbGVPd25lci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEhhbmRsZVN0YWNrLmNwcCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxMiw3ICszMTIsMTQgQEAKIAkJ
MTRDNTI0MkIwRjUzNTVFOTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEE2NTgxQTBGNEUzNkY0MDAwMTUwRkQgLyog
SklUU3R1YnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMkYzRDgxMzlGNEJFMjAw
NDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCAqLzsgfTsKIAkJMTREMkYzREIxMzlGNEJFMjAwNDkx
MDMxIC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEU4NEY5RTE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxv
Y2suY3BwICovOyB9OworCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEU4NEY5QTE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRFODRGQTAxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtI
ZWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
RTg0RjlCMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5jcHAgKi87IH07CisJCTE0RTg0RkEx
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFODRGOUMxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRF
ODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEU4NEY5RDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vh
a0ltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNEU5RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NTZGQzYw
RTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAqLzsgfTsKKwkJ
MTRGNzI1NjUxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEY3MjU2MzE0RUUyNjVFMDBC
MTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmNwcCAqLzsgfTsKKwkJMTRGNzI1NjYxNEVFMjY1RTAw
QjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTRGNzI1NjQxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVP
d25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Rjk3NDQ2MTM4Qzg1M0UwMERB
MUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZl
cnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQy
MTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9OwogCQk0NTE1
MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDUxNTM5QjgxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTI1LDcg
KzkzMiwxNCBAQAogCQkxNERBODE4RTBEOTlGRDIwMDBCMEE0RkIgLyogSlNBY3RpdmF0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQWN0aXZhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNBY3Rp
dmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQWN0aXZh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REUwRDY4MEQwMjQzMTQw
MEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0dsb2JhbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrQmxvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYWtIZWFwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUMxNEVFMUFDQzAwRDZENUQ0IC8qIFdl
YWtIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtIZWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RTg0RjlEMTRFRTFBQ0MwMEQ2RDVENCAvKiBX
ZWFrSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEYyNTI1NjBEMDhERDhEMDA0RUNGRkYgLyog
SlNWYXJpYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Zh
cmlhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RjcyNTYzMTRF
RTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2Vha0hhbmRsZU93bmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMTRGNzI1NjQxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrSGFuZGxlT3duZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8qIEhl
YXBSb290VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwUm9v
dFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5MDUxNDIwQkE5RThB
NzAwODFFOUQwIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBw
YXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5
MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2OCw2ICsxNTgyLDEzIEBACiAJCQkJMEZDODE1MTIx
NDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLywKIAkJCQkwRkM4MTUxNDE0
MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLywKIAkJCQkxNDJFMzEzMzEzNEZG
MEE2MDBBRkFEQjUgLyogV2Vhay5oICovLAorCQkJCTE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAv
KiBXZWFrQmxvY2suY3BwICovLAorCQkJCTE0RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFr
QmxvY2suaCAqLywKKwkJCQkxNEY3MjU2MzE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93
bmVyLmNwcCAqLywKKwkJCQkxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93
bmVyLmggKi8sCisJCQkJMTRFODRGOUIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCAq
LywKKwkJCQkxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuaCAqLywKKwkJCQkx
NEU4NEY5RDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCAqLywKIAkJCQkwRjI0MkRBNTEz
RjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovLAogCQkJCTBGQzgx
NTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLywKIAkJCQkw
RkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovLApAQCAt
MjUwNSw2ICsyNTI2LDEwIEBACiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0
RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDk3MjA5MTE0RUI4MzE1MDBGRUIxQjcgLyogUGFzc1dlYWsuaCBp
biBIZWFkZXJzICovLAorCQkJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2su
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0RTg0RkExMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVh
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJ
bXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIgLyogV2Vh
a0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI1NDY3NzE0RjU5QjVDMDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0
NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRp
b25FZmZvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzA2MCw2ICszMDg1LDkgQEAKIAkJCQk4NkI1
ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDMkI5MTZDNTE0REEwNDBDMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0RTg0RjlFMTRFRTFBQ0MwMEQ2RDVE
NCAvKiBXZWFrQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRFODRGQTAxNEVFMUFDQzAw
RDZENUQ0IC8qIFdlYWtIZWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0RjcyNTY1MTRFRTI2
NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
RkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTU5MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyogREZHUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAkocmV2aXNpb24g
MTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDYgKzU5LDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNWYWx1ZSAoSGFu
ZGxlQmFzZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gKG1fc2xvdCAmJiAqbV9zbG90KSA/IHJlaW50ZXJw
cmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsgfQogCisgICAgSGFuZGxlU2xv
dCBzbG90KCkgY29uc3QgeyByZXR1cm4gbV9zbG90OyB9CisKIHByb3RlY3RlZDoKICAgICBIYW5k
bGVCYXNlKEhhbmRsZVNsb3Qgc2xvdCkKICAgICAgICAgOiBtX3Nsb3Qoc2xvdCkKQEAgLTY3LDcg
KzY5LDYgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHZvaWQgc3dhcChIYW5kbGVCYXNlJiBvdGhl
cikgeyBzdGQ6OnN3YXAobV9zbG90LCBvdGhlci5tX3Nsb3QpOyB9CiAKLSAgICBIYW5kbGVTbG90
IHNsb3QoKSBjb25zdCB7IHJldHVybiBtX3Nsb3Q7IH0KICAgICB2b2lkIHNldFNsb3QoSGFuZGxl
U2xvdCBzbG90KQogICAgIHsKICAgICAgICAgbV9zbG90ID0gc2xvdDsKQEAgLTEzMyw2ICsxMzQs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVI
ZWFwOworICAgIGZyaWVuZCBjbGFzcyBXZWFrQmxvY2s7CiAKICAgICBzdGF0aWMgSGFuZGxlPFQ+
IHdyYXBTbG90KEhhbmRsZVNsb3Qgc2xvdCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE5
ICszMSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1XZWFrSGFuZGxlT3duZXI6On5XZWFrSGFu
ZGxlT3duZXIoKQotewotfQotCi1ib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiwgU2xvdFZpc2l0b3ImKQotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWFrSGFuZGxlT3duZXI6OmZpbmFsaXplKEhhbmRs
ZTxVbmtub3duPiwgdm9pZCopCi17Ci19Ci0KIEhhbmRsZUhlYXA6OkhhbmRsZUhlYXAoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAg
LCBtX25leHRUb0ZpbmFsaXplKDApCkBAIC03Myw2MiArNjAsNiBAQCB2b2lkIEhhbmRsZUhlYXA6
OnZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwCiAgICAgfQogfQogCi12b2lkIEhhbmRsZUhlYXA6OnZp
c2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17Ci0gICAg
U2xvdFZpc2l0b3ImIHZpc2l0b3IgPSBoZWFwUm9vdFZpc2l0b3IudmlzaXRvcigpOwotCi0gICAg
Tm9kZSogZW5kID0gbV93ZWFrTGlzdC5lbmQoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX3dl
YWtMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0gbm9kZS0+bmV4dCgpKSB7Ci0jaWYg
RU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgICAgIGlmICghaXNWYWxpZFdlYWtOb2RlKG5vZGUp
KQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgICAgICBKU0NlbGwqIGNlbGwgPSBu
b2RlLT5zbG90KCktPmFzQ2VsbCgpOwotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBXZWFrSGFuZGxlT3duZXIqIHdlYWtP
d25lciA9IG5vZGUtPndlYWtPd25lcigpOwotICAgICAgICBpZiAoIXdlYWtPd25lcikKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghd2Vha093bmVyLT5pc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KG5vZGUtPnNsb3QoKSksIG5v
ZGUtPndlYWtPd25lckNvbnRleHQoKSwgdmlzaXRvcikpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQobm9kZS0+c2xvdCgpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSGFuZGxlSGVhcDo6ZmluYWxpemVXZWFrSGFuZGxlcygpCi17Ci0gICAgTm9kZSog
ZW5kID0gbV93ZWFrTGlzdC5lbmQoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX3dlYWtMaXN0
LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0gbV9uZXh0VG9GaW5hbGl6ZSkgewotICAgICAg
ICBtX25leHRUb0ZpbmFsaXplID0gbm9kZS0+bmV4dCgpOwotI2lmIEVOQUJMRShHQ19WQUxJREFU
SU9OKQotICAgICAgICBpZiAoIWlzVmFsaWRXZWFrTm9kZShub2RlKSkKLSAgICAgICAgICAgIENS
QVNIKCk7Ci0jZW5kaWYKLQotICAgICAgICBKU0NlbGwqIGNlbGwgPSBub2RlLT5zbG90KCktPmFz
Q2VsbCgpOwotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpZiAoV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIgPSBub2Rl
LT53ZWFrT3duZXIoKSkgewotICAgICAgICAgICAgd2Vha093bmVyLT5maW5hbGl6ZShIYW5kbGU8
VW5rbm93bj46OndyYXBTbG90KG5vZGUtPnNsb3QoKSksIG5vZGUtPndlYWtPd25lckNvbnRleHQo
KSk7Ci0gICAgICAgICAgICBpZiAobV9uZXh0VG9GaW5hbGl6ZSAhPSBub2RlLT5uZXh0KCkpIC8v
IE93bmVyIGRlYWxsb2NhdGVkIG5vZGUuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFpc0xpdmVOb2Rl
KG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgICAgICAqbm9kZS0+c2xv
dCgpID0gSlNWYWx1ZSgpOwotICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92
ZShub2RlKTsKLSAgICAgICAgbV9pbW1lZGlhdGVMaXN0LnB1c2gobm9kZSk7Ci0gICAgfQotICAg
IAotICAgIG1fbmV4dFRvRmluYWxpemUgPSAwOwotfQotCiB2b2lkIEhhbmRsZUhlYXA6OndyaXRl
QmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFsdWUmIHZhbHVlKQogewogICAgIC8v
IEZvcmJpZCBhc3NpZ25tZW50IHRvIGhhbmRsZXMgZHVyaW5nIHRoZSBmaW5hbGl6YXRpb24gcGhh
c2UsIHNpbmNlIGl0IHdvdWxkIHZpb2xhdGUgbWFueSBHQyBpbnZhcmlhbnRzLgpAQCAtMTUwLDE1
ICs4MSw2IEBAIHZvaWQgSGFuZGxlSGVhcDo6d3JpdGVCYXJyaWVyKEhhbmRsZVNsb3QKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChub2RlLT5pc1dlYWsoKSkgewotICAgICAgICBt
X3dlYWtMaXN0LnB1c2gobm9kZSk7Ci0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgICAg
IGlmICghaXNMaXZlTm9kZShub2RlKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0jZW5kaWYKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIG1fc3Ryb25nTGlzdC5wdXNoKG5vZGUpOwogI2lm
IEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIGlmICghaXNMaXZlTm9kZShub2RlKSkKQEAgLTE4
OCwyNCArMTEwLDYgQEAgYm9vbCBIYW5kbGVIZWFwOjppc0xpdmVOb2RlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIAogICAgIHJldHVybiB0cnVlOwogfQotCi1ib29sIEhhbmRsZUhlYXA6OmlzVmFsaWRX
ZWFrTm9kZShOb2RlKiBub2RlKQotewotICAgIGlmICghaXNMaXZlTm9kZShub2RlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbm9kZS0+aXNXZWFrKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSAqbm9kZS0+c2xvdCgpOwotICAgIGlmICgh
dmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBK
U0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICBpZiAoIWNlbGwgfHwgIWNlbGwtPnN0
cnVjdHVyZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
ICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hhbmRsZUhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IYW5kbGVIZWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDYgQEAg
Y2xhc3MgSlNHbG9iYWxEYXRhOwogY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwog
Ci1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFrSGFuZGxlT3duZXIgewotcHVibGljOgotICAg
IHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOwotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNp
dG9yJik7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCog
Y29udGV4dCk7Ci19OwotCiBjbGFzcyBIYW5kbGVIZWFwIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
SGFuZGxlSGVhcCogaGVhcEZvcihIYW5kbGVTbG90KTsKQEAgLTU4LDIwICs1MSwxMCBAQCBwdWJs
aWM6CiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5k
bGVTbG90KTsKIAotICAgIHZvaWQgbWFrZVdlYWsoSGFuZGxlU2xvdCwgV2Vha0hhbmRsZU93bmVy
KiA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKTsKLSAgICBIYW5kbGVTbG90IGNvcHlXZWFrKEhhbmRs
ZVNsb3QpOwotCiAgICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQg
ZmluYWxpemVXZWFrSGFuZGxlcygpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0
ZUJhcnJpZXIoSGFuZGxlU2xvdCwgY29uc3QgSlNWYWx1ZSYpOwogCi0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIGJvb2wgaGFzV2Vha093bmVyKEhhbmRsZVNsb3QsIFdlYWtIYW5kbGVPd25lciop
OwotICAgIGJvb2wgaGFzRmluYWxpemVyKEhhbmRsZVNsb3QpOwotI2VuZGlmCi0KICAgICB1bnNp
Z25lZCBwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoU3Ryb25nSGFuZGxlKEZ1bmN0b3ImLCBjb25zdCBIYXNo
Q291bnRlZFNldDxKU0NlbGwqPiYgc2tpcFNldCk7CkBAIC04NSwxMiArNjgsNiBAQCBwcml2YXRl
OgogICAgICAgICBIYW5kbGVTbG90IHNsb3QoKTsKICAgICAgICAgSGFuZGxlSGVhcCogaGFuZGxl
SGVhcCgpOwogCi0gICAgICAgIHZvaWQgbWFrZVdlYWsoV2Vha0hhbmRsZU93bmVyKiwgdm9pZCog
Y29udGV4dCk7Ci0gICAgICAgIGJvb2wgaXNXZWFrKCk7Ci0gICAgICAgIAotICAgICAgICBXZWFr
SGFuZGxlT3duZXIqIHdlYWtPd25lcigpOwotICAgICAgICB2b2lkKiB3ZWFrT3duZXJDb250ZXh0
KCk7Ci0KICAgICAgICAgdm9pZCBzZXRQcmV2KE5vZGUqKTsKICAgICAgICAgTm9kZSogcHJldigp
OwogCkBAIC05OCwxMiArNzUsOCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBuZXh0KCk7CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBXZWFrSGFuZGxlT3duZXIqIGVtcHR5V2Vha093bmVyKCk7
Ci0KICAgICAgICAgSlNWYWx1ZSBtX3ZhbHVlOwogICAgICAgICBIYW5kbGVIZWFwKiBtX2hhbmRs
ZUhlYXA7Ci0gICAgICAgIFdlYWtIYW5kbGVPd25lciogbV93ZWFrT3duZXI7Ci0gICAgICAgIHZv
aWQqIG1fd2Vha093bmVyQ29udGV4dDsKICAgICAgICAgTm9kZSogbV9wcmV2OwogICAgICAgICBO
b2RlKiBtX25leHQ7CiAgICAgfTsKQEAgLTExNCw3ICs4Nyw2IEBAIHByaXZhdGU6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBncm93KCk7CiAgICAgCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJ
T04pIHx8ICFBU1NFUlRfRElTQUJMRUQKLSAgICBib29sIGlzVmFsaWRXZWFrTm9kZShOb2RlKik7
CiAgICAgYm9vbCBpc0xpdmVOb2RlKE5vZGUqKTsKICNlbmRpZgogCkBAIC0xMjIsNyArOTQsNiBA
QCBwcml2YXRlOgogICAgIEJsb2NrU3RhY2s8Tm9kZT4gbV9ibG9ja1N0YWNrOwogCiAgICAgU2Vu
dGluZWxMaW5rZWRMaXN0PE5vZGU+IG1fc3Ryb25nTGlzdDsKLSAgICBTZW50aW5lbExpbmtlZExp
c3Q8Tm9kZT4gbV93ZWFrTGlzdDsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT4gbV9pbW1l
ZGlhdGVMaXN0OwogICAgIFNpbmdseUxpbmtlZExpc3Q8Tm9kZT4gbV9mcmVlTGlzdDsKICAgICBO
b2RlKiBtX25leHRUb0ZpbmFsaXplOwpAQCAtMTc1LDQ5ICsxNDYsOCBAQCBpbmxpbmUgdm9pZCBI
YW5kbGVIZWFwOjpkZWFsbG9jYXRlKEhhbmRsCiAgICAgbV9mcmVlTGlzdC5wdXNoKG5vZGUpOwog
fQogCi1pbmxpbmUgSGFuZGxlU2xvdCBIYW5kbGVIZWFwOjpjb3B5V2VhayhIYW5kbGVTbG90IG90
aGVyKQotewotICAgIE5vZGUqIG5vZGUgPSB0b05vZGUoYWxsb2NhdGUoKSk7Ci0gICAgbm9kZS0+
bWFrZVdlYWsodG9Ob2RlKG90aGVyKS0+d2Vha093bmVyKCksIHRvTm9kZShvdGhlciktPndlYWtP
d25lckNvbnRleHQoKSk7Ci0gICAgd3JpdGVCYXJyaWVyKG5vZGUtPnNsb3QoKSwgKm90aGVyKTsK
LSAgICAqbm9kZS0+c2xvdCgpID0gKm90aGVyOwotICAgIHJldHVybiB0b0hhbmRsZShub2RlKTsK
LX0KLQotaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6bWFrZVdlYWsoSGFuZGxlU2xvdCBoYW5kbGUs
IFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyLCB2b2lkKiBjb250ZXh0KQotewotICAgIC8vIEZv
cmJpZCBhc3NpZ25tZW50IHRvIGhhbmRsZXMgZHVyaW5nIHRoZSBmaW5hbGl6YXRpb24gcGhhc2Us
IHNpbmNlIGl0IHdvdWxkIHZpb2xhdGUgbWFueSBHQyBpbnZhcmlhbnRzLgotICAgIC8vIEZpbGUg
YSBidWcgd2l0aCBzdGFjayB0cmFjZSBpZiB5b3UgaGl0IHRoaXMuCi0gICAgaWYgKG1fbmV4dFRv
RmluYWxpemUpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgTm9kZSogbm9kZSA9IHRvTm9kZShoYW5k
bGUpOwotICAgIG5vZGUtPm1ha2VXZWFrKHdlYWtPd25lciwgY29udGV4dCk7Ci0KLSAgICBTZW50
aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92ZShub2RlKTsKLSAgICBpZiAoISpoYW5kbGUgfHwg
IWhhbmRsZS0+aXNDZWxsKCkpIHsKLSAgICAgICAgbV9pbW1lZGlhdGVMaXN0LnB1c2gobm9kZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3dlYWtMaXN0LnB1c2gobm9kZSk7Ci19
Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi1pbmxpbmUgYm9vbCBIYW5kbGVIZWFwOjpoYXNXZWFr
T3duZXIoSGFuZGxlU2xvdCBoYW5kbGUsIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyKQotewot
ICAgIHJldHVybiB0b05vZGUoaGFuZGxlKS0+d2Vha093bmVyKCkgPT0gd2Vha093bmVyOwotfQot
Ci1pbmxpbmUgYm9vbCBIYW5kbGVIZWFwOjpoYXNGaW5hbGl6ZXIoSGFuZGxlU2xvdCBoYW5kbGUp
Ci17Ci0gICAgcmV0dXJuIHRvTm9kZShoYW5kbGUpLT53ZWFrT3duZXIoKTsKLX0KLSNlbmRpZgot
CiBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKQog
ICAgIDogbV9oYW5kbGVIZWFwKGhhbmRsZUhlYXApCi0gICAgLCBtX3dlYWtPd25lcigwKQotICAg
ICwgbV93ZWFrT3duZXJDb250ZXh0KDApCiAgICAgLCBtX3ByZXYoMCkKICAgICAsIG1fbmV4dCgw
KQogewpAQCAtMjI1LDggKzE1NSw2IEBAIGlubGluZSBIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKEhh
bmRsZUhlYXAKIAogaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoV1RGOjpTZW50aW5lbFRh
ZykKICAgICA6IG1faGFuZGxlSGVhcCgwKQotICAgICwgbV93ZWFrT3duZXIoMCkKLSAgICAsIG1f
d2Vha093bmVyQ29udGV4dCgwKQogICAgICwgbV9wcmV2KDApCiAgICAgLCBtX25leHQoMCkKIHsK
QEAgLTI0MiwyOCArMTcwLDYgQEAgaW5saW5lIEhhbmRsZUhlYXAqIEhhbmRsZUhlYXA6Ok5vZGU6
OmhhbgogICAgIHJldHVybiBtX2hhbmRsZUhlYXA7CiB9CiAKLWlubGluZSB2b2lkIEhhbmRsZUhl
YXA6Ok5vZGU6Om1ha2VXZWFrKFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyLCB2b2lkKiBjb250
ZXh0KQotewotICAgIG1fd2Vha093bmVyID0gd2Vha093bmVyID8gd2Vha093bmVyIDogZW1wdHlX
ZWFrT3duZXIoKTsKLSAgICBtX3dlYWtPd25lckNvbnRleHQgPSBjb250ZXh0OwotfQotCi1pbmxp
bmUgYm9vbCBIYW5kbGVIZWFwOjpOb2RlOjppc1dlYWsoKQotewotICAgIHJldHVybiBtX3dlYWtP
d25lcjsgLy8gVHJ1ZSBmb3IgZW1wdHlXZWFrT3duZXIoKS4KLX0KLQotaW5saW5lIFdlYWtIYW5k
bGVPd25lciogSGFuZGxlSGVhcDo6Tm9kZTo6d2Vha093bmVyKCkKLXsKLSAgICByZXR1cm4gbV93
ZWFrT3duZXIgPT0gZW1wdHlXZWFrT3duZXIoKSA/IDAgOiBtX3dlYWtPd25lcjsgLy8gMCBmb3Ig
ZW1wdHlXZWFrT3duZXIoKS4KLX0KLQotaW5saW5lIHZvaWQqIEhhbmRsZUhlYXA6Ok5vZGU6Ondl
YWtPd25lckNvbnRleHQoKQotewotICAgIEFTU0VSVCh3ZWFrT3duZXIoKSk7Ci0gICAgcmV0dXJu
IG1fd2Vha093bmVyQ29udGV4dDsKLX0KLQogaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6Tm9kZTo6
c2V0UHJldihOb2RlKiBwcmV2KQogewogICAgIG1fcHJldiA9IHByZXY7CkBAIC0yODQsMTMgKzE5
MCw2IEBAIGlubGluZSBIYW5kbGVIZWFwOjpOb2RlKiBIYW5kbGVIZWFwOjpOb2QKICAgICByZXR1
cm4gbV9uZXh0OwogfQogCi0vLyBTZW50aW5lbCB0byBpbmRpY2F0ZSB0aGF0IGEgbm9kZSBpcyB3
ZWFrLCBidXQgaXRzIG93bmVyIGhhcyBubyBtZWFuaW5nZnVsCi0vLyBjYWxsYmFja3MuIFRoaXMg
YWxsb3dzIHVzIHRvIG9wdGltaXplIGJ5IHNraXBwaW5nIHN1Y2ggbm9kZXMuCi1pbmxpbmUgV2Vh
a0hhbmRsZU93bmVyKiBIYW5kbGVIZWFwOjpOb2RlOjplbXB0eVdlYWtPd25lcigpCi17Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0hhbmRsZU93bmVyKj4oLTEpOwotfQotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIEhhbmRsZUhlYXA6OmZvckVhY2hTdHJvbmdIYW5k
bGUoRnVuY3RvciYgZnVuY3RvciwgY29uc3QgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4mIHNraXBT
ZXQpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVuZCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsMTggKzMxMywx
NyBAQCBIZWFwOjpIZWFwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSGVhCiAgICAgOiBtX2hl
YXBTaXplKGhlYXBTaXplKQogICAgICwgbV9taW5CeXRlc1BlckN5Y2xlKGhlYXBTaXplRm9ySGlu
dChoZWFwU2l6ZSkpCiAgICAgLCBtX2xhc3RGdWxsR0NTaXplKDApCi0gICAgLCBtX3dhdGVyTWFy
aygwKQogICAgICwgbV9oaWdoV2F0ZXJNYXJrKG1fbWluQnl0ZXNQZXJDeWNsZSkKICAgICAsIG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyhOb09wZXJhdGlvbikKICAgICAsIG1fb2JqZWN0U3BhY2UodGhp
cykKICAgICAsIG1fc3RvcmFnZVNwYWNlKHRoaXMpCiAgICAgLCBtX2Jsb2NrRnJlZWluZ1RocmVh
ZFNob3VsZFF1aXQoZmFsc2UpCi0gICAgLCBtX2V4dHJhQ29zdCgwKQogICAgICwgbV9tYXJrTGlz
dFNldCgwKQogICAgICwgbV9hY3Rpdml0eUNhbGxiYWNrKERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJh
Y2s6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1f
c2hhcmVkRGF0YShnbG9iYWxEYXRhKQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEp
CisgICAgLCBtX3dlYWtIZWFwKHRoaXMpCiAgICAgLCBtX2hhbmRsZUhlYXAoZ2xvYmFsRGF0YSkK
ICAgICAsIG1faXNTYWZlVG9Db2xsZWN0KGZhbHNlKQogICAgICwgbV9nbG9iYWxEYXRhKGdsb2Jh
bERhdGEpCkBAIC0zNzYsNyArMzc1LDcgQEAgdm9pZCBIZWFwOjpkZXN0cm95KCkKICAgICBjYW5v
bmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CiAgICAgY2xlYXJNYXJrcygpOwogCi0gICAgbV9o
YW5kbGVIZWFwLmZpbmFsaXplV2Vha0hhbmRsZXMoKTsKKyAgICBtX3dlYWtIZWFwLmZpbmFsaXpl
QWxsKCk7CiAgICAgbV9nbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZmluYWxpemVTbWFsbFN0cmlu
Z3MoKTsKICAgICBzaHJpbmsoKTsKICAgICBtX3N0b3JhZ2VTcGFjZS5kZXN0cm95KCk7CkBAIC00
NjYsOSArNDY1LDcgQEAgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZQog
ICAgIC8vIGlmIGEgbGFyZ2UgdmFsdWUgc3Vydml2ZXMgb25lIGdhcmJhZ2UgY29sbGVjdGlvbiwg
dGhlcmUgaXMgbm90IG11Y2ggcG9pbnQgdG8KICAgICAvLyBjb2xsZWN0aW5nIG1vcmUgZnJlcXVl
bnRseSBhcyBsb25nIGFzIGl0IHN0YXlzIGFsaXZlLgogCi0gICAgaWYgKG1fZXh0cmFDb3N0ID4g
bWF4RXh0cmFDb3N0ICYmIG1fZXh0cmFDb3N0ID4gaGlnaFdhdGVyTWFyaygpIC8gMikKLSAgICAg
ICAgY29sbGVjdEFsbEdhcmJhZ2UoKTsKLSAgICBtX2V4dHJhQ29zdCArPSBjb3N0OworICAgIGFk
ZFRvV2F0ZXJNYXJrKGNvc3QpOwogfQogCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQpA
QCAtNjg3LDEyICs2ODQsMTIgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAj
ZW5kaWYKICAgICB9CiAKLSAgICAvLyBXZWFrIGhhbmRsZXMgbXVzdCBiZSBtYXJrZWQgbGFzdCwg
YmVjYXVzZSB0aGVpciBvd25lcnMgdXNlIHRoZSBzZXQgb2YKLSAgICAvLyBvcGFxdWUgcm9vdHMg
dG8gZGV0ZXJtaW5lIHJlYWNoYWJpbGl0eS4KKyAgICAvLyBXZWFrIHJlZmVyZW5jZXMgbXVzdCBi
ZSBtYXJrZWQgbGFzdCBiZWNhdXNlIHRoZWlyIGxpdmVuZXNzIGRlcGVuZHMgb24KKyAgICAvLyB0
aGUgbGl2ZW5lc3Mgb2YgdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCBncmFwaC4KICAgICB7Ci0gICAg
ICAgIEdDUEhBU0UoVmlzaXRpbmdXZWFrSGFuZGxlcyk7CisgICAgICAgIEdDUEhBU0UoVmlzaXRp
bmdMaXZlV2Vha0hhbmRsZXMpOwogICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAg
bV9oYW5kbGVIZWFwLnZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAg
ICAgIG1fd2Vha0hlYXAudmlzaXRMaXZlV2Vha0ltcGxzKGhlYXBSb290VmlzaXRvcik7CiAgICAg
ICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAgICAgIGlmICh2aXNpdG9y
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTcwNSw2ICs3MDIsMjAgQEAg
dm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CisKKyAgICB7CisgICAgICAgIEdDUEhBU0UoVmlzaXRpbmdEZWFkV2Vha0hhbmRs
ZXMpOworICAgICAgICBtX3dlYWtIZWFwLnZpc2l0RGVhZFdlYWtJbXBscyhoZWFwUm9vdFZpc2l0
b3IpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cih2aXNpdG9yKTsKKyAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyNpZiBF
TkFCTEUoUEFSQUxMRUxfR0MpCisgICAgICAgICAgICB2aXNpdG9yLmRyYWluRnJvbVNoYXJlZChT
bG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKICAg
ICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKIAog
ICAgIHZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKQEAgLTgwNSw3ICs4MTYsNyBAQCB2b2lkIEhlYXA6
OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgICAgIAogICAgIHsKICAgICAgICAg
R0NQSEFTRShGaW5hbGl6ZVdlYWtIYW5kbGVzKTsKLSAgICAgICAgbV9oYW5kbGVIZWFwLmZpbmFs
aXplV2Vha0hhbmRsZXMoKTsKKyAgICAgICAgbV93ZWFrSGVhcC5zd2VlcCgpOwogICAgICAgICBt
X2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5maW5hbGl6ZVNtYWxsU3RyaW5ncygpOwogICAgIH0K
ICAgICAKQEAgLTgzNiw3ICs4NDcsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUg
c3dlZXBUb2dnCiAgICAgc2l6ZV90IHByb3BvcnRpb25hbEJ5dGVzID0gMiAqIG5ld1NpemU7CiAg
ICAgaWYgKGZ1bGxHQykgewogICAgICAgICBtX2xhc3RGdWxsR0NTaXplID0gbmV3U2l6ZTsKLSAg
ICAgICAgc2V0SGlnaFdhdGVyTWFyayhtYXgocHJvcG9ydGlvbmFsQnl0ZXMsIG1fbWluQnl0ZXNQ
ZXJDeWNsZSkpOworICAgICAgICBtX2hpZ2hXYXRlck1hcmsgPSBtYXgocHJvcG9ydGlvbmFsQnl0
ZXMsIG1fbWluQnl0ZXNQZXJDeWNsZSk7CiAgICAgfQogICAgIGRvdWJsZSBsYXN0R0NFbmRUaW1l
ID0gV1RGOjpjdXJyZW50VGltZSgpOwogICAgIG1fbGFzdEdDTGVuZ3RoID0gbGFzdEdDRW5kVGlt
ZSAtIGxhc3RHQ1N0YXJ0VGltZTsKQEAgLTg1Miw4ICs4NjMsOCBAQCB2b2lkIEhlYXA6OmNhbm9u
aWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoCiAKIHZvaWQgSGVhcDo6cmVzZXRBbGxvY2F0b3JzKCkK
IHsKLSAgICBtX2V4dHJhQ29zdCA9IDA7CiAgICAgbV9vYmplY3RTcGFjZS5yZXNldEFsbG9jYXRv
cnMoKTsKKyAgICBtX3dlYWtIZWFwLnJlc2V0QWxsb2NhdG9yKCk7CiB9CiAKIHZvaWQgSGVhcDo6
c2V0QWN0aXZpdHlDYWxsYmFjayhQYXNzT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gYWN0aXZp
dHlDYWxsYmFjaykKQEAgLTkxNCwxNSArOTI1LDE1IEBAIHZvaWQgSGVhcDo6cmVsZWFzZUZyZWVC
bG9ja3MoKQogCiB2b2lkIEhlYXA6OmFkZEZpbmFsaXplcihKU0NlbGwqIGNlbGwsIEZpbmFsaXpl
ciBmaW5hbGl6ZXIpCiB7Ci0gICAgV2VhazxKU0NlbGw+IHdlYWsoKmdsb2JhbERhdGEoKSwgY2Vs
bCwgJm1fZmluYWxpemVyT3duZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpbmFsaXplcikp
OwotICAgIHdlYWsubGVha0hhbmRsZSgpOyAvLyBCYWxhbmNlZCBieSBGaW5hbGl6ZXJPd25lcjo6
ZmluYWxpemUoKS4KKyAgICB3ZWFrSGVhcCgpLT5hbGxvY2F0ZShjZWxsLCAmbV9maW5hbGl6ZXJP
d25lciwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmluYWxpemVyKSk7IC8vIEJhbGFuY2VkIGJ5
IEZpbmFsaXplck93bmVyOjpmaW5hbGl6ZSgpLgogfQogCiB2b2lkIEhlYXA6OkZpbmFsaXplck93
bmVyOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQogewot
ICAgIFdlYWs8SlNDZWxsPiB3ZWFrKFdlYWs8SlNDZWxsPjo6QWRvcHQsIGhhbmRsZSk7CisgICAg
SGFuZGxlU2xvdCBzbG90ID0gaGFuZGxlLnNsb3QoKTsKICAgICBGaW5hbGl6ZXIgZmluYWxpemVy
ID0gcmVpbnRlcnByZXRfY2FzdDxGaW5hbGl6ZXI+KGNvbnRleHQpOwotICAgIGZpbmFsaXplcih3
ZWFrLmdldCgpKTsKKyAgICBmaW5hbGl6ZXIoc2xvdC0+YXNDZWxsKCkpOworICAgIFdlYWtIZWFw
OjpkZWFsbG9jYXRlKFdlYWtJbXBsOjphc1dlYWtJbXBsKHNsb3QpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxMTI1
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2luY2x1ZGUg
Ik1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXZWFr
SGFuZGxlT3duZXIuaCIKKyNpbmNsdWRlICJXZWFrSGVhcC5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllclN1cHBvcnQuaCIKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMzMsMTEgKzEzNSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0
dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVkQ2VsbChGdW5jdG9yJik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaFBy
b3RlY3RlZENlbGwoKTsKIAorICAgICAgICBXZWFrSGVhcCogd2Vha0hlYXAoKSB7IHJldHVybiAm
bV93ZWFrSGVhcDsgfQogICAgICAgICBIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKCkgeyByZXR1cm4g
Jm1faGFuZGxlSGVhcDsgfQogICAgICAgICBIYW5kbGVTdGFjayogaGFuZGxlU3RhY2soKSB7IHJl
dHVybiAmbV9oYW5kbGVTdGFjazsgfQogCiAgICAgICAgIHZvaWQgZ2V0Q29uc2VydmF0aXZlUmVn
aXN0ZXJSb290cyhIYXNoU2V0PEpTQ2VsbCo+JiByb290cyk7CiAKKyAgICAgICAgdm9pZCBhZGRU
b1dhdGVyTWFyayhzaXplX3QpOworCiAgICAgICAgIGRvdWJsZSBsYXN0R0NMZW5ndGgoKSB7IHJl
dHVybiBtX2xhc3RHQ0xlbmd0aDsgfQogCiAgICAgcHJpdmF0ZToKQEAgLTE1NSw3ICsxNjAsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzaXplX3Qgd2F0ZXJNYXJrKCk7CiAgICAgICAg
IHNpemVfdCBoaWdoV2F0ZXJNYXJrKCk7Ci0gICAgICAgIHZvaWQgc2V0SGlnaFdhdGVyTWFyayhz
aXplX3QpOwogICAgICAgICBib29sIHNob3VsZENvbGxlY3QoKTsKIAogICAgICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IG1pbkV4dHJhQ29zdCA9IDI1NjsKQEAgLTE5OSw3ICsyMDMsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgSGVhcFNpemUgbV9oZWFwU2l6ZTsKICAgICAgICAg
Y29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKICAgICAgICAgc2l6ZV90IG1fbGFzdEZ1
bGxHQ1NpemU7Ci0gICAgICAgIHNpemVfdCBtX3dhdGVyTWFyazsKICAgICAgICAgc2l6ZV90IG1f
aGlnaFdhdGVyTWFyazsKICAgICAgICAgCiAgICAgICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3MgbV9v
cGVyYXRpb25JblByb2dyZXNzOwpAQCAtMjE4LDggKzIyMSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBWVGFibGVTcGVjdHJ1bSBtX2Rlc3Ryb3llZFR5cGVDb3VudHM7CiAjZW5kaWYKIAot
ICAgICAgICBzaXplX3QgbV9leHRyYUNvc3Q7Ci0KICAgICAgICAgUHJvdGVjdENvdW50U2V0IG1f
cHJvdGVjdGVkVmFsdWVzOwogICAgICAgICBWZWN0b3I8VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4q
ID4gbV90ZW1wU29ydGluZ1ZlY3RvcnM7CiAgICAgICAgIEhhc2hTZXQ8TWFya2VkQXJndW1lbnRC
dWZmZXIqPiogbV9tYXJrTGlzdFNldDsKQEAgLTIzMSw2ICsyMzIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJlZERhdGE7CiAgICAg
ICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CiAKKyAgICAgICAgV2Vha0hlYXAgbV93ZWFr
SGVhcDsKICAgICAgICAgSGFuZGxlSGVhcCBtX2hhbmRsZUhlYXA7CiAgICAgICAgIEhhbmRsZVN0
YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgICAgIERGR0NvZGVCbG9ja3MgbV9kZmdDb2RlQmxvY2tz
OwpAQCAtMjkzLDkgKzI5NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1f
aGlnaFdhdGVyTWFyazsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjpzZXRIaWdoV2F0
ZXJNYXJrKHNpemVfdCBuZXdIaWdoV2F0ZXJNYXJrKQorICAgIGlubGluZSB2b2lkIEhlYXA6OmFk
ZFRvV2F0ZXJNYXJrKHNpemVfdCBzaXplKQogICAgIHsKLSAgICAgICAgbV9oaWdoV2F0ZXJNYXJr
ID0gbmV3SGlnaFdhdGVyTWFyazsKKyAgICAgICAgbV9vYmplY3RTcGFjZS5hZGRUb1dhdGVyTWFy
ayhzaXplKTsKKyAgICAgICAgaWYgKHdhdGVyTWFyaygpID4gaGlnaFdhdGVyTWFyaygpKQorICAg
ICAgICAgICAgY29sbGVjdChEb05vdFN3ZWVwKTsKICAgICB9CiAKICNpZiBFTkFCTEUoR0dDKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNp
b24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIGNsYXNzIFN0cnVjdHVyZTsKIAogTWFy
a2VkU3BhY2U6Ok1hcmtlZFNwYWNlKEhlYXAqIGhlYXApCiAgICAgOiBtX3dhdGVyTWFyaygwKQot
ICAgICwgbV9udXJzZXJ5V2F0ZXJNYXJrKDApCiAgICAgLCBtX2hlYXAoaGVhcCkKIHsKICAgICBm
b3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0
b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewpAQCAtNDksNyArNDgsNiBAQCBNYXJrZWRT
cGFjZTo6TWFya2VkU3BhY2UoSGVhcCogaGVhcCkKIHZvaWQgTWFya2VkU3BhY2U6OnJlc2V0QWxs
b2NhdG9ycygpCiB7CiAgICAgbV93YXRlck1hcmsgPSAwOwotICAgIG1fbnVyc2VyeVdhdGVyTWFy
ayA9IDA7CiAKICAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6
ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewogICAgICAgICBh
bGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcg
QEAgcHVibGljOgogICAgIHZvaWQgY2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpOwogCiAg
ICAgc2l6ZV90IHdhdGVyTWFyaygpOwotICAgIHNpemVfdCBudXJzZXJ5V2F0ZXJNYXJrKCk7Cisg
ICAgdm9pZCBhZGRUb1dhdGVyTWFyayhzaXplX3QpOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PE1h
cmtlZEJsb2NrKj46Oml0ZXJhdG9yIEJsb2NrSXRlcmF0b3I7CiAgICAgCkBAIC03Nyw2ICs3Nyw3
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHNocmluaygpOwogICAgIHZvaWQgZnJlZUJsb2Nr
cyhNYXJrZWRCbG9jayogaGVhZCk7CisKICAgICB2b2lkIGRpZEFkZEJsb2NrKE1hcmtlZEJsb2Nr
Kik7CiAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoTWFya2VkQmxvY2sqKTsKIApAQCAtMTAy
LDcgKzEwMyw2IEBAIHByaXZhdGU6CiAgICAgU3Vic3BhY2UgbV9ub3JtYWxTcGFjZTsKIAogICAg
IHNpemVfdCBtX3dhdGVyTWFyazsKLSAgICBzaXplX3QgbV9udXJzZXJ5V2F0ZXJNYXJrOwogICAg
IEhlYXAqIG1faGVhcDsKICAgICBNYXJrZWRCbG9ja1NldCBtX2Jsb2NrczsKIH07CkBAIC0xMTIs
OSArMTEyLDkgQEAgaW5saW5lIHNpemVfdCBNYXJrZWRTcGFjZTo6d2F0ZXJNYXJrKCkKICAgICBy
ZXR1cm4gbV93YXRlck1hcms7CiB9CiAKLWlubGluZSBzaXplX3QgTWFya2VkU3BhY2U6Om51cnNl
cnlXYXRlck1hcmsoKQoraW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmFkZFRvV2F0ZXJNYXJrKHNp
emVfdCBzaXplKQogewotICAgIHJldHVybiBtX251cnNlcnlXYXRlck1hcms7CisgICAgbV93YXRl
ck1hcmsgKz0gc2l6ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5
cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgTWFya2VkU3BhY2U6OmZvckVhY2hDZWxsKEZ1bmN0
b3ImIGZ1bmN0b3IpCkBAIC0xOTksNyArMTk5LDYgQEAgaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6
OmRpZEFkZEJsb2NrKE1hcgogCiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6ZGlkQ29uc3VtZUZy
ZWVMaXN0KE1hcmtlZEJsb2NrKiBibG9jaykKIHsKLSAgICBtX251cnNlcnlXYXRlck1hcmsgKz0g
YmxvY2stPmNhcGFjaXR5KCkgLSBibG9jay0+c2l6ZSgpOwogICAgIG1fd2F0ZXJNYXJrICs9IGJs
b2NrLT5jYXBhY2l0eSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Q
YXNzV2Vhay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NX
ZWFrLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bh
c3NXZWFrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgUGFzc1dl
YWtfaAogI2RlZmluZSBQYXNzV2Vha19oCiAKKyNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgIkhhbmRsZS5oIgogI2luY2x1ZGUgPHd0Zi9O
dWxsUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KIApAQCAtMzUsNjEgKzM1LDE2
NCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NXZWFrOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gUGFzc1dlYWs8VD4gYWRvcHRXZWFrKEhhbmRsZVNsb3QpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gUGFzc1dlYWs8VD4gYWRvcHRXZWFrKFdlYWtJbXBsKik7CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNsYXNzIFBhc3NXZWFrIDogcHVibGljIEhhbmRsZTxUPiB7Ci0gICAgdXNpbmcgSGFuZGxl
PFQ+OjpzbG90OwotICAgIHVzaW5nIEhhbmRsZTxUPjo6c2V0U2xvdDsKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWtJbXBsQWNjZXNzb3IgeworcHVibGljOgor
ICAgIHR5cGVkZWYgVCogR2V0VHlwZTsKKworICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdDsKKyAg
ICBUJiBvcGVyYXRvciooKSBjb25zdDsKKyAgICBHZXRUeXBlIGdldCgpIGNvbnN0OworCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgd2FzKEdldFR5cGUpIGNvbnN0OworI2VuZGlmCit9
OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBjbGFzcyBXZWFrSW1wbEFjY2Vzc29yPEJhc2Us
IFVua25vd24+IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhbmRsZTxUPjo6RXh0
ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKKyAgICB0eXBlZGVmIEpTVmFsdWUgR2V0VHlwZTsKIAot
ICAgIFBhc3NXZWFrKCkgOiBIYW5kbGU8VD4oKSB7IH0KLSAgICBQYXNzV2VhayhzdGQ6Om51bGxw
dHJfdCkgOiBIYW5kbGU8VD4oKSB7IH0KKyAgICBjb25zdCBKU1ZhbHVlKiBvcGVyYXRvci0+KCkg
Y29uc3Q7CisgICAgY29uc3QgSlNWYWx1ZSYgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgR2V0VHlw
ZSBnZXQoKSBjb25zdDsKK307CiAKLSAgICBQYXNzV2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEV4dGVybmFsVHlwZSBleHRlcm5hbFR5cGUgPSBFeHRlcm5hbFR5cGUoKSwgV2Vha0hhbmRs
ZU93bmVyKiB3ZWFrT3duZXIgPSAwLCB2b2lkKiBjb250ZXh0ID0gMCkKLSAgICAgICAgOiBIYW5k
bGU8VD4oZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKSkKLSAgICB7Ci0g
ICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+bWFrZVdlYWsoc2xvdCgpLCB3ZWFr
T3duZXIsIGNvbnRleHQpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSGFuZGxlVHlwZXM8VD46
OnRvSlNWYWx1ZShleHRlcm5hbFR5cGUpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNs
b3QoKSktPndyaXRlQmFycmllcihzbG90KCksIHZhbHVlKTsKLSAgICAgICAgKnNsb3QoKSA9IHZh
bHVlOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NXZWFrIDogcHVibGlj
IFdlYWtJbXBsQWNjZXNzb3I8UGFzc1dlYWs8VD4sIFQ+IHsKK3B1YmxpYzoKKyAgICBmcmllbmQg
Y2xhc3MgV2Vha0ltcGxBY2Nlc3NvcjxQYXNzV2VhazxUPiwgVD47CisgICAgdXNpbmcgdHlwZW5h
bWUgV2Vha0ltcGxBY2Nlc3NvcjxQYXNzV2VhazxUPiwgVD46OkdldFR5cGU7CisKKyAgICBQYXNz
V2VhaygpOworICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBQYXNzV2VhayhKU0ds
b2JhbERhdGEmLCBHZXRUeXBlID0gR2V0VHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqID0gMCwgdm9p
ZCogY29udGV4dCA9IDApOwogCiAgICAgLy8gSXQgc29tZXdoYXQgYnJlYWtzIHRoZSB0eXBlIHN5
c3RlbSB0byBhbGxvdyB0cmFuc2ZlciBvZiBvd25lcnNoaXAgb3V0IG9mCiAgICAgLy8gYSBjb25z
dCBQYXNzV2Vhay4gSG93ZXZlciwgaXQgbWFrZXMgaXQgbXVjaCBlYXNpZXIgdG8gd29yayB3aXRo
IFBhc3NXZWFrCiAgICAgLy8gdGVtcG9yYXJpZXMsIGFuZCB3ZSBkb24ndCBoYXZlIGEgbmVlZCB0
byB1c2UgcmVhbCBjb25zdCBQYXNzV2Vha3MgYW55d2F5LgotICAgIFBhc3NXZWFrKGNvbnN0IFBh
c3NXZWFrJiBvKSA6IEhhbmRsZTxUPihvLmxlYWtIYW5kbGUoKSkgeyB9Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gUGFzc1dlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG8pIDogSGFuZGxlPFQ+KG8u
bGVha0hhbmRsZSgpKSB7IH0KKyAgICBQYXNzV2Vhayhjb25zdCBQYXNzV2VhayYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+Jik7CisKKyAgICB+
UGFzc1dlYWsoKTsKIAotICAgIH5QYXNzV2VhaygpCi0gICAgewotICAgICAgICBpZiAoIXNsb3Qo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90
KCkpLT5kZWFsbG9jYXRlKHNsb3QoKSk7Ci0gICAgICAgIHNldFNsb3QoMCk7Ci0gICAgfQorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CiAKLSAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29uc3Qg
eyByZXR1cm4gIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdChzbG90KCkpOyB9CisgICAgLy8g
VGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJv
b2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgSlNWYWx1ZSAo
UGFzc1dlYWs6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmll
ZEJvb2xUeXBlKigpIGNvbnN0OwogCi0gICAgSGFuZGxlU2xvdCBsZWFrSGFuZGxlKCkgY29uc3Qg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdlYWtJbXBsKiBsZWFrSW1wbCgpIGNvbnN0IFdBUk5f
VU5VU0VEX1JFVFVSTjsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgUGFzc1dlYWsgYWRvcHRXZWFr
PFQ+KEhhbmRsZVNsb3QpOworICAgIGZyaWVuZCBQYXNzV2VhayBhZG9wdFdlYWs8VD4oV2Vha0lt
cGwqKTsKKyAgICBleHBsaWNpdCBQYXNzV2VhayhXZWFrSW1wbCopOwogCi0gICAgZXhwbGljaXQg
UGFzc1dlYWsoSGFuZGxlU2xvdCBzbG90KSA6IEhhbmRsZTxUPihzbG90KSB7IH0KKyAgICBXZWFr
SW1wbCogbV9pbXBsOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEhhbmRsZVNs
b3QgUGFzc1dlYWs8VD46OmxlYWtIYW5kbGUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgQmFz
ZSwgdHlwZW5hbWUgVD4gaW5saW5lIFQqIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVD46Om9wZXJh
dG9yLT4oKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhp
cyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+c3Rh
dGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGlubGluZSBUJiBXZWFrSW1wbEFj
Y2Vzc29yPEJhc2UsIFQ+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNl
Kj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJu
ICpqc0Nhc3Q8VCo+KHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1Zh
bHVlKCkuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBXZWFr
SW1wbEFjY2Vzc29yPEJhc2UsIFQ+OjpnZXQoKSBjb25zdAoreworICAgIGlmICghc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwgfHwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+
KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgIHJldHVy
biBHZXRUeXBlKCk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
ZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9CisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBUPiBpbmxpbmUgYm9v
bCBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+Ojp3YXModHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3Nv
cjxCYXNlLCBUPjo6R2V0VHlwZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4ganNDYXN0PFQq
PihzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+anNWYWx1ZSgpLmFzQ2Vs
bCgpKSA9PSBvdGhlcjsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBpbmxp
bmUgY29uc3QgSlNWYWx1ZSogV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBVbmtub3duPjo6b3BlcmF0
b3ItPigpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlz
KS0+bV9pbXBsICYmIHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5zdGF0
ZSgpID09IFdlYWtJbXBsOjpMaXZlKTsKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PGNvbnN0IEJh
c2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJh
c2U+IGlubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25vd24+
OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBCYXNl
Kj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1w
bC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhc2U+IGlubGluZSB0eXBlbmFtZSBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25vd24+
OjpHZXRUeXBlIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93bj46OmdldCgpIGNvbnN0Cit7
CisgICAgaWYgKCFzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCB8fCBzdGF0
aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1wbDo6
TGl2ZSkKKyAgICAgICAgcmV0dXJuIEdldFR5cGUoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2VhaygpCisgICAgOiBtX2ltcGwoMCkK
K3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2Vh
ayhzdGQ6Om51bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgdHlwZW5hbWUgUGFzc1dlYWs8VD46OkdldFR5cGUgZ2V0VHlwZSwgV2Vha0hhbmRsZU93
bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgOiBtX2ltcGwoZ2xvYmFsRGF0YS5o
ZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKGdldFR5cGUsIHdlYWtPd25lciwgY29udGV4dCkpCit7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxUPjo6UGFzc1dlYWso
Y29uc3QgUGFzc1dlYWsmIG8pCisgICAgOiBtX2ltcGwoby5sZWFrSW1wbCgpKQoreworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc1dlYWs8
VD46OlBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvKQorICAgIDogbV9pbXBsKG8ubGVha0lt
cGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+Ojp+
UGFzc1dlYWsoKQoreworICAgIGlmICghbV9pbXBsKQorICAgICAgICByZXR1cm47CisgICAgV2Vh
a0hlYXA6OmRlYWxsb2NhdGUobV9pbXBsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIGJvb2wgUGFzc1dlYWs8VD46Om9wZXJhdG9yISgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFt
X2ltcGwgfHwgbV9pbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlIHx8ICFtX2ltcGwtPmpz
VmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+Ojpv
cGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KCEhKnRoaXMpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKFdlYWtJbXBsKiBpbXBs
KQorOiBtX2ltcGwoaW1wbCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdl
YWtJbXBsKiBQYXNzV2VhazxUPjo6bGVha0ltcGwoKSBjb25zdAogewotICAgIEhhbmRsZVNsb3Qg
c2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICBjb25zdF9jYXN0PFBhc3NXZWFrPFQ+Kj4odGhpcykt
PnNldFNsb3QoMCk7Ci0gICAgcmV0dXJuIHNsb3Q7CisgICAgV2Vha0ltcGwqIHRtcCA9IDA7Cisg
ICAgc3RkOjpzd2FwKHRtcCwgY29uc3RfY2FzdDxXZWFrSW1wbComPihtX2ltcGwpKTsKKyAgICBy
ZXR1cm4gdG1wOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNzV2VhazxUPiBhZG9wdFdl
YWsoSGFuZGxlU2xvdCBzbG90KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1dlYWs8VD4gaW5s
aW5lIGFkb3B0V2VhayhXZWFrSW1wbCogaW1wbCkKIHsKLSAgICByZXR1cm4gUGFzc1dlYWs8VD4o
c2xvdCk7CisgICAgcmV0dXJuIFBhc3NXZWFrPFQ+KGltcGwpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NXZWFr
PFQ+JiBhLCBjb25zdCBQYXNzV2VhazxVPiYgYikgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdHJvbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdHJvbmcuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Ryb25nLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDExICs4MSwxOSBAQCBwdWJsaWM6CiAg
ICAgICAgIGNsZWFyKCk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhc2xvdCgpIHx8ICEqc2xvdCgpOyB9CisKKyAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3Bl
cmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVy
IGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNlOjoqVW5zcGVj
aWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25z
dCB7IHJldHVybiAhISp0aGlzID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBl
Kj4oMSkgOiAwOyB9CisKICAgICB2b2lkIHN3YXAoU3Ryb25nJiBvdGhlcikKICAgICB7CiAgICAg
ICAgIEhhbmRsZTxUPjo6c3dhcChvdGhlcik7CiAgICAgfQogCisgICAgRXh0ZXJuYWxUeXBlIGdl
dCgpIGNvbnN0IHsgcmV0dXJuIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdCh0aGlzLT5zbG90
KCkpOyB9CisKICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBFeHRlcm5hbFR5cGUpOwogCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IFN0cm9uZyYgb3BlcmF0b3I9KGNvbnN0IFN0cm9uZzxV
PiYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCShyZXZpc2lvbiAxMTI1
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDEwOSArMjcsMTI5IEBACiAjZGVmaW5lIFdlYWtfaAogCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbmNsdWRlICJIYW5kbGUuaCIKLSNpbmNsdWRlICJIYW5kbGVIZWFwLmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiUGFzc1dlYWsuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLS8vIEEgd2Vha2x5IHJlZmVyZW5jZWQgaGFuZGxlIHRoYXQgYmVjb21l
cyAwIHdoZW4gdGhlIHZhbHVlIGl0IHBvaW50cyB0byBpcyBnYXJiYWdlIGNvbGxlY3RlZC4KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIEhhbmRsZTxUPiB7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIFdlYWtJbXBsQWNjZXNzb3I8V2Vh
azxUPiwgVD4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWspOwotCi0gICAgdXNpbmcg
SGFuZGxlPFQ+OjpzbG90OwotICAgIHVzaW5nIEhhbmRsZTxUPjo6c2V0U2xvdDsKLQogcHVibGlj
OgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5cGUgRXh0ZXJuYWxU
eXBlOworICAgIGZyaWVuZCBjbGFzcyBXZWFrSW1wbEFjY2Vzc29yPFdlYWs8VD4sIFQ+OworICAg
IHVzaW5nIHR5cGVuYW1lIFdlYWtJbXBsQWNjZXNzb3I8V2VhazxUPiwgVD46OkdldFR5cGU7CiAK
LSAgICBXZWFrKCkKLSAgICAgICAgOiBIYW5kbGU8VD4oKQotICAgIHsKLSAgICB9Ci0KLSAgICBX
ZWFrKHN0ZDo6bnVsbHB0cl90KQotICAgICAgICA6IEhhbmRsZTxUPigpCi0gICAgewotICAgIH0K
LQotICAgIFdlYWsoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeHRlcm5hbFR5cGUgZXh0ZXJu
YWxUeXBlID0gRXh0ZXJuYWxUeXBlKCksIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyID0gMCwg
dm9pZCogY29udGV4dCA9IDApCi0gICAgICAgIDogSGFuZGxlPFQ+KGdsb2JhbERhdGEuaGVhcC5o
YW5kbGVIZWFwKCktPmFsbG9jYXRlKCkpCi0gICAgewotICAgICAgICBIYW5kbGVIZWFwOjpoZWFw
Rm9yKHNsb3QoKSktPm1ha2VXZWFrKHNsb3QoKSwgd2Vha093bmVyLCBjb250ZXh0KTsKLSAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEhhbmRsZVR5cGVzPFQ+Ojp0b0pTVmFsdWUoZXh0ZXJuYWxUeXBl
KTsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT53cml0ZUJhcnJpZXIoc2xv
dCgpLCB2YWx1ZSk7Ci0gICAgICAgICpzbG90KCkgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBlbnVt
IEFkb3B0VGFnIHsgQWRvcHQgfTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBXZWFrKEFkb3B0
VGFnLCBIYW5kbGU8VT4gaGFuZGxlKQotICAgICAgICA6IEhhbmRsZTxUPihoYW5kbGUuc2xvdCgp
KQotICAgIHsKLSAgICAgICAgdmFsaWRhdGVDZWxsKGdldCgpKTsKLSAgICB9CisgICAgV2Vhaygp
OworICAgIFdlYWsoc3RkOjpudWxscHRyX3QpOworICAgIFdlYWsoSlNHbG9iYWxEYXRhJiwgR2V0
VHlwZSA9IEdldFR5cGUoKSwgV2Vha0hhbmRsZU93bmVyKiA9IDAsIHZvaWQqIGNvbnRleHQgPSAw
KTsKIAogICAgIGVudW0gSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnIHsgSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlIH07Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIHNsb3QoKSA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotICAgIFdlYWsoSGFzaFRh
YmxlRGVsZXRlZFZhbHVlVGFnKQotICAgICAgICA6IEhhbmRsZTxUPihoYXNoVGFibGVEZWxldGVk
VmFsdWUoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gV2Vhayhj
b25zdCBQYXNzV2VhazxVPiYgb3RoZXIpCi0gICAgICAgIDogSGFuZGxlPFQ+KG90aGVyLmxlYWtI
YW5kbGUoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgfldlYWsoKQotICAgIHsKLSAgICAgICAgY2xl
YXIoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN3YXAoV2VhayYgb3RoZXIpCi0gICAgewotICAgICAg
ICBIYW5kbGU8VD46OnN3YXAob3RoZXIpOwotICAgIH0KKyAgICBib29sIGlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkgY29uc3Q7CisgICAgV2VhayhIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpOwog
Ci0gICAgV2VhayYgb3BlcmF0b3I9KGNvbnN0IFBhc3NXZWFrPFQ+Jik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gV2Vhayhjb25zdCBQYXNzV2VhazxVPiYpOwogCi0gICAgRXh0ZXJuYWxUeXBl
IGdldCgpIGNvbnN0IHsgcmV0dXJuICBIYW5kbGVUeXBlczxUPjo6Z2V0RnJvbVNsb3Qoc2xvdCgp
KTsgfQotICAgIAotICAgIFBhc3NXZWFrPFQ+IHJlbGVhc2UoKSB7IFBhc3NXZWFrPFQ+IHRtcCA9
IGFkb3B0V2VhazxUPihzbG90KCkpOyBzZXRTbG90KDApOyByZXR1cm4gdG1wOyB9CisgICAgfldl
YWsoKTsKIAotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgaWYgKCFzbG90KCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+
ZGVhbGxvY2F0ZShzbG90KCkpOwotICAgICAgICBzZXRTbG90KDApOwotICAgIH0KKyAgICB2b2lk
IHN3YXAoV2VhayYpOworICAgIFdlYWsmIG9wZXJhdG9yPShjb25zdCBQYXNzV2VhazxUPiYpOwog
ICAgIAotICAgIEhhbmRsZVNsb3QgbGVha0hhbmRsZSgpCi0gICAgewotICAgICAgICBBU1NFUlQo
SGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5oYXNGaW5hbGl6ZXIoc2xvdCgpKSk7Ci0gICAg
ICAgIEhhbmRsZVNsb3QgcmVzdWx0ID0gc2xvdCgpOwotICAgICAgICBzZXRTbG90KDApOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0Owor
CisgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJz
aW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYg
SlNWYWx1ZSAoSGFuZGxlQmFzZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9wZXJhdG9y
IFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3Q7CiAKKyAgICBQYXNzV2VhazxUPiByZWxlYXNl
KCk7CisgICAgdm9pZCBjbGVhcigpOworICAgIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSGFuZGxl
U2xvdCBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEhh
bmRsZVNsb3Q+KC0xKTsgfQorICAgIHN0YXRpYyBXZWFrSW1wbCogaGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCk7CisKKyAgICBXZWFrSW1wbCogbV9pbXBsOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIFdlYWs8VD46OldlYWsoKQorICAgIDogbV9pbXBsKDApCit7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpXZWFrKHN0ZDo6bnVsbHB0cl90KQorICAg
IDogbV9pbXBsKDApCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+
OjpXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdHlwZW5hbWUgV2VhazxUPjo6R2V0VHlw
ZSBnZXRUeXBlLCBXZWFrSGFuZGxlT3duZXIqIHdlYWtPd25lciwgdm9pZCogY29udGV4dCkKKyAg
ICA6IG1faW1wbChnbG9iYWxEYXRhLmhlYXAud2Vha0hlYXAoKS0+YWxsb2NhdGUoZ2V0VHlwZSwg
d2Vha093bmVyLCBjb250ZXh0KSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IGJvb2wgV2VhazxUPjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2ltcGwgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpXZWFrKHR5cGVuYW1lIFdlYWs8VD46Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVRhZykKKyAgICA6IG1faW1wbChoYXNoVGFibGVEZWxldGVkVmFsdWUoKSkK
K3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4gIGlubGlu
ZSBXZWFrPFQ+OjpXZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvdGhlcikKKyAgICA6IG1faW1wbChv
dGhlci5sZWFrSW1wbCgpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2Vh
azxUPjo6fldlYWsoKQoreworICAgIGNsZWFyKCk7Cit9CisKIHRlbXBsYXRlPGNsYXNzIFQ+IGlu
bGluZSB2b2lkIHN3YXAoV2VhazxUPiYgYSwgV2VhazxUPiYgYikKIHsKICAgICBhLnN3YXAoYik7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIFdlYWs8VD46OnN3YXAoV2Vh
ayYgb3RoZXIpCit7CisgICAgc3RkOjpzd2FwKG1faW1wbCwgb3RoZXIubV9pbXBsKTsKK30KKwog
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWs8VD4mIFdlYWs8VD46Om9wZXJhdG9yPShj
b25zdCBQYXNzV2VhazxUPiYgbykKIHsKICAgICBjbGVhcigpOwotICAgIHNldFNsb3Qoby5sZWFr
SGFuZGxlKCkpOworICAgIG1faW1wbCA9IG8ubGVha0ltcGwoKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIFdlYWs8VD46Om9wZXJhdG9y
ISgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2ltcGwgfHwgIW1faW1wbC0+anNWYWx1ZSgpIHx8
IG1faW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1wbDo6TGl2ZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFdlYWs8VD46Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4o
ISEqdGhpcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxUPiBX
ZWFrPFQ+OjpyZWxlYXNlKCkKK3sKKyAgICBQYXNzV2VhazxUPiB0bXAgPSBhZG9wdFdlYWs8VD4o
bV9pbXBsKTsKKyAgICBtX2ltcGwgPSAwOworICAgIHJldHVybiB0bXA7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIFdlYWs8VD46OmNsZWFyKCkKK3sKKyAgICBpZiAoIW1f
aW1wbCkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKG1faW1wbCk7
CisgICAgbV9pbXBsID0gMDsKK30KKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBX
ZWFrSW1wbCogV2VhazxUPjo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkKK3sKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxXZWFrSW1wbCo+KC0xKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMTUxLDcgKzE3MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBIYXNoVHJhaXRzPEoKICAgICBzdGF0aWMgUGFzc091dFR5cGUgcGFzc091dChT
dG9yYWdlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLnJlbGVhc2UoKTsgfQogICAgIHN0YXRp
YyBQYXNzT3V0VHlwZSBwYXNzT3V0KEVtcHR5VmFsdWVUeXBlKSB7IHJldHVybiBQYXNzT3V0VHlw
ZSgpOyB9CiAKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFN0b3JhZ2VUeXBlOjpFeHRlcm5hbFR5cGUg
UGVla1R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBTdG9yYWdlVHlwZTo6R2V0VHlwZSBQZWVr
VHlwZTsKICAgICBzdGF0aWMgUGVla1R5cGUgcGVlayhjb25zdCBTdG9yYWdlVHlwZSYgdmFsdWUp
IHsgcmV0dXJuIHZhbHVlLmdldCgpOyB9CiAgICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoRW1wdHlW
YWx1ZVR5cGUpIHsgcmV0dXJuIFBlZWtUeXBlKCk7IH0KIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWFrQmxvY2su
aCIKKworI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKKyNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1dlYWtCbG9jayogV2Vh
a0Jsb2NrOjpjcmVhdGUoKQoreworICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBhbGxvY2F0aW9u
ID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjphbGxvY2F0ZShibG9ja1NpemUsIGJsb2NrU2l6ZSwg
T1NBbGxvY2F0b3I6OkpTR0NIZWFwUGFnZXMpOworICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4o
YWxsb2NhdGlvbikpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIG5ldyAoTm90TnVsbCwg
YWxsb2NhdGlvbi5iYXNlKCkpIFdlYWtCbG9jayhhbGxvY2F0aW9uKTsKK30KKwordm9pZCBXZWFr
QmxvY2s6OmRlc3Ryb3koV2Vha0Jsb2NrKiBibG9jaykKK3sKKyAgICBibG9jay0+bV9hbGxvY2F0
aW9uLmRlYWxsb2NhdGUoKTsKK30KKworV2Vha0Jsb2NrOjpXZWFrQmxvY2soUGFnZUFsbG9jYXRp
b25BbGlnbmVkJiBhbGxvY2F0aW9uKQorICAgIDogSGVhcEJsb2NrKGFsbG9jYXRpb24pCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWFrSW1wbENvdW50KCk7ICsraSkgeworICAgICAg
ICBXZWFrSW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxzKClbaV07CisgICAgICAgIG5ldyAoTm90
TnVsbCwgd2Vha0ltcGwpIFdlYWtJbXBsOworICAgICAgICBhZGRUb0ZyZWVMaXN0KCZtX3N3ZWVw
UmVzdWx0LmZyZWVMaXN0LCB3ZWFrSW1wbCk7CisgICAgfQorCisgICAgQVNTRVJUKCFtX3N3ZWVw
UmVzdWx0LmlzTnVsbCgpICYmIG1fc3dlZXBSZXN1bHQuYmxvY2tJc0ZyZWUpOworfQorCit2b2lk
IFdlYWtCbG9jazo6ZmluYWxpemVBbGwoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
d2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndl
YWtJbXBscygpW2ldOworICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPj0gV2Vha0ltcGw6
OkZpbmFsaXplZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB3ZWFrSW1wbC0+c2V0
U3RhdGUoV2Vha0ltcGw6OkRlYWQpOworICAgICAgICBmaW5hbGl6ZSh3ZWFrSW1wbCk7CisgICAg
fQorfQorCit2b2lkIFdlYWtCbG9jazo6c3dlZXAoKQoreworICAgIGlmICghbV9zd2VlcFJlc3Vs
dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3dlZXBSZXN1bHQgc3dlZXBSZXN1
bHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWFrSW1wbENvdW50KCk7ICsraSkgewor
ICAgICAgICBXZWFrSW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxzKClbaV07CisgICAgICAgIGlm
ICh3ZWFrSW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6RGVhZCkKKyAgICAgICAgICAgIGZpbmFs
aXplKHdlYWtJbXBsKTsKKyAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID09IFdlYWtJbXBs
OjpEZWFsbG9jYXRlZCkKKyAgICAgICAgICAgIGFkZFRvRnJlZUxpc3QoJnN3ZWVwUmVzdWx0LmZy
ZWVMaXN0LCB3ZWFrSW1wbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN3ZWVwUmVzdWx0
LmJsb2NrSXNGcmVlID0gZmFsc2U7CisgICAgfQorCisgICAgbV9zd2VlcFJlc3VsdCA9IHN3ZWVw
UmVzdWx0OworICAgIEFTU0VSVCghbV9zd2VlcFJlc3VsdC5pc051bGwoKSk7Cit9CisKK3ZvaWQg
V2Vha0Jsb2NrOjp2aXNpdExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZp
c2l0b3IpCit7CisgICAgLy8gSWYgYSBibG9jayBpcyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0
IHdvbid0IGhhdmUgYW55IGVmZmVjdC4KKyAgICBpZiAoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkg
JiYgbV9zd2VlcFJlc3VsdC5ibG9ja0lzRnJlZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2xv
dFZpc2l0b3ImIHZpc2l0b3IgPSBoZWFwUm9vdFZpc2l0b3IudmlzaXRvcigpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB3ZWFrSW1wbENvdW50KCk7ICsraSkgeworICAgICAgICBXZWFr
SW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxzKClbaV07CisgICAgICAgIGlmICh3ZWFrSW1wbC0+
c3RhdGUoKSAhPSBXZWFrSW1wbDo6TGl2ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGNvbnN0IEpTVmFsdWUmIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOworICAgICAg
ICBpZiAoIWpzVmFsdWUgfHwgIWpzVmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IGpzVmFsdWUuYXNDZWxsKCk7CisgICAgICAg
IGlmIChIZWFwOjppc01hcmtlZChqc0NlbGwpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIgPSB3ZWFrSW1wbC0+d2Vha0hh
bmRsZU93bmVyKCk7CisgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1
ZSY+KGpzVmFsdWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvcikpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJmNvbnN0X2Nhc3Q8
SlNWYWx1ZSY+KGpzVmFsdWUpKTsKKyAgICB9Cit9CisKK3ZvaWQgV2Vha0Jsb2NrOjp2aXNpdERl
YWRXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJikKK3sKKyAgICAvLyBJZiBhIGJsb2NrIGlzIGNv
bXBsZXRlbHkgZW1wdHksIGEgdmlzaXQgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgorICAgIGlmICgh
bV9zd2VlcFJlc3VsdC5pc051bGwoKSAmJiBtX3N3ZWVwUmVzdWx0LmJsb2NrSXNGcmVlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYWtJbXBsQ291bnQo
KTsgKytpKSB7CisgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsK
KyAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID4gV2Vha0ltcGw6OkRlYWQpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBjb25zdCBKU1ZhbHVlJiBqc1ZhbHVlID0gd2Vha0lt
cGwtPmpzVmFsdWUoKTsKKyAgICAgICAgaWYgKCFqc1ZhbHVlIHx8ICFqc1ZhbHVlLmlzQ2VsbCgp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgSlNDZWxsKiBqc0NlbGwgPSBqc1Zh
bHVlLmFzQ2VsbCgpOworICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoanNDZWxsKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHdlYWtJbXBsLT5zZXRTdGF0ZShXZWFrSW1wbDo6
RGVhZCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWFrQmxvY2tfaAorI2RlZmluZSBXZWFrQmxvY2tfaAorCisj
aW5jbHVkZSAiSGVhcEJsb2NrLmgiCisjaW5jbHVkZSAiV2Vha0hhbmRsZU93bmVyLmgiCisjaW5j
bHVkZSAiV2Vha0ltcGwuaCIKKyNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwUm9vdFZpc2l0b3I7Citj
bGFzcyBKU1ZhbHVlOworY2xhc3MgV2Vha0hhbmRsZU93bmVyOworCitjbGFzcyBXZWFrQmxvY2sg
OiBwdWJsaWMgSGVhcEJsb2NrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJs
b2NrU2l6ZSA9IDQgKiBLQjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJsb2NrTWFzayA9IH4o
YmxvY2tTaXplIC0gMSk7CisKKyAgICBzdHJ1Y3QgRnJlZUNlbGwgeworICAgICAgICBGcmVlQ2Vs
bCogbmV4dDsKKyAgICB9OworCisgICAgc3RydWN0IFN3ZWVwUmVzdWx0IHsKKyAgICAgICAgU3dl
ZXBSZXN1bHQoKTsKKyAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdDsKKworICAgICAgICBib29s
IGJsb2NrSXNGcmVlOworICAgICAgICBGcmVlQ2VsbCogZnJlZUxpc3Q7CisgICAgfTsKKworICAg
IHN0YXRpYyBXZWFrQmxvY2sqIGNyZWF0ZSgpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koV2Vh
a0Jsb2NrKik7CisKKyAgICBzdGF0aWMgV2Vha0Jsb2NrKiBibG9ja0ZvcihXZWFrSW1wbCopOwor
ICAgIHN0YXRpYyBXZWFrSW1wbCogYXNXZWFrSW1wbChGcmVlQ2VsbCopOworCisgICAgdm9pZCBz
d2VlcCgpOworICAgIGNvbnN0IFN3ZWVwUmVzdWx0JiBzd2VlcFJlc3VsdCgpOworICAgIFN3ZWVw
UmVzdWx0IHRha2VTd2VlcFJlc3VsdCgpOworCisgICAgdm9pZCBkZWFsbG9jYXRlKFdlYWtJbXBs
Kik7CisKKyAgICB2b2lkIHZpc2l0TGl2ZVdlYWtJbXBscyhIZWFwUm9vdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHZpc2l0RGVhZFdlYWtJbXBscyhIZWFwUm9vdFZpc2l0b3ImKTsKKworICAgIHZvaWQg
ZmluYWxpemVBbGwoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgRnJlZUNlbGwqIGFzRnJlZUNl
bGwoV2Vha0ltcGwqKTsKKworICAgIFdlYWtCbG9jayhQYWdlQWxsb2NhdGlvbkFsaWduZWQmKTsK
KyAgICBXZWFrSW1wbCogZmlyc3RXZWFrSW1wbCgpOworICAgIHZvaWQgZmluYWxpemUoV2Vha0lt
cGwqKTsKKyAgICBXZWFrSW1wbCogd2Vha0ltcGxzKCk7CisgICAgc2l6ZV90IHdlYWtJbXBsQ291
bnQoKTsKKyAgICB2b2lkIGFkZFRvRnJlZUxpc3QoRnJlZUNlbGwqKiwgV2Vha0ltcGwqKTsKKwor
ICAgIFN3ZWVwUmVzdWx0IG1fc3dlZXBSZXN1bHQ7Cit9OworCitpbmxpbmUgV2Vha0Jsb2NrOjpT
d2VlcFJlc3VsdDo6U3dlZXBSZXN1bHQoKQorICAgIDogYmxvY2tJc0ZyZWUodHJ1ZSkKKyAgICAs
IGZyZWVMaXN0KDApCit7CisgICAgQVNTRVJUKGlzTnVsbCgpKTsKK30KKworaW5saW5lIGJvb2wg
V2Vha0Jsb2NrOjpTd2VlcFJlc3VsdDo6aXNOdWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYmxv
Y2tJc0ZyZWUgJiYgIWZyZWVMaXN0OyAvLyBUaGlzIHN0YXRlIGlzIGltcG9zc2libGUsIHNvIHdl
IGNhbiB1c2UgaXQgdG8gbWVhbiBudWxsLgorfQorCitpbmxpbmUgV2Vha0Jsb2NrKiBXZWFrQmxv
Y2s6OmJsb2NrRm9yKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxXZWFrQmxvY2sqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4od2Vha0ltcGwp
ICYgYmxvY2tNYXNrKTsKK30KKworaW5saW5lIFdlYWtJbXBsKiBXZWFrQmxvY2s6OmFzV2Vha0lt
cGwoRnJlZUNlbGwqIGZyZWVDZWxsKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdl
YWtJbXBsKj4oZnJlZUNlbGwpOworfQorCitpbmxpbmUgV2Vha0Jsb2NrOjpTd2VlcFJlc3VsdCBX
ZWFrQmxvY2s6OnRha2VTd2VlcFJlc3VsdCgpCit7CisgICAgU3dlZXBSZXN1bHQgdG1wOworICAg
IHN0ZDo6c3dhcCh0bXAsIG1fc3dlZXBSZXN1bHQpOworICAgIEFTU0VSVChtX3N3ZWVwUmVzdWx0
LmlzTnVsbCgpKTsKKyAgICByZXR1cm4gdG1wOworfQorCitpbmxpbmUgY29uc3QgV2Vha0Jsb2Nr
OjpTd2VlcFJlc3VsdCYgV2Vha0Jsb2NrOjpzd2VlcFJlc3VsdCgpCit7CisgICAgcmV0dXJuIG1f
c3dlZXBSZXN1bHQ7Cit9CisKK2lubGluZSBXZWFrQmxvY2s6OkZyZWVDZWxsKiBXZWFrQmxvY2s6
OmFzRnJlZUNlbGwoV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEZyZWVDZWxsKj4od2Vha0ltcGwpOworfQorCitpbmxpbmUgdm9pZCBXZWFrQmxvY2s6
OmRlYWxsb2NhdGUoV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIHdlYWtJbXBsLT5zZXRTdGF0
ZShXZWFrSW1wbDo6RGVhbGxvY2F0ZWQpOworfQorCitpbmxpbmUgdm9pZCBXZWFrQmxvY2s6OmZp
bmFsaXplKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICBBU1NFUlQod2Vha0ltcGwtPnN0YXRl
KCkgPT0gV2Vha0ltcGw6OkRlYWQpOworICAgIHdlYWtJbXBsLT5zZXRTdGF0ZShXZWFrSW1wbDo6
RmluYWxpemVkKTsKKyAgICBXZWFrSGFuZGxlT3duZXIqIHdlYWtIYW5kbGVPd25lciA9IHdlYWtJ
bXBsLT53ZWFrSGFuZGxlT3duZXIoKTsKKyAgICBpZiAoIXdlYWtIYW5kbGVPd25lcikKKyAgICAg
ICAgcmV0dXJuOworICAgIHdlYWtIYW5kbGVPd25lci0+ZmluYWxpemUoSGFuZGxlPFVua25vd24+
Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4od2Vha0ltcGwtPmpzVmFsdWUoKSkpLCB3
ZWFrSW1wbC0+Y29udGV4dCgpKTsKK30KKworaW5saW5lIFdlYWtJbXBsKiBXZWFrQmxvY2s6Ondl
YWtJbXBscygpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0ltcGwqPih0aGlz
KSArICgoc2l6ZW9mKFdlYWtCbG9jaykgKyBzaXplb2YoV2Vha0ltcGwpIC0gMSkgLyBzaXplb2Yo
V2Vha0ltcGwpKTsKK30KKworaW5saW5lIHNpemVfdCBXZWFrQmxvY2s6OndlYWtJbXBsQ291bnQo
KQoreworICAgIHJldHVybiAoYmxvY2tTaXplIC8gc2l6ZW9mKFdlYWtJbXBsKSkgLSAoKHNpemVv
ZihXZWFrQmxvY2spICsgc2l6ZW9mKFdlYWtJbXBsKSAtIDEpIC8gc2l6ZW9mKFdlYWtJbXBsKSk7
Cit9CisKK2lubGluZSB2b2lkIFdlYWtCbG9jazo6YWRkVG9GcmVlTGlzdChGcmVlQ2VsbCoqIGZy
ZWVMaXN0LCBXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgQVNTRVJUKHdlYWtJbXBsLT5zdGF0
ZSgpID09IFdlYWtJbXBsOjpEZWFsbG9jYXRlZCk7CisgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0g
YXNGcmVlQ2VsbCh3ZWFrSW1wbCk7CisgICAgQVNTRVJUKCEqZnJlZUxpc3QgfHwgKChjaGFyKikq
ZnJlZUxpc3QgPiAoY2hhciopdGhpcyAmJiAoY2hhciopKmZyZWVMaXN0IDwgKGNoYXIqKXRoaXMg
KyBibG9ja1NpemUpKTsKKyAgICBBU1NFUlQoKGNoYXIqKWZyZWVDZWxsID4gKGNoYXIqKXRoaXMg
JiYgKGNoYXIqKWZyZWVDZWxsIDwgKGNoYXIqKXRoaXMgKyBibG9ja1NpemUpOworICAgIGZyZWVD
ZWxsLT5uZXh0ID0gKmZyZWVMaXN0OworICAgICpmcmVlTGlzdCA9IGZyZWVDZWxsOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFdlYWtCbG9ja19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgU2xvdFZpc2l0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBIYW5kbGU7CisKK1dl
YWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVPd25lcigpCit7Cit9CisKK2Jvb2wgV2Vha0hhbmRs
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQq
LCBTbG90VmlzaXRvciYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYWtIYW5k
bGVPd25lcjo6ZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKikKK3sKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxl
T3duZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFu
ZGxlT3duZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWFrSGFuZGxlT3duZXJfaAorI2RlZmluZSBXZWFrSGFuZGxlT3duZXJfaAor
CisjaW5jbHVkZSAiSGFuZGxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBTbG90Vmlz
aXRvcjsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgV2Vha0hhbmRsZU93bmVyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5XZWFrSGFuZGxlT3duZXIoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBT
bG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBX
ZWFrSGFuZGxlT3duZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hl
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFw
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFw
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vha0hlYXAuaCIKKworI2luY2x1ZGUgIkhlYXAuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK1dlYWtIZWFwOjp+V2Vha0hlYXAoKQoreworICAgIFdlYWtC
bG9jayogbmV4dCA9IDA7CisgICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8
V2Vha0Jsb2NrKj4obV9ibG9ja3MuaGVhZCgpKTsgYmxvY2s7IGJsb2NrID0gbmV4dCkgeworICAg
ICAgICBuZXh0ID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4oYmxvY2stPm5leHQoKSk7CisgICAg
ICAgIFdlYWtCbG9jazo6ZGVzdHJveShibG9jayk7CisgICAgfQorICAgIG1fYmxvY2tzLmNsZWFy
KCk7Cit9CisKK3ZvaWQgV2Vha0hlYXA6OmZpbmFsaXplQWxsKCkKK3sKKyAgICBmb3IgKFdlYWtC
bG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihtX2Jsb2Nrcy5oZWFkKCkpOyBi
bG9jazsgYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihibG9jay0+bmV4dCgpKSkKKyAg
ICAgICAgYmxvY2stPmZpbmFsaXplQWxsKCk7Cit9CisKK3ZvaWQgV2Vha0hlYXA6OnZpc2l0TGl2
ZVdlYWtJbXBscyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChXZWFrQmxv
Y2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3MuaGVhZCgpKTsgYmxv
Y2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4oYmxvY2stPm5leHQoKSkpCisgICAg
ICAgIGJsb2NrLT52aXNpdExpdmVXZWFrSW1wbHModmlzaXRvcik7Cit9CisKK3ZvaWQgV2Vha0hl
YXA6OnZpc2l0RGVhZFdlYWtJbXBscyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
Zm9yIChXZWFrQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3Mu
aGVhZCgpKTsgYmxvY2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4oYmxvY2stPm5l
eHQoKSkpCisgICAgICAgIGJsb2NrLT52aXNpdERlYWRXZWFrSW1wbHModmlzaXRvcik7Cit9CisK
K3ZvaWQgV2Vha0hlYXA6OnN3ZWVwKCkKK3sKKyAgICBXZWFrQmxvY2sqIG5leHQ7CisgICAgZm9y
IChXZWFrQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3MuaGVh
ZCgpKTsgYmxvY2s7IGJsb2NrID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gc3RhdGljX2Nhc3Q8
V2Vha0Jsb2NrKj4oYmxvY2stPm5leHQoKSk7CisKKyAgICAgICAgLy8gSWYgYSBibG9jayBpcyBj
b21wbGV0ZWx5IGVtcHR5LCBhIG5ldyBzd2VlcCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCisgICAg
ICAgIGlmICghYmxvY2stPnN3ZWVwUmVzdWx0KCkuaXNOdWxsKCkgJiYgYmxvY2stPnN3ZWVwUmVz
dWx0KCkuYmxvY2tJc0ZyZWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBibG9j
ay0+dGFrZVN3ZWVwUmVzdWx0KCk7IC8vIEZvcmNlIGEgbmV3IHN3ZWVwIGJ5IGRpc2NhcmRpbmcg
dGhlIGxhc3Qgc3dlZXAuCisgICAgICAgIGJsb2NrLT5zd2VlcCgpOworICAgIH0KK30KKwordm9p
ZCBXZWFrSGVhcDo6cmVzZXRBbGxvY2F0b3IoKQoreworICAgIG1fYWxsb2NhdG9yID0gMDsKKyAg
ICBtX25leHRBbGxvY2F0b3IgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihtX2Jsb2Nrcy5oZWFk
KCkpOworfQorCitXZWFrQmxvY2s6OkZyZWVDZWxsKiBXZWFrSGVhcDo6ZmluZEFsbG9jYXRvcigp
Cit7CisgICAgaWYgKFdlYWtCbG9jazo6RnJlZUNlbGwqIGFsbG9jYXRvciA9IHRyeUZpbmRBbGxv
Y2F0b3IoKSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKKworICAgIG1faGVhcC0+YWRkVG9X
YXRlck1hcmsoV2Vha0Jsb2NrOjpibG9ja1NpemUpOworCisgICAgLy8gYWRkVG9XYXRlck1hcmso
KSBtYXkgY2F1c2UgYSBHQywgc28gdHJ5IGFnYWluLgorICAgIGlmIChXZWFrQmxvY2s6OkZyZWVD
ZWxsKiBhbGxvY2F0b3IgPSB0cnlGaW5kQWxsb2NhdG9yKCkpCisgICAgICAgIHJldHVybiBhbGxv
Y2F0b3I7CisKKyAgICByZXR1cm4gYWRkQWxsb2NhdG9yKCk7Cit9CisKK1dlYWtCbG9jazo6RnJl
ZUNlbGwqIFdlYWtIZWFwOjp0cnlGaW5kQWxsb2NhdG9yKCkKK3sKKyAgICB3aGlsZSAobV9uZXh0
QWxsb2NhdG9yKSB7CisgICAgICAgIFdlYWtCbG9jayogYmxvY2sgPSBtX25leHRBbGxvY2F0b3I7
CisgICAgICAgIG1fbmV4dEFsbG9jYXRvciA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fbmV4
dEFsbG9jYXRvci0+bmV4dCgpKTsKKworICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICAgICAg
V2Vha0Jsb2NrOjpTd2VlcFJlc3VsdCBzd2VlcFJlc3VsdCA9IGJsb2NrLT50YWtlU3dlZXBSZXN1
bHQoKTsKKyAgICAgICAgaWYgKHN3ZWVwUmVzdWx0LmZyZWVMaXN0KQorICAgICAgICAgICAgcmV0
dXJuIHN3ZWVwUmVzdWx0LmZyZWVMaXN0OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitX
ZWFrQmxvY2s6OkZyZWVDZWxsKiBXZWFrSGVhcDo6YWRkQWxsb2NhdG9yKCkKK3sKKyAgICBXZWFr
QmxvY2sqIGJsb2NrID0gV2Vha0Jsb2NrOjpjcmVhdGUoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQo
YmxvY2spOworICAgIFdlYWtCbG9jazo6U3dlZXBSZXN1bHQgc3dlZXBSZXN1bHQgPSBibG9jay0+
dGFrZVN3ZWVwUmVzdWx0KCk7CisgICAgQVNTRVJUKCFzd2VlcFJlc3VsdC5pc051bGwoKSAmJiBz
d2VlcFJlc3VsdC5mcmVlTGlzdCk7CisgICAgcmV0dXJuIHN3ZWVwUmVzdWx0LmZyZWVMaXN0Owor
fQorCit2b2lkIFdlYWtIZWFwOjpyZW1vdmVBbGxvY2F0b3IoV2Vha0Jsb2NrKiBibG9jaykKK3sK
KyAgICBtX2Jsb2Nrcy5yZW1vdmUoYmxvY2spOworICAgIFdlYWtCbG9jazo6ZGVzdHJveShibG9j
ayk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrSGVhcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha0hlYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2Vha0hlYXBfaAorI2RlZmluZSBXZWFrSGVhcF9oCisKKyNpbmNsdWRlICJXZWFrQmxv
Y2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEhlYXA7CitjbGFzcyBXZWFrSW1wbDsK
KworY2xhc3MgV2Vha0hlYXAgeworcHVibGljOgorICAgIFdlYWtIZWFwKEhlYXAqKTsKKyAgICB2
b2lkIGZpbmFsaXplQWxsKCk7CisgICAgfldlYWtIZWFwKCk7CisKKyAgICBXZWFrSW1wbCogYWxs
b2NhdGUoSlNWYWx1ZSwgV2Vha0hhbmRsZU93bmVyKiA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKTsK
KyAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKFdlYWtJbXBsKik7CisKKyAgICB2b2lkIHZpc2l0
TGl2ZVdlYWtJbXBscyhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0RGVhZFdlYWtJ
bXBscyhIZWFwUm9vdFZpc2l0b3ImKTsKKworICAgIHZvaWQgc3dlZXAoKTsKKyAgICB2b2lkIHJl
c2V0QWxsb2NhdG9yKCk7CisKK3ByaXZhdGU6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgV2Vha0Js
b2NrOjpGcmVlQ2VsbCogZmluZEFsbG9jYXRvcigpOworICAgIFdlYWtCbG9jazo6RnJlZUNlbGwq
IHRyeUZpbmRBbGxvY2F0b3IoKTsKKyAgICBXZWFrQmxvY2s6OkZyZWVDZWxsKiBhZGRBbGxvY2F0
b3IoKTsKKyAgICB2b2lkIHJlbW92ZUFsbG9jYXRvcihXZWFrQmxvY2sqKTsKKworICAgIFdlYWtC
bG9jazo6RnJlZUNlbGwqIG1fYWxsb2NhdG9yOworICAgIFdlYWtCbG9jayogbV9uZXh0QWxsb2Nh
dG9yOworICAgIERvdWJseUxpbmtlZExpc3Q8SGVhcEJsb2NrPiBtX2Jsb2NrczsKKyAgICBIZWFw
KiBtX2hlYXA7Cit9OworCitpbmxpbmUgV2Vha0hlYXA6OldlYWtIZWFwKEhlYXAqIGhlYXApCisg
ICAgOiBtX2FsbG9jYXRvcigwKQorICAgICwgbV9uZXh0QWxsb2NhdG9yKDApCisgICAgLCBtX2hl
YXAoaGVhcCkKK3sKK30KKworaW5saW5lIFdlYWtJbXBsKiBXZWFrSGVhcDo6YWxsb2NhdGUoSlNW
YWx1ZSBqc1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqIHdlYWtIYW5kbGVPd25lciwgdm9pZCogY29u
dGV4dCkKK3sKKyAgICBXZWFrQmxvY2s6OkZyZWVDZWxsKiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRv
cjsKKyAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgYWxsb2NhdG9yID0gZmluZEFsbG9jYXRv
cigpOworICAgIG1fYWxsb2NhdG9yID0gYWxsb2NhdG9yLT5uZXh0OworCisgICAgV2Vha0ltcGwq
IHdlYWtJbXBsID0gV2Vha0Jsb2NrOjphc1dlYWtJbXBsKGFsbG9jYXRvcik7CisgICAgcmV0dXJu
IG5ldyAoTm90TnVsbCwgd2Vha0ltcGwpIFdlYWtJbXBsKGpzVmFsdWUsIHdlYWtIYW5kbGVPd25l
ciwgY29udGV4dCk7Cit9CisKK2lubGluZSB2b2lkIFdlYWtIZWFwOjpkZWFsbG9jYXRlKFdlYWtJ
bXBsKiB3ZWFrSW1wbCkKK3sKKyAgICBXZWFrQmxvY2s6OmJsb2NrRm9yKHdlYWtJbXBsKS0+ZGVh
bGxvY2F0ZSh3ZWFrSW1wbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
V2Vha0hlYXBfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0ltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW1wbC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0ltcGwuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYWtJbXBsX2gK
KyNkZWZpbmUgV2Vha0ltcGxfaAorCisjaW5jbHVkZSAiSlNWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgV2Vha0hhbmRsZU93bmVyOworCitjbGFzcyBXZWFrSW1wbCB7CitwdWJs
aWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIExpdmUgICAgICAgID0gMHgwLAorICAgICAg
ICBEZWFkICAgICAgICA9IDB4MSwKKyAgICAgICAgRmluYWxpemVkICAgPSAweDIsCisgICAgICAg
IERlYWxsb2NhdGVkID0gMHgzCisgICAgfTsKKworICAgIGVudW0geworICAgICAgICBTdGF0ZU1h
c2sgICA9IDB4MworICAgIH07CisKKyAgICBXZWFrSW1wbCgpOworICAgIFdlYWtJbXBsKEpTVmFs
dWUsIFdlYWtIYW5kbGVPd25lciosIHZvaWQqIGNvbnRleHQpOworCisgICAgU3RhdGUgc3RhdGUo
KTsKKyAgICB2b2lkIHNldFN0YXRlKFN0YXRlKTsKKworICAgIGNvbnN0IEpTVmFsdWUmIGpzVmFs
dWUoKTsKKyAgICBXZWFrSGFuZGxlT3duZXIqIHdlYWtIYW5kbGVPd25lcigpOworICAgIHZvaWQq
IGNvbnRleHQoKTsKKworICAgIHN0YXRpYyBXZWFrSW1wbCogYXNXZWFrSW1wbChKU1ZhbHVlKik7
CisKK3ByaXZhdGU6CisgICAgY29uc3QgSlNWYWx1ZSBtX2pzVmFsdWU7CisgICAgV2Vha0hhbmRs
ZU93bmVyKiBtX3dlYWtIYW5kbGVPd25lcjsKKyAgICB2b2lkKiBtX2NvbnRleHQ7Cit9OworCitp
bmxpbmUgV2Vha0ltcGw6OldlYWtJbXBsKCkKKyAgICA6IG1fd2Vha0hhbmRsZU93bmVyKDApCisg
ICAgLCBtX2NvbnRleHQoMCkKK3sKKyAgICBzZXRTdGF0ZShEZWFsbG9jYXRlZCk7Cit9CisKK2lu
bGluZSBXZWFrSW1wbDo6V2Vha0ltcGwoSlNWYWx1ZSBqc1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIq
IHdlYWtIYW5kbGVPd25lciwgdm9pZCogY29udGV4dCkKKyAgICA6IG1fanNWYWx1ZShqc1ZhbHVl
KQorICAgICwgbV93ZWFrSGFuZGxlT3duZXIod2Vha0hhbmRsZU93bmVyKQorICAgICwgbV9jb250
ZXh0KGNvbnRleHQpCit7CisgICAgQVNTRVJUKHN0YXRlKCkgPT0gTGl2ZSk7Cit9CisKK2lubGlu
ZSBXZWFrSW1wbDo6U3RhdGUgV2Vha0ltcGw6OnN0YXRlKCkKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8U3RhdGU+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3dlYWtIYW5kbGVPd25l
cikgJiBTdGF0ZU1hc2spOworfQorCitpbmxpbmUgdm9pZCBXZWFrSW1wbDo6c2V0U3RhdGUoV2Vh
a0ltcGw6OlN0YXRlIHN0YXRlKQoreworICAgIEFTU0VSVChzdGF0ZSA+PSB0aGlzLT5zdGF0ZSgp
KTsKKyAgICBtX3dlYWtIYW5kbGVPd25lciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0hhbmRsZU93
bmVyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3dlYWtIYW5kbGVPd25lcikgJiB+
U3RhdGVNYXNrKSB8IHN0YXRlKTsKK30KKworaW5saW5lIGNvbnN0IEpTVmFsdWUmIFdlYWtJbXBs
Ojpqc1ZhbHVlKCkKK3sKKyAgICByZXR1cm4gbV9qc1ZhbHVlOworfQorCitpbmxpbmUgV2Vha0hh
bmRsZU93bmVyKiBXZWFrSW1wbDo6d2Vha0hhbmRsZU93bmVyKCkKK3sKKyAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxXZWFrSGFuZGxlT3duZXIqPigocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG1fd2Vha0hhbmRsZU93bmVyKSAmIH5TdGF0ZU1hc2spKTsKK30KKworaW5saW5lIHZvaWQq
IFdlYWtJbXBsOjpjb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0OworfQorCitpbmxp
bmUgV2Vha0ltcGwqIFdlYWtJbXBsOjphc1dlYWtJbXBsKEpTVmFsdWUqIHNsb3QpCit7CisgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0ltcGwqPihyZWludGVycHJldF9jYXN0PGNoYXIq
PihzbG90KSArIE9CSkVDVF9PRkZTRVRPRihXZWFrSW1wbCwgbV9qc1ZhbHVlKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gV2Vha0ltcGxfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTc1LDcg
KzM1NzUsNyBAQCBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiBOYXRp
dmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yLCBJbnRyaW5zaWMgaW50cmluc2ljKQogewogICAgIEhvc3RGdW5jdGlvblN0dWJNYXA6OkFk
ZFJlc3VsdCBlbnRyeSA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQYXNz
V2VhazxOYXRpdmVFeGVjdXRhYmxlPigpKTsKLSAgICBpZiAoISplbnRyeS5pdGVyYXRvci0+c2Vj
b25kKSB7CisgICAgaWYgKCFlbnRyeS5pdGVyYXRvci0+c2Vjb25kKSB7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjb2RlOwogICAgICAgICBpZiAoZ2VuZXJhdG9yKSB7CiAgICAgICAg
ICAgICBpZiAoZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw3ICszNTEsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJv
bT4KICAgICBpbmxpbmUgVG8ganNDYXN0KEZyb20qIGZyb20pCiAgICAgewotICAgICAgICBBU1NF
UlQoZnJvbS0+aW5oZXJpdHMoJldURjo6UmVtb3ZlUG9pbnRlcjxUbz46OlR5cGU6OnNfaW5mbykp
OworICAgICAgICBBU1NFUlQoIWZyb20gfHwgZnJvbS0+aW5oZXJpdHMoJldURjo6UmVtb3ZlUG9p
bnRlcjxUbz46OlR5cGU6OnNfaW5mbykpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG8+
KGZyb20pOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAg
aW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZAogICAgICAgICAvLyBUaGVy
ZSBhbHJlYWR5IGlzIGFuIGVudHJ5ISAtIHdlIHNob3VsZCBvbmx5IGhpdCB0aGlzIHdoZW4gZGVz
cGVjaWZ5aW5nLgogICAgICAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLmdldCgpLnNlY29uZC0+
bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7CiAgICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5t
X3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKLSAgICAgICAgbWFwKCktPnNldChyZXN1bHQuaXRl
cmF0b3IsIHN0cnVjdHVyZSk7CisgICAgICAgIG1hcCgpLT5zZXQoZ2xvYmFsRGF0YSwgcmVzdWx0
Lml0ZXJhdG9yLmdldCgpLmZpcnN0LCBzdHJ1Y3R1cmUpOwogICAgIH0KIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU0NlbGw7CiBjbGFzcyBTdHJ1
Y3R1cmU7CiAKIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CkBAIC04MywxMCArODQs
MTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
SGFuZGxlU2xvdCBzbG90ID0gdGhpcy0+c2xvdCgpOwotICAgICAgICBpZiAoIXNsb3QpCisgICAg
ICAgIFdlYWtJbXBsKiBpbXBsID0gdGhpcy0+d2Vha0ltcGwoKTsKKyAgICAgICAgaWYgKCFpbXBs
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3Qp
LT5kZWFsbG9jYXRlKHNsb3QpOworICAgICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShpbXBsKTsK
ICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBhZGQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7
CkBAIC0xMDUsMTggKzEwNiwxOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUcmFuc2l0aW9uTWFwKj4obV9kYXRhKTsKICAgICB9CiAKLSAgICBIYW5kbGVTbG90
IHNsb3QoKSBjb25zdAorICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7Ci0gICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEhhbmRsZVNsb3Q+KG1fZGF0YSAmIH5Vc2luZ1NpbmdsZVNsb3RGbGFnKTsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0ltcGwqPihtX2RhdGEgJiB+VXNpbmdT
aW5nbGVTbG90RmxhZyk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRNYXAoVHJhbnNpdGlvbk1hcCog
bWFwKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKSkKLSAgICAgICAg
ICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgICAg
IGlmIChXZWFrSW1wbCogaW1wbCA9IHRoaXMtPndlYWtJbXBsKCkpCisgICAgICAgICAgICBXZWFr
SGVhcDo6ZGVhbGxvY2F0ZShpbXBsKTsKIAogICAgICAgICAvLyBUaGlzIGltcGxpY2l0bHkgY2xl
YXJzIHRoZSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdlJ3JlIHVzaW5nIGEgc2luZ2xlIHRyYW5zaXRp
b24KICAgICAgICAgbV9kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obWFwKTsKQEAg
LTEyNyw5ICsxMjgsOSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZSogc2luZ2xlVHJhbnNpdGlv
bigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7Ci0g
ICAgICAgIGlmIChIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCkpIHsKLSAgICAgICAgICAg
IGlmICgqc2xvdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJ1
Y3R1cmUqPihzbG90LT5hc0NlbGwoKSk7CisgICAgICAgIGlmIChXZWFrSW1wbCogaW1wbCA9IHRo
aXMtPndlYWtJbXBsKCkpIHsKKyAgICAgICAgICAgIGlmIChpbXBsLT5zdGF0ZSgpID09IFdlYWtJ
bXBsOjpMaXZlKQorICAgICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFN0cnVj
dHVyZSo+KGltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQpAQCAtMTM3LDE0ICsxMzgsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNl
dFNpbmdsZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKLSAg
ICAgICAgSGFuZGxlU2xvdCBzbG90ID0gdGhpcy0+c2xvdCgpOwotICAgICAgICBpZiAoIXNsb3Qp
IHsKLSAgICAgICAgICAgIHNsb3QgPSBnbG9iYWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxv
Y2F0ZSgpOwotICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWso
c2xvdCwgMCwgMCk7Ci0gICAgICAgICAgICBtX2RhdGEgPSByZWludGVycHJldF9jYXN0PGludHB0
cl90PihzbG90KSB8IFVzaW5nU2luZ2xlU2xvdEZsYWc7Ci0gICAgICAgIH0KLSAgICAgICAgSGFu
ZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+d3JpdGVCYXJyaWVyKHNsb3QsIHJlaW50ZXJwcmV0X2Nh
c3Q8SlNDZWxsKj4oc3RydWN0dXJlKSk7Ci0gICAgICAgICpzbG90ID0gcmVpbnRlcnByZXRfY2Fz
dDxKU0NlbGwqPihzdHJ1Y3R1cmUpOworICAgICAgICBpZiAoV2Vha0ltcGwqIGltcGwgPSB0aGlz
LT53ZWFrSW1wbCgpKQorICAgICAgICAgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUoaW1wbCk7Cisg
ICAgICAgIFdlYWtJbXBsKiBpbXBsID0gZ2xvYmFsRGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9j
YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oc3RydWN0dXJlKSk7CisgICAgICAgIG1fZGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGltcGwpIHwgVXNpbmdTaW5nbGVTbG90Rmxh
ZzsKICAgICB9CiAKICAgICBpbnRwdHJfdCBtX2RhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcg
KzUxLDcgQEAgY2xhc3MgV2Vha0dDTWFwIDogcHJpdmF0ZSBXZWFrSGFuZGxlT3duZQogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWtHQ01h
cCk7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSwgSGFuZGxlU2xvdCwgSGFzaEFyZywg
S2V5VHJhaXRzQXJnPiBNYXBUeXBlOworICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlUeXBlLCBXZWFr
SW1wbCosIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4gTWFwVHlwZTsKICAgICB0eXBlZGVmIHR5cGVu
YW1lIEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpFeHRlcm5hbFR5cGUgRXh0ZXJuYWxUeXBlOwog
ICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0b3IgbWFwX2l0ZXJhdG9yOwogCkBA
IC02NCw4ICs2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBzdGQ6OnBhaXI8S2V5VHlwZSwgRXh0ZXJuYWxUeXBlPiBnZXQoKSBjb25zdCB7IHJl
dHVybiBzdGQ6Om1ha2VfcGFpcihtX2l0ZXJhdG9yLT5maXJzdCwgSGFuZGxlVHlwZXM8TWFwcGVk
VHlwZT46OmdldEZyb21TbG90KG1faXRlcmF0b3ItPnNlY29uZCkpOyB9Ci0gICAgICAgIHN0ZDo6
cGFpcjxLZXlUeXBlLCBIYW5kbGVTbG90PiBnZXRTbG90KCkgY29uc3QgeyByZXR1cm4gKm1faXRl
cmF0b3I7IH0KKyAgICAgICAgc3RkOjpwYWlyPEtleVR5cGUsIEV4dGVybmFsVHlwZT4gZ2V0KCkg
Y29uc3QgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIobV9pdGVyYXRvci0+Zmlyc3QsIEhhbmRsZVR5
cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9tU2xvdChjb25zdF9jYXN0PEpTVmFsdWUqPigmbV9pdGVy
YXRvci0+c2Vjb25kLT5qc1ZhbHVlKCkpKSk7IH0KICAgICAgICAgCiAgICAgICAgIGl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkgeyArK21faXRlcmF0b3I7IHJldHVybiAqdGhpczsgfQogICAgICAgICAK
QEAgLTkwLDcgKzg5LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbWFwX2l0ZXJhdG9yIGVu
ZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3IgKG1hcF9pdGVyYXRvciBwdHIgPSBtX21hcC5i
ZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBG
b3IocHRyLT5zZWNvbmQpLT5kZWFsbG9jYXRlKHB0ci0+c2Vjb25kKTsKKyAgICAgICAgICAgIFdl
YWtIZWFwOjpkZWFsbG9jYXRlKHB0ci0+c2Vjb25kKTsKICAgICAgICAgbV9tYXAuY2xlYXIoKTsK
ICAgICB9CiAKQEAgLTEwNyw2NCArMTA2LDQyIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZShp
dGVyYXRvciBpdGVyKQogICAgIHsKICAgICAgICAgQVNTRVJUKGl0ZXIubV9pdGVyYXRvciAhPSBt
X21hcC5lbmQoKSk7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+
c2Vjb25kOwotICAgICAgICBBU1NFUlQoc2xvdCk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBG
b3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgICAgIFdlYWtJbXBsKiBpbXBsID0gaXRl
ci5tX2l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIEFTU0VSVChpbXBsKTsKKyAgICAgICAgV2Vh
a0hlYXA6OmRlYWxsb2NhdGUoaW1wbCk7CiAgICAgICAgIG1fbWFwLnJlbW92ZShpdGVyLm1faXRl
cmF0b3IpOwogICAgIH0KIAogICAgIEV4dGVybmFsVHlwZSBnZXQoY29uc3QgS2V5VHlwZSYga2V5
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+Ojpn
ZXRGcm9tU2xvdChtX21hcC5nZXQoa2V5KSk7Ci0gICAgfQotCi0gICAgSGFuZGxlU2xvdCBnZXRT
bG90KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX21h
cC5nZXQoa2V5KTsKKyAgICAgICAgcmV0dXJuIEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRG
cm9tU2xvdChjb25zdF9jYXN0PEpTVmFsdWUqPigmbV9tYXAuZ2V0KGtleSktPmpzVmFsdWUoKSkp
OwogICAgIH0KIAogICAgIEFkZFJlc3VsdCBhZGQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBj
b25zdCBLZXlUeXBlJiBrZXksIEV4dGVybmFsVHlwZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHR5
cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCAwKTsKLSAg
ICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICBIYW5kbGVTbG90IHNs
b3QgPSBnbG9iYWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpOwotICAgICAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBzbG90OwotICAgICAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgdGhpcywgRmluYWxpemVyQ2FsbGJhY2s6
OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7Ci0gICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFw
Rm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwotICAgICAgICAgICAgKnNsb3Qg
PSB2YWx1ZTsKLSAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGdsb2JhbERhdGEuaGVhcC53ZWFrSGVh
cCgpLT5hbGxvY2F0ZSh2YWx1ZSwgdGhpcywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNv
bnRleHRGb3Ioa2V5KSk7CisKICAgICAgICAgLy8gV2Vha0dDTWFwIGV4cG9zZXMgYSBkaWZmZXJl
bnQgaXRlcmF0b3IsIHNvIHdlIG5lZWQgdG8gd3JhcCBpdCBhbmQgY3JlYXRlIG91ciBvd24gQWRk
UmVzdWx0LgogICAgICAgICByZXR1cm4gQWRkUmVzdWx0KGl0ZXJhdG9yKHJlc3VsdC5pdGVyYXRv
ciksIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoaXRlcmF0
b3IgaXRlciwgRXh0ZXJuYWxUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSGFuZGxlU2xvdCBz
bG90ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgICAgIEFTU0VSVChzbG90KTsKLSAg
ICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+d3JpdGVCYXJyaWVyKHNsb3QsIHZhbHVl
KTsKLSAgICAgICAgKnNsb3QgPSB2YWx1ZTsKLSAgICB9CiAKICAgICB2b2lkIHNldChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEtleVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVl
KQogICAgIHsKICAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1f
bWFwLmFkZChrZXksIDApOwotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKLSAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAg
ICBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAg
ICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPm1ha2VXZWFrKHNsb3QsIHRoaXMsIGtl
eSk7Ci0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHNsb3Q7Ci0gICAgICAg
IH0KLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+d3JpdGVCYXJyaWVyKHNsb3Qs
IHZhbHVlKTsKLSAgICAgICAgKnNsb3QgPSB2YWx1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuaXNO
ZXdFbnRyeSkKKyAgICAgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBnbG9iYWxEYXRh
LmhlYXAud2Vha0hlYXAoKS0+YWxsb2NhdGUodmFsdWUsIHRoaXMsIEZpbmFsaXplckNhbGxiYWNr
OjpmaW5hbGl6ZXJDb250ZXh0Rm9yKGtleSkpOwogICAgIH0KIAogICAgIEV4dGVybmFsVHlwZSB0
YWtlKGNvbnN0IEtleVR5cGUmIGtleSkKICAgICB7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9
IG1fbWFwLnRha2Uoa2V5KTsKLSAgICAgICAgaWYgKCFzbG90KQorICAgICAgICBXZWFrSW1wbCog
aW1wbCA9IG1fbWFwLnRha2Uoa2V5KTsKKyAgICAgICAgaWYgKCFpbXBsKQogICAgICAgICAgICAg
cmV0dXJuIEhhc2hUcmFpdHM8RXh0ZXJuYWxUeXBlPjo6ZW1wdHlWYWx1ZSgpOwotICAgICAgICBF
eHRlcm5hbFR5cGUgcmVzdWx0ID0gSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21TbG90
KHNsb3QpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5kZWFsbG9jYXRlKHNs
b3QpOworICAgICAgICBFeHRlcm5hbFR5cGUgcmVzdWx0ID0gSGFuZGxlVHlwZXM8TWFwcGVkVHlw
ZT46OmdldEZyb21TbG90KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KCZpbXBsLT5qc1ZhbHVlKCkpKTsK
KyAgICAgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUoaW1wbCk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCkBAIC0xODEsOSArMTU4LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4
dCkKICAgICB7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IG1fbWFwLnRha2UoRmluYWxpemVy
Q2FsbGJhY2s6OmtleUZvckZpbmFsaXplcihjb250ZXh0LCBIYW5kbGVUeXBlczxNYXBwZWRUeXBl
Pjo6Z2V0RnJvbVNsb3QoaGFuZGxlLnNsb3QoKSkpKTsKLSAgICAgICAgQVNTRVJUKHNsb3QpOwot
ICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5kZWFsbG9jYXRlKHNsb3QpOworICAg
ICAgICBXZWFrSW1wbCogaW1wbCA9IG1fbWFwLnRha2UoRmluYWxpemVyQ2FsbGJhY2s6OmtleUZv
ckZpbmFsaXplcihjb250ZXh0LCBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3Qo
aGFuZGxlLnNsb3QoKSkpKTsKKyAgICAgICAgQVNTRVJUKGltcGwpOworICAgICAgICBXZWFrSGVh
cDo6ZGVhbGxvY2F0ZShpbXBsKTsKICAgICB9CiAKICAgICBNYXBUeXBlIG1fbWFwOwpJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMTEyNTg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTItMDMtMjkgIEdlb2ZmcmV5IEdhcmVu
ICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBGaXJzdCBzdGVwIHRvd2FyZCBpbmNyZW1l
bnRhbCBXZWFrPFQ+IGZpbmFsaXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODI2NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVcGRhdGVkIFdlYkNvcmUgZm9yIFdlYWs8VD4gQVBJIGNoYW5nZXMu
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNTdHJpbmdPd25lcjo6ZmluYWxpemUpOiBXZSdyZSBub3QgYWxsb3dlZCB0byBn
ZXQoKSBhIGRlYWQgV2VhazxUPgorICAgICAgICBhbnltb3JlLCBzbyB1c2UgdGhlIGRlYnVnLW9u
bHkgd2FzKCkgaGVscGVyIGZ1bmN0aW9uIGluc3RlYWQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OnVuY2FjaGVXcmFwcGVyKTogRGl0
dG8uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaDoKKyAgICAgICAgKFdl
YkNvcmU6OnNldElubGluZUNhY2hlZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJJ
bmxpbmVDYWNoZWRXcmFwcGVyKTogV2UncmUgbm90IGFsbG93ZWQgdG8gZ2V0KCkgYSBkZWFkCisg
ICAgICAgIFdlYWs8VD4sIHNvIEkgaGFkIHRvIHB1c2ggZG93biB0aGVzZSBBU1NFUlRzIGludG8g
U2NyaXB0V3JhcHBhYmxlLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNj
ZXB0Tm9kZSk6IFVwZGF0ZWQgZm9yIG5vbi1IYW5kbGUtbmVzcworICAgICAgICBvZiBXZWFrPFQ+
LgorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRXcmFwcGFibGU6OnNldFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0V3JhcHBhYmxlOjpjbGVhcldyYXBwZXIpOiBVc2Ugd2FzKCksIGFzIGFib3ZlLgorCiAy
MDEyLTAzLTI5ICBCZWFyIFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KIAogICAgICAgICBV
cGRhdGUgQ1NTIEV4Y2x1c2lvbiB3cmFwLWZsb3cgdmFsdWVzIGxlZnQgJiByaWdodCB0byBzdGFy
dCAmIGVuZApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVy
V29ybGQuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01XcmFwcGVyV29ybGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHZv
aWQgSlNTdHJpbmdPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGUKIHsKICAgICBKU1N0cmluZyog
anNTdHJpbmcgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7
CiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihj
b250ZXh0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGpzU3RyaW5nLCBtX3dvcmxkLT5tX3N0cmluZ0Nh
Y2hlLmZpbmQoc3RyaW5nSW1wbCktPnNlY29uZC5nZXQoKSA9PSBqc1N0cmluZyk7CisgICAgQVNT
RVJUX1VOVVNFRChqc1N0cmluZywgbV93b3JsZC0+bV9zdHJpbmdDYWNoZS5maW5kKHN0cmluZ0lt
cGwpLT5zZWNvbmQud2FzKGpzU3RyaW5nKSk7CiAgICAgbV93b3JsZC0+bV9zdHJpbmdDYWNoZS5y
ZW1vdmUoc3RyaW5nSW1wbCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw3IEBA
IGVudW0gUGFyYW1ldGVyRGVmYXVsdFBvbGljeSB7CiAgICAgewogICAgICAgICBpZiAoY2xlYXJJ
bmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQod29ybGQtPm1fd3JhcHBlcnMuZmluZChkb21PYmpl
Y3QpLT5zZWNvbmQuZ2V0KCkgPT0gd3JhcHBlcik7CisgICAgICAgIEFTU0VSVCh3b3JsZC0+bV93
cmFwcGVycy5maW5kKGRvbU9iamVjdCktPnNlY29uZC53YXMod3JhcHBlcikpOwogICAgICAgICB3
b3JsZC0+bV93cmFwcGVycy5yZW1vdmUoZG9tT2JqZWN0KTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaAkocmV2aXNpb24gMTEyNTc4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDYgQEAgaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcgogewogICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBBU1NFUlQoIW5vZGUtPndyYXBwZXIoKSk7CiAgICAgbm9kZS0+c2V0V3JhcHBl
cigqd29ybGQtPmdsb2JhbERhdGEoKSwgd3JhcHBlciwgd3JhcHBlck93bmVyKHdvcmxkLCBub2Rl
KSwgd3JhcHBlckNvbnRleHQod29ybGQsIG5vZGUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTUxLDggKzUwLDcgQEAgaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTQog
ewogICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBBU1NFUlRfVU5VU0VEKHdyYXBwZXIsIG5vZGUtPndyYXBwZXIoKSA9PSB3cmFwcGVyKTsKLSAg
ICBub2RlLT5jbGVhcldyYXBwZXIoKTsKKyAgICBub2RlLT5jbGVhcldyYXBwZXIod3JhcHBlcik7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMTEyNTc4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBzaG9ydCBKU05vZGVGaWx0ZXJDb25kaXRp
b246OmFjY2VwdE5vZGUoCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKIAotICAgIGlmICghbV9maWx0ZXIuaXNPYmplY3QoKSkKKyAgICBpZiAoIW1fZmlsdGVyIHx8
ICFtX2ZpbHRlci0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRF
Ul9BQ0NFUFQ7CiAKICAgIC8vIFRoZSBleGVjIGFyZ3VtZW50IGhlcmUgc2hvdWxkIG9ubHkgYmUg
bnVsbCBpZiB0aGlzIHdhcyBjYWxsZWQgZnJvbSBhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDExICs0NSwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFdyYXBwZXIoSlNDOjpKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTRE9NV3JhcHBlciogd3JhcHBlciwgSlNDOjpXZWFrSGFu
ZGxlT3duZXIqIHdyYXBwZXJPd25lciwgdm9pZCogY29udGV4dCkKICAgICB7CisgICAgICAgIEFT
U0VSVCghbV93cmFwcGVyKTsKICAgICAgICAgbV93cmFwcGVyID0gSlNDOjpQYXNzV2VhazxKU0RP
TVdyYXBwZXI+KGdsb2JhbERhdGEsIHdyYXBwZXIsIHdyYXBwZXJPd25lciwgY29udGV4dCk7CiAg
ICAgfQogCi0gICAgdm9pZCBjbGVhcldyYXBwZXIoKQorICAgIHZvaWQgY2xlYXJXcmFwcGVyKEpT
RE9NV3JhcHBlciogd3JhcHBlcikKICAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQod3JhcHBl
ciwgbV93cmFwcGVyLndhcyh3cmFwcGVyKSk7CiAgICAgICAgIG1fd3JhcHBlci5jbGVhcigpOwog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTg3KQorKysgU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDMtMjkg
IEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBGaXJzdCBzdGVw
IHRvd2FyZCBpbmNyZW1lbnRhbCBXZWFrPFQ+IGZpbmFsaXphdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI2NzAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGVkIGZvciBBUEkgY2hhbmdlLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6ZmluYWxpemUpOgor
CiAyMDEyLTAzLTI5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTEyNTUzLgpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNyArMjkyLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RN
YXA6OmZpbmFsaXplKEpTQzo6SAogewogICAgIEhhc2hNYXA8TlBPYmplY3QqLCBKU0M6OldlYWs8
SlNOUE9iamVjdD4gPjo6aXRlcmF0b3IgZm91bmQgPSBtX2pzTlBPYmplY3RzLmZpbmQoc3RhdGlj
X2Nhc3Q8TlBPYmplY3QqPihjb250ZXh0KSk7CiAgICAgQVNTRVJUKGZvdW5kICE9IG1fanNOUE9i
amVjdHMuZW5kKCkpOwotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBhc09iamVjdChoYW5kbGUu
Z2V0KCkpID09IGZvdW5kLT5zZWNvbmQpOworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBhc09i
amVjdChoYW5kbGUuZ2V0KCkpID09IGZvdW5kLT5zZWNvbmQuZ2V0KCkpOwogICAgIEpTTlBPYmpl
Y3QqIG9iamVjdCA9IGZvdW5kLT5zZWNvbmQuZ2V0KCk7CiAgICAgbV9qc05QT2JqZWN0cy5yZW1v
dmUoZm91bmQpOwogICAgIGFkZFRvSW52YWxpZGF0aW9uUXVldWUob2JqZWN0LT5sZWFrTlBPYmpl
Y3QoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134838</attachid>
            <date>2012-03-30 10:55:11 -0700</date>
            <delta_ts>2012-03-30 11:38:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82670-20120330105512.patch</filename>
            <type>text/plain</type>
            <size>95103</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MiBA
QAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyBhIFdlYWs8VD4gaGVhcCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBpbmNyZW1l
bnRhbAorICAgICAgICBmaW5hbGl6YXRpb24sIHdoaWxlIG1ha2luZyBhcyBmZXcgYmVoYXZpb3Ig
Y2hhbmdlcyBhcyBwb3NzaWJsZS4gVGhlIGJlaGF2aW9yCisgICAgICAgIGNoYW5nZXMgaXQgbWFr
ZXMgYXJlOgorCisgICAgICAgICgqKSBXZWFrPFQ+J3MgcmF3IEpTVmFsdWUgbm8gbG9uZ2VyIHJl
dmVydHMgdG8gSlNWYWx1ZSgpIGF1dG9tYXRpY2FsbHkgLS0KKyAgICAgICAgaW5zdGVhZCwgYSBz
ZXBhcmF0ZSBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBKU1ZhbHVlIGlzIG5vIGxvbmdlciB2YWxp
ZC4KKyAgICAgICAgKFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgSlNWYWx1ZSBjYW4gYmUg
cHJlc2VydmVkIGZvciBsYXRlciBmaW5hbGl6YXRpb24uKQorICAgICAgICBPYmplY3RzIGRlYWxp
bmcgd2l0aCBXZWFrSW1wbHMgZGlyZWN0bHkgbXVzdCBjaGFuZ2UgdG8gY2hlY2sgdGhlIGZsYWcu
CisKKyAgICAgICAgKCopIFdlYWs8VD4gaXMgbm8gbG9uZ2VyIGEgc3ViY2xhc3Mgb2YgSGFuZGxl
PFQ+LgorCisgICAgICAgICgqKSBET00gR0MgcGVyZm9ybWFuY2UgaXMgZGlmZmVyZW50IC0tIDkl
IGZhc3RlciBpbiB0aGUgZ2VvbWV0cmljIG1lYW4sCisgICAgICAgIGJ1dCAxNSUgc2xvd2VyIGlu
IG9uZSBzcGVjaWZpYyBjYXNlOgorICAgICAgICAgICAgICAgIGdjLWRvbTEuaHRtbDogNiUgIGZh
c3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTIuaHRtbDogMjMlIGZhc3RlcgorICAgICAgICAg
ICAgICAgIGdjLWRvbTMuaHRtbDogMTclIGZhc3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTQu
aHRtbDogMTUlICpzbG93ZXIqCisKKyAgICAgICAgVGhlIGtleSBmZWF0dXJlcyBvZiB0aGlzIG5l
dyBoZWFwIGFyZToKKworICAgICAgICAoKikgRWFjaCBibG9jayBrbm93cyBpdHMgb3duIHN0YXRl
LCBpbmRlcGVuZGVudCBvZiBhbnkgb3RoZXIgYmxvY2tzLgorCisgICAgICAgICgqKSBFYWNoIGJs
b2NrIGNhY2hlcyBpdHMgb3duIHN3ZWVwIHJlc3VsdC4KKworICAgICAgICAoKikgVGhlIGhlYXAg
dmlzaXRzIGRlYWQgV2VhazxUPnMgYXQgdGhlIGVuZCBvZiBHQy4gKEl0IGRvZXNuJ3QKKyAgICAg
ICAgbWFyayB0aGVtIHlldCwgc2luY2UgdGhhdCB3b3VsZCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4p
CisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tPYmplY3REYXRhOjpmaW5hbGl6ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Ojppbml0KTogVXBkYXRlZCB0byB1c2Ug
dGhlIG5ldyBXZWFrSGVhcCBBUEkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6IFBhaWQgdGhlIGJ1aWxkIHN5c3RlbSB0
YXggc2luY2UgSSBhZGRlZCBzb21lIG5ldyBmaWxlcy4KKworICAgICAgICAqIGhlYXAvSGFuZGxl
Lmg6IE1hZGUgV2Vha0Jsb2NrIGEgZnJpZW5kIGFuZCBleHBvc2VkIHNsb3QoKSBhcyBwdWJsaWMs
CisgICAgICAgIHNvIHdlIGNhbiBrZWVwIHBhc3NpbmcgYSBIYW5kbGU8VD4gdG8gZmluYWxpemVy
cywgdG8gYXZvaWQgbW9yZSBzdXJmYWNlCisgICAgICAgIGFyZWEgY2hhbmdlIGluIHRoaXMgcGF0
Y2guIEEgZm9sbG93LXVwIHBhdGNoIHNob3VsZCBjaGFuZ2UgdGhlIHR5cGUgd2UKKyAgICAgICAg
cGFzcyB0byBmaW5hbGl6ZXJzLgorCisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmNwcDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OndyaXRlQmFycmllcik6Cisg
ICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUpOgorICAgICAgICAqIGhlYXAvSGFu
ZGxlSGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZUhlYXApOgorICAgICAg
ICAoTm9kZSk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUpOiBSZW1vdmVk
IGFsbCBjb2RlIHJlbGF0ZWQgdG8gV2VhazxUPiwgc2luY2UKKyAgICAgICAgd2UgaGF2ZSBhIHNl
cGFyYXRlIFdlYWtIZWFwIG5vdy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OkhlYXApOiBSZW1vdmVkIG1fZXh0cmFDb3N0IGJlY2F1c2UgZXh0cmEgY29z
dCBpcyBhY2NvdW50ZWQKKyAgICAgICAgZm9yIHRocm91Z2ggb3VyIHdhdGVybWFyayBub3cuIFJl
bW92ZWQgbV93YXRlck1hcmsgYmVjYXVzZSBpdCB3YXMgdW51c2VkLgorCisgICAgICAgIChKU0M6
OkhlYXA6OmRlc3Ryb3kpOiBVcGRhdGVkIGZvciBhZGRpdGlvbiBvZiBXZWFrSGVhcC4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZSk6IENoYW5nZWQg
ZnJvbSB1c2luZyBpdHMgb3duCisgICAgICAgIHZhcmlhYmxlIHRvIHBhcnRpY2lwYXRpbmcgaW4g
dGhlIHdhdGVybWFyayBzdHJhdGVneS4gSSB3YW50ZWQgdG8gc3RhbmRhcmRpemUKKyAgICAgICAg
V2Vha0hlYXAgYW5kIGFsbCBvdGhlciBIZWFwIGNsaWVudHMgb24gdGhpcyBzdHJhdGVneSwgdG8g
bWFrZSBzdXJlIGl0J3MKKyAgICAgICAgYWNjdXJhdGUuCisgCisgICAgICAgIChKU0M6OkhlYXA6
Om1hcmtSb290cyk6IFVwZGF0ZWQgZm9yIGFkZGl0aW9uIG9mIFdlYWtIZWFwLiBBZGRlZCBXZWFr
SGVhcAorICAgICAgICBkZWFkIHZpc2l0IHBhc3MsIGFzIGV4cGxhaW5lZCBhYm92ZS4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVzZXRBbGxv
Y2F0b3JzKTogVXBkYXRlZCBmb3IgYWRkaXRpb24gb2YgV2Vha0hlYXAuCisKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6RmluYWxpemVyT3du
ZXI6OmZpbmFsaXplKTogVXBkYXRlZCBmb3IgbmV3IFdlYWs8VD4gQVBJLgorCisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndlYWtIZWFwKToKKyAgICAgICAgKEhl
YXApOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1dhdGVyTWFyayk6IEFkZGVkIGEgd2F5IHRv
IHBhcnRpY2lwYXRlIGluIHRoZSB3YXRlcm1hcmtpbmcKKyAgICAgICAgc3RyYXRlZ3ksIHNpbmNl
IHRoaXMgaXMgdGhlIGJlc3Qgd2F5IGZvciBXZWFrSGVhcCB0byByZXBvcnQgaXRzIG1lbW9yeQor
ICAgICAgICBjb3N0LiAoSSBwbGFuIHRvIHVwZGF0ZSB0aGlzIGluIGEgZm9sbG93LXVwIHBhdGNo
IHRvIG1ha2UgaXQgbW9yZSBhY2N1cmF0ZSwKKyAgICAgICAgYnV0IGZvciBub3cgaXQgaXMgbm90
IGxlc3MgYWNjdXJhdGUgdGhhbiBpdCB1c2VkIHRvIGJlLikKKworICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjphZGRUb1dhdGVyTWFyayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpkaWRDb25zdW1lRnJlZUxpc3QpOiBSZW1vdmVkIG1fbnVyc2VyeVdhdGVyTWFyayBiZWNhdXNl
CisgICAgICAgIGl0IHdhcyB1bnVzZWQsIGFuZCBJIGRpZG4ndCB3YW50IHRvIHVwZGF0ZSBXZWFr
SGVhcCB0byBrZWVwIGFuIHVzdXNlZAorICAgICAgICB2YXJpYWJsZSB3b3JraW5nLiBBZGRlZCBB
UEkgZm9yIGFib3ZlLgorCisgICAgICAgICogaGVhcC9QYXNzV2Vhay5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKFdlYWtJbXBsQWNjZXNzb3IpOgorICAgICAgICAoUGFzc1dlYWspOgorICAg
ICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6OjpnZXQpOgorICAgICAgICAo
SlNDOjo6Ondhcyk6CisgICAgICAgIChKU0M6Ojo6UGFzc1dlYWspOgorICAgICAgICAoSlNDOjo6
On5QYXNzV2Vhayk6CisgICAgICAgIChKU0M6OlVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAg
ICAoSlNDOjo6OmxlYWtJbXBsKToKKyAgICAgICAgKEpTQzo6YWRvcHRXZWFrKToKKyAgICAgICAg
KiBoZWFwL1N0cm9uZy5oOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yISk6CisgICAg
ICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKToKKyAgICAgICAgKEpTQzo6U3Ryb25nOjpnZXQpOgorICAgICAgICAqIGhlYXAv
V2Vhay5oOgorICAgICAgICAoV2Vhayk6CisgICAgICAgIChKU0M6Ojo6V2Vhayk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjo6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6Ojp+V2Vhayk6CisgICAgICAgIChKU0M6Ojo6c3dhcCk6CisgICAgICAgIChKU0M6
Oj0pOgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6VW5zcGVjaWZp
ZWRCb29sVHlwZSk6CisgICAgICAgIChKU0M6Ojo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6Ojo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjo6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IExvdHMgb2Yg
Y29kZSBjaGFuZ2VzIGhlcmUsIGJ1dCB0aGV5IGJvaWwKKyAgICAgICAgZG93biB0byB0d28gdGhp
bmdzOgorCisgICAgICAgICgqKSBBbGxvY2F0ZSBXZWFrSW1wbHMgZnJvbSB0aGUgV2Vha0hlYXAg
aW5zdGVhZCBvZiBIYW5kbGVzIGZyb20gdGhlIEhhbmRsZUhlYXAuCisKKyAgICAgICAgKCopIEV4
cGxpY2l0bHkgY2hlY2sgV2Vha0ltcGw6OnN0YXRlKCkgZm9yIG5vbi1saXZlbmVzcyBiZWZvcmUg
cmV0dXJuaW5nCisgICAgICAgIGEgdmFsdWUgKGV4cGxhaW5lZCBhYm92ZSkuCisKKyAgICAgICAg
VGhlc2UgZmlsZXMgaW1wbGVtZW50IHRoZSBuZXcgV2VhazxUPiBoZWFwIGJlaGF2aW9yIGRlc2Ny
aWJlZCBhYm92ZToKKworICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDogQWRkZWQuCisgICAg
ICAgICogaGVhcC9XZWFrQmxvY2suaDogQWRkZWQuCisgICAgICAgICogaGVhcC9XZWFrSGFuZGxl
T3duZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIYW5kbGVPd25lci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIZWFwLmNwcDogQWRkZWQuCisgICAgICAgICogaGVhcC9X
ZWFrSGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtJbXBsLmg6IEFkZGVkLgorCisg
ICAgICAgIE9uZSBpbnRlcmVzdGluZyBkaWZmZXJlbmNlIGZyb20gdGhlIG9sZCBoZWFwIGlzIHRo
YXQgd2UgZG9uJ3QgYWxsb3cKKyAgICAgICAgY2xpZW50cyB0byBvdmVyd3JpdGUgYSBXZWFrSW1w
bCBhZnRlciBhbGxvY2F0aW5nIGl0LCBhbmQgd2UgZG9uJ3QgcmVjeWNsZQorICAgICAgICBXZWFr
SW1wbHMgcHJpb3IgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBs
YXp5IGZpbmFsaXphdGlvbiwKKyAgICAgICAgYnV0IGl0IHdpbGwgYWxzbyBoZWxwIHVzIGVzYWJs
aXNoIGEgdXNlZnVsIGludmFyaWFudCBpbiB0aGUgZnV0dXJlOiBhbGxvY2F0aW5nCisgICAgICAg
IGEgV2Vha0ltcGwgd2lsbCBiZSBhIGJpbmRpbmcgY29udHJhY3QgdG8gcnVuIGEgZmluYWxpemVy
IGF0IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgIGZ1dHVyZSwgZXZlbiBpZiB0aGUgV2Vha0lt
cGwgaXMgbGF0ZXIgZGVhbGxvY2F0ZWQuCisKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOiBDaGVjayB0aGUgV2Vh
azxUPiBmb3IgISBpbnN0ZWFkIG9mCisgICAgICAgIGl0cyBKU1ZhbHVlLCBzaW5jZSB0aGF0J3Mg
b3VyIEFQSSBjb250cmFjdCBub3csIGFuZCB0aGUgSlNWYWx1ZSBtaWdodAorICAgICAgICBiZSBz
dGFsZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OmpzQ2Fz
dCk6IEFsbG93IGNhc3RpbmcgTlVMTCBwb2ludGVycyBiZWNhdXNlIGl0J3MgdXNlZnVsIGFuZCBo
YXJtbGVzcy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOiBJIGNhbid0IHJlbWVtYmVyIHdoeSBJ
IGRpZCB0aGlzLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOiBJIGhhZCB0byB1cGRhdGUgdGhlc2Ug
Y2xhc3NlcyBiZWNhdXNlIHRoZXkgYWxsb2NhdGUKKyAgICAgICAgYW5kIGRlYWxsb2NhdGUgd2Vh
ayBwb2ludGVycyBtYW51YWxseS4gVGhleSBzaG91bGQgcHJvYmFibHkgc3RvcCBkb2luZyB0aGF0
LgorCiAyMDEyLTAzLTI5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeCBwMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDE5IEBAIFNF
VChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwCisgICAgaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCi0gICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSGVhcC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAg
ICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcAogICAg
IGhlYXAvTWFya2VkU3BhY2UuY3BwCi0gICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAg
ICBoZWFwL01hcmtTdGFjay5jcHAKKyAgICBoZWFwL1dlYWtIZWFwLmNwcAorICAgIGhlYXAvV2Vh
a0hhbmRsZU93bmVyLmNwcAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogCiAgICAgZGVidWdnZXIv
RGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAsNiArMjUwLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFwLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDYgKzIxNyw5IEBACiAgICAgICAgICAgICAnYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAnLAogICAgICAgICAgICAgJ2J5dGVjb21waWxlci9SZWdpc3RlcklELmgnLAogICAgICAgICAg
ICAgJ2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwJywKKyAgICAgICAgICAgICdoZWFwL1dlYWtI
ZWFwLmNwcCcsCisgICAgICAgICAgICAnaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwJywKKyAgICAg
ICAgICAgICdoZWFwL1dlYWtCbG9jay5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlSGVh
cC5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlU3RhY2suY3BwJywKICAgICAgICAgICAg
ICdoZWFwL0hlYXAuY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0NvcGllZFNwYWNl
LmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAogICAgIGhlYXAvREZHQ29k
ZUJsb2Nrcy5jcHAgXAorICAgIGhlYXAvV2Vha0hlYXAuY3BwIFwKKyAgICBoZWFwL1dlYWtIYW5k
bGVPd25lci5jcHAgXAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVI
ZWFwLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw3IEBAIHZvaWQgSlND
YWxsYmFja09iamVjdERhdGE6OmZpbmFsaXplKEhhbmQKICAgICBmb3IgKDsganNDbGFzczsganND
bGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKQogICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6
ZUNhbGxiYWNrIGZpbmFsaXplID0ganNDbGFzcy0+ZmluYWxpemUpCiAgICAgICAgICAgICBmaW5h
bGl6ZSh0aGlzUmVmKTsKLSAgICBIYW5kbGVTbG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwotICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgV2Vha0hl
YXA6OmRlYWxsb2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQog
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTEyNTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNCArMTAyLDExIEBAIHZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojppbml0KEV4ZWMKICAgICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwg
dG9SZWYodGhpcykpOwogICAgIH0KIAotICAgIGJvb2wgbmVlZHNGaW5hbGl6ZXIgPSBmYWxzZTsK
LSAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHIg
JiYgIW5lZWRzRmluYWxpemVyOyBqc0NsYXNzUHRyID0ganNDbGFzc1B0ci0+cGFyZW50Q2xhc3Mp
Ci0gICAgICAgIG5lZWRzRmluYWxpemVyID0ganNDbGFzc1B0ci0+ZmluYWxpemU7Ci0gICAgaWYg
KG5lZWRzRmluYWxpemVyKSB7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGV4ZWMtPmdsb2Jh
bERhdGEoKS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0
KCksIGNsYXNzUmVmKCkpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0
ZUJhcnJpZXIoc2xvdCwgdGhpcyk7Ci0gICAgICAgICpzbG90ID0gdGhpczsKKyAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHI7IGpzQ2xhc3NQdHIg
PSBqc0NsYXNzUHRyLT5wYXJlbnRDbGFzcykgeworICAgICAgICBpZiAoanNDbGFzc1B0ci0+Zmlu
YWxpemUpIHsKKyAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLndlYWtIZWFwKCkt
PmFsbG9jYXRlKHRoaXMsIG1fY2FsbGJhY2tPYmplY3REYXRhLmdldCgpLCBjbGFzc1JlZigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagko
cmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMzAsNiArMjEzMCwzNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtCbG9jay5jcHAiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0Jsb2NrLmgi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhl
YXBcV2Vha0hlYXAuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtIZWFwLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0ltcGwuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrSGFuZGxl
T3duZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxoZWFwXFdlYWtIYW5kbGVPd25lci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEhhbmRsZVN0YWNrLmNwcCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxMiw3ICszMTIsMTQgQEAKIAkJ
MTRDNTI0MkIwRjUzNTVFOTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEE2NTgxQTBGNEUzNkY0MDAwMTUwRkQgLyog
SklUU3R1YnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMkYzRDgxMzlGNEJFMjAw
NDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCAqLzsgfTsKIAkJMTREMkYzREIxMzlGNEJFMjAwNDkx
MDMxIC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEU4NEY5RTE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxv
Y2suY3BwICovOyB9OworCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEU4NEY5QTE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRFODRGQTAxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtI
ZWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
RTg0RjlCMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5jcHAgKi87IH07CisJCTE0RTg0RkEx
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFODRGOUMxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRF
ODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEU4NEY5RDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vh
a0ltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNEU5RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NTZGQzYw
RTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAqLzsgfTsKKwkJ
MTRGNzI1NjUxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEY3MjU2MzE0RUUyNjVFMDBC
MTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmNwcCAqLzsgfTsKKwkJMTRGNzI1NjYxNEVFMjY1RTAw
QjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTRGNzI1NjQxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVP
d25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Rjk3NDQ2MTM4Qzg1M0UwMERB
MUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZl
cnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQy
MTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9OwogCQk0NTE1
MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDUxNTM5QjgxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTI1LDcg
KzkzMiwxNCBAQAogCQkxNERBODE4RTBEOTlGRDIwMDBCMEE0RkIgLyogSlNBY3RpdmF0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQWN0aXZhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNBY3Rp
dmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQWN0aXZh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REUwRDY4MEQwMjQzMTQw
MEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0dsb2JhbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrQmxvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYWtIZWFwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUMxNEVFMUFDQzAwRDZENUQ0IC8qIFdl
YWtIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtIZWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RTg0RjlEMTRFRTFBQ0MwMEQ2RDVENCAvKiBX
ZWFrSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEYyNTI1NjBEMDhERDhEMDA0RUNGRkYgLyog
SlNWYXJpYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Zh
cmlhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RjcyNTYzMTRF
RTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2Vha0hhbmRsZU93bmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMTRGNzI1NjQxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrSGFuZGxlT3duZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8qIEhl
YXBSb290VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwUm9v
dFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5MDUxNDIwQkE5RThB
NzAwODFFOUQwIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBw
YXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5
MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2OCw2ICsxNTgyLDEzIEBACiAJCQkJMEZDODE1MTIx
NDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLywKIAkJCQkwRkM4MTUxNDE0
MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLywKIAkJCQkxNDJFMzEzMzEzNEZG
MEE2MDBBRkFEQjUgLyogV2Vhay5oICovLAorCQkJCTE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAv
KiBXZWFrQmxvY2suY3BwICovLAorCQkJCTE0RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFr
QmxvY2suaCAqLywKKwkJCQkxNEY3MjU2MzE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93
bmVyLmNwcCAqLywKKwkJCQkxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93
bmVyLmggKi8sCisJCQkJMTRFODRGOUIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCAq
LywKKwkJCQkxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuaCAqLywKKwkJCQkx
NEU4NEY5RDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCAqLywKIAkJCQkwRjI0MkRBNTEz
RjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovLAogCQkJCTBGQzgx
NTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLywKIAkJCQkw
RkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovLApAQCAt
MjUwNSw2ICsyNTI2LDEwIEBACiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0
RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDk3MjA5MTE0RUI4MzE1MDBGRUIxQjcgLyogUGFzc1dlYWsuaCBp
biBIZWFkZXJzICovLAorCQkJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2su
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0RTg0RkExMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVh
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJ
bXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIgLyogV2Vh
a0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI1NDY3NzE0RjU5QjVDMDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0
NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRp
b25FZmZvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzA2MCw2ICszMDg1LDkgQEAKIAkJCQk4NkI1
ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDMkI5MTZDNTE0REEwNDBDMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0RTg0RjlFMTRFRTFBQ0MwMEQ2RDVE
NCAvKiBXZWFrQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRFODRGQTAxNEVFMUFDQzAw
RDZENUQ0IC8qIFdlYWtIZWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0RjcyNTY1MTRFRTI2
NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
RkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTU5MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyogREZHUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAkocmV2aXNpb24g
MTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDYgKzU5LDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNWYWx1ZSAoSGFu
ZGxlQmFzZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gKG1fc2xvdCAmJiAqbV9zbG90KSA/IHJlaW50ZXJw
cmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsgfQogCisgICAgSGFuZGxlU2xv
dCBzbG90KCkgY29uc3QgeyByZXR1cm4gbV9zbG90OyB9CisKIHByb3RlY3RlZDoKICAgICBIYW5k
bGVCYXNlKEhhbmRsZVNsb3Qgc2xvdCkKICAgICAgICAgOiBtX3Nsb3Qoc2xvdCkKQEAgLTY3LDcg
KzY5LDYgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHZvaWQgc3dhcChIYW5kbGVCYXNlJiBvdGhl
cikgeyBzdGQ6OnN3YXAobV9zbG90LCBvdGhlci5tX3Nsb3QpOyB9CiAKLSAgICBIYW5kbGVTbG90
IHNsb3QoKSBjb25zdCB7IHJldHVybiBtX3Nsb3Q7IH0KICAgICB2b2lkIHNldFNsb3QoSGFuZGxl
U2xvdCBzbG90KQogICAgIHsKICAgICAgICAgbV9zbG90ID0gc2xvdDsKQEAgLTEzMyw2ICsxMzQs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVI
ZWFwOworICAgIGZyaWVuZCBjbGFzcyBXZWFrQmxvY2s7CiAKICAgICBzdGF0aWMgSGFuZGxlPFQ+
IHdyYXBTbG90KEhhbmRsZVNsb3Qgc2xvdCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE5
ICszMSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1XZWFrSGFuZGxlT3duZXI6On5XZWFrSGFu
ZGxlT3duZXIoKQotewotfQotCi1ib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiwgU2xvdFZpc2l0b3ImKQotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWFrSGFuZGxlT3duZXI6OmZpbmFsaXplKEhhbmRs
ZTxVbmtub3duPiwgdm9pZCopCi17Ci19Ci0KIEhhbmRsZUhlYXA6OkhhbmRsZUhlYXAoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAg
LCBtX25leHRUb0ZpbmFsaXplKDApCkBAIC03Myw2MiArNjAsNiBAQCB2b2lkIEhhbmRsZUhlYXA6
OnZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwCiAgICAgfQogfQogCi12b2lkIEhhbmRsZUhlYXA6OnZp
c2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17Ci0gICAg
U2xvdFZpc2l0b3ImIHZpc2l0b3IgPSBoZWFwUm9vdFZpc2l0b3IudmlzaXRvcigpOwotCi0gICAg
Tm9kZSogZW5kID0gbV93ZWFrTGlzdC5lbmQoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX3dl
YWtMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0gbm9kZS0+bmV4dCgpKSB7Ci0jaWYg
RU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgICAgIGlmICghaXNWYWxpZFdlYWtOb2RlKG5vZGUp
KQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgICAgICBKU0NlbGwqIGNlbGwgPSBu
b2RlLT5zbG90KCktPmFzQ2VsbCgpOwotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBXZWFrSGFuZGxlT3duZXIqIHdlYWtP
d25lciA9IG5vZGUtPndlYWtPd25lcigpOwotICAgICAgICBpZiAoIXdlYWtPd25lcikKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghd2Vha093bmVyLT5pc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KG5vZGUtPnNsb3QoKSksIG5v
ZGUtPndlYWtPd25lckNvbnRleHQoKSwgdmlzaXRvcikpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQobm9kZS0+c2xvdCgpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSGFuZGxlSGVhcDo6ZmluYWxpemVXZWFrSGFuZGxlcygpCi17Ci0gICAgTm9kZSog
ZW5kID0gbV93ZWFrTGlzdC5lbmQoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX3dlYWtMaXN0
LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0gbV9uZXh0VG9GaW5hbGl6ZSkgewotICAgICAg
ICBtX25leHRUb0ZpbmFsaXplID0gbm9kZS0+bmV4dCgpOwotI2lmIEVOQUJMRShHQ19WQUxJREFU
SU9OKQotICAgICAgICBpZiAoIWlzVmFsaWRXZWFrTm9kZShub2RlKSkKLSAgICAgICAgICAgIENS
QVNIKCk7Ci0jZW5kaWYKLQotICAgICAgICBKU0NlbGwqIGNlbGwgPSBub2RlLT5zbG90KCktPmFz
Q2VsbCgpOwotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpZiAoV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIgPSBub2Rl
LT53ZWFrT3duZXIoKSkgewotICAgICAgICAgICAgd2Vha093bmVyLT5maW5hbGl6ZShIYW5kbGU8
VW5rbm93bj46OndyYXBTbG90KG5vZGUtPnNsb3QoKSksIG5vZGUtPndlYWtPd25lckNvbnRleHQo
KSk7Ci0gICAgICAgICAgICBpZiAobV9uZXh0VG9GaW5hbGl6ZSAhPSBub2RlLT5uZXh0KCkpIC8v
IE93bmVyIGRlYWxsb2NhdGVkIG5vZGUuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFpc0xpdmVOb2Rl
KG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgICAgICAqbm9kZS0+c2xv
dCgpID0gSlNWYWx1ZSgpOwotICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92
ZShub2RlKTsKLSAgICAgICAgbV9pbW1lZGlhdGVMaXN0LnB1c2gobm9kZSk7Ci0gICAgfQotICAg
IAotICAgIG1fbmV4dFRvRmluYWxpemUgPSAwOwotfQotCiB2b2lkIEhhbmRsZUhlYXA6OndyaXRl
QmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFsdWUmIHZhbHVlKQogewogICAgIC8v
IEZvcmJpZCBhc3NpZ25tZW50IHRvIGhhbmRsZXMgZHVyaW5nIHRoZSBmaW5hbGl6YXRpb24gcGhh
c2UsIHNpbmNlIGl0IHdvdWxkIHZpb2xhdGUgbWFueSBHQyBpbnZhcmlhbnRzLgpAQCAtMTUwLDE1
ICs4MSw2IEBAIHZvaWQgSGFuZGxlSGVhcDo6d3JpdGVCYXJyaWVyKEhhbmRsZVNsb3QKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChub2RlLT5pc1dlYWsoKSkgewotICAgICAgICBt
X3dlYWtMaXN0LnB1c2gobm9kZSk7Ci0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgICAg
IGlmICghaXNMaXZlTm9kZShub2RlKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0jZW5kaWYKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIG1fc3Ryb25nTGlzdC5wdXNoKG5vZGUpOwogI2lm
IEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIGlmICghaXNMaXZlTm9kZShub2RlKSkKQEAgLTE4
OCwyNCArMTEwLDYgQEAgYm9vbCBIYW5kbGVIZWFwOjppc0xpdmVOb2RlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIAogICAgIHJldHVybiB0cnVlOwogfQotCi1ib29sIEhhbmRsZUhlYXA6OmlzVmFsaWRX
ZWFrTm9kZShOb2RlKiBub2RlKQotewotICAgIGlmICghaXNMaXZlTm9kZShub2RlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbm9kZS0+aXNXZWFrKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSAqbm9kZS0+c2xvdCgpOwotICAgIGlmICgh
dmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBK
U0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICBpZiAoIWNlbGwgfHwgIWNlbGwtPnN0
cnVjdHVyZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
ICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hhbmRsZUhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IYW5kbGVIZWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDYgQEAg
Y2xhc3MgSlNHbG9iYWxEYXRhOwogY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwog
Ci1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFrSGFuZGxlT3duZXIgewotcHVibGljOgotICAg
IHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOwotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNp
dG9yJik7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCog
Y29udGV4dCk7Ci19OwotCiBjbGFzcyBIYW5kbGVIZWFwIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
SGFuZGxlSGVhcCogaGVhcEZvcihIYW5kbGVTbG90KTsKQEAgLTU4LDIwICs1MSwxMCBAQCBwdWJs
aWM6CiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5k
bGVTbG90KTsKIAotICAgIHZvaWQgbWFrZVdlYWsoSGFuZGxlU2xvdCwgV2Vha0hhbmRsZU93bmVy
KiA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKTsKLSAgICBIYW5kbGVTbG90IGNvcHlXZWFrKEhhbmRs
ZVNsb3QpOwotCiAgICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQg
ZmluYWxpemVXZWFrSGFuZGxlcygpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0
ZUJhcnJpZXIoSGFuZGxlU2xvdCwgY29uc3QgSlNWYWx1ZSYpOwogCi0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIGJvb2wgaGFzV2Vha093bmVyKEhhbmRsZVNsb3QsIFdlYWtIYW5kbGVPd25lciop
OwotICAgIGJvb2wgaGFzRmluYWxpemVyKEhhbmRsZVNsb3QpOwotI2VuZGlmCi0KICAgICB1bnNp
Z25lZCBwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoU3Ryb25nSGFuZGxlKEZ1bmN0b3ImLCBjb25zdCBIYXNo
Q291bnRlZFNldDxKU0NlbGwqPiYgc2tpcFNldCk7CkBAIC04NSwxMiArNjgsNiBAQCBwcml2YXRl
OgogICAgICAgICBIYW5kbGVTbG90IHNsb3QoKTsKICAgICAgICAgSGFuZGxlSGVhcCogaGFuZGxl
SGVhcCgpOwogCi0gICAgICAgIHZvaWQgbWFrZVdlYWsoV2Vha0hhbmRsZU93bmVyKiwgdm9pZCog
Y29udGV4dCk7Ci0gICAgICAgIGJvb2wgaXNXZWFrKCk7Ci0gICAgICAgIAotICAgICAgICBXZWFr
SGFuZGxlT3duZXIqIHdlYWtPd25lcigpOwotICAgICAgICB2b2lkKiB3ZWFrT3duZXJDb250ZXh0
KCk7Ci0KICAgICAgICAgdm9pZCBzZXRQcmV2KE5vZGUqKTsKICAgICAgICAgTm9kZSogcHJldigp
OwogCkBAIC05OCwxMiArNzUsOCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBuZXh0KCk7CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBXZWFrSGFuZGxlT3duZXIqIGVtcHR5V2Vha093bmVyKCk7
Ci0KICAgICAgICAgSlNWYWx1ZSBtX3ZhbHVlOwogICAgICAgICBIYW5kbGVIZWFwKiBtX2hhbmRs
ZUhlYXA7Ci0gICAgICAgIFdlYWtIYW5kbGVPd25lciogbV93ZWFrT3duZXI7Ci0gICAgICAgIHZv
aWQqIG1fd2Vha093bmVyQ29udGV4dDsKICAgICAgICAgTm9kZSogbV9wcmV2OwogICAgICAgICBO
b2RlKiBtX25leHQ7CiAgICAgfTsKQEAgLTExNCw3ICs4Nyw2IEBAIHByaXZhdGU6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBncm93KCk7CiAgICAgCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJ
T04pIHx8ICFBU1NFUlRfRElTQUJMRUQKLSAgICBib29sIGlzVmFsaWRXZWFrTm9kZShOb2RlKik7
CiAgICAgYm9vbCBpc0xpdmVOb2RlKE5vZGUqKTsKICNlbmRpZgogCkBAIC0xMjIsNyArOTQsNiBA
QCBwcml2YXRlOgogICAgIEJsb2NrU3RhY2s8Tm9kZT4gbV9ibG9ja1N0YWNrOwogCiAgICAgU2Vu
dGluZWxMaW5rZWRMaXN0PE5vZGU+IG1fc3Ryb25nTGlzdDsKLSAgICBTZW50aW5lbExpbmtlZExp
c3Q8Tm9kZT4gbV93ZWFrTGlzdDsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT4gbV9pbW1l
ZGlhdGVMaXN0OwogICAgIFNpbmdseUxpbmtlZExpc3Q8Tm9kZT4gbV9mcmVlTGlzdDsKICAgICBO
b2RlKiBtX25leHRUb0ZpbmFsaXplOwpAQCAtMTc1LDQ5ICsxNDYsOCBAQCBpbmxpbmUgdm9pZCBI
YW5kbGVIZWFwOjpkZWFsbG9jYXRlKEhhbmRsCiAgICAgbV9mcmVlTGlzdC5wdXNoKG5vZGUpOwog
fQogCi1pbmxpbmUgSGFuZGxlU2xvdCBIYW5kbGVIZWFwOjpjb3B5V2VhayhIYW5kbGVTbG90IG90
aGVyKQotewotICAgIE5vZGUqIG5vZGUgPSB0b05vZGUoYWxsb2NhdGUoKSk7Ci0gICAgbm9kZS0+
bWFrZVdlYWsodG9Ob2RlKG90aGVyKS0+d2Vha093bmVyKCksIHRvTm9kZShvdGhlciktPndlYWtP
d25lckNvbnRleHQoKSk7Ci0gICAgd3JpdGVCYXJyaWVyKG5vZGUtPnNsb3QoKSwgKm90aGVyKTsK
LSAgICAqbm9kZS0+c2xvdCgpID0gKm90aGVyOwotICAgIHJldHVybiB0b0hhbmRsZShub2RlKTsK
LX0KLQotaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6bWFrZVdlYWsoSGFuZGxlU2xvdCBoYW5kbGUs
IFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyLCB2b2lkKiBjb250ZXh0KQotewotICAgIC8vIEZv
cmJpZCBhc3NpZ25tZW50IHRvIGhhbmRsZXMgZHVyaW5nIHRoZSBmaW5hbGl6YXRpb24gcGhhc2Us
IHNpbmNlIGl0IHdvdWxkIHZpb2xhdGUgbWFueSBHQyBpbnZhcmlhbnRzLgotICAgIC8vIEZpbGUg
YSBidWcgd2l0aCBzdGFjayB0cmFjZSBpZiB5b3UgaGl0IHRoaXMuCi0gICAgaWYgKG1fbmV4dFRv
RmluYWxpemUpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgTm9kZSogbm9kZSA9IHRvTm9kZShoYW5k
bGUpOwotICAgIG5vZGUtPm1ha2VXZWFrKHdlYWtPd25lciwgY29udGV4dCk7Ci0KLSAgICBTZW50
aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92ZShub2RlKTsKLSAgICBpZiAoISpoYW5kbGUgfHwg
IWhhbmRsZS0+aXNDZWxsKCkpIHsKLSAgICAgICAgbV9pbW1lZGlhdGVMaXN0LnB1c2gobm9kZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3dlYWtMaXN0LnB1c2gobm9kZSk7Ci19
Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi1pbmxpbmUgYm9vbCBIYW5kbGVIZWFwOjpoYXNXZWFr
T3duZXIoSGFuZGxlU2xvdCBoYW5kbGUsIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyKQotewot
ICAgIHJldHVybiB0b05vZGUoaGFuZGxlKS0+d2Vha093bmVyKCkgPT0gd2Vha093bmVyOwotfQot
Ci1pbmxpbmUgYm9vbCBIYW5kbGVIZWFwOjpoYXNGaW5hbGl6ZXIoSGFuZGxlU2xvdCBoYW5kbGUp
Ci17Ci0gICAgcmV0dXJuIHRvTm9kZShoYW5kbGUpLT53ZWFrT3duZXIoKTsKLX0KLSNlbmRpZgot
CiBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKQog
ICAgIDogbV9oYW5kbGVIZWFwKGhhbmRsZUhlYXApCi0gICAgLCBtX3dlYWtPd25lcigwKQotICAg
ICwgbV93ZWFrT3duZXJDb250ZXh0KDApCiAgICAgLCBtX3ByZXYoMCkKICAgICAsIG1fbmV4dCgw
KQogewpAQCAtMjI1LDggKzE1NSw2IEBAIGlubGluZSBIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKEhh
bmRsZUhlYXAKIAogaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoV1RGOjpTZW50aW5lbFRh
ZykKICAgICA6IG1faGFuZGxlSGVhcCgwKQotICAgICwgbV93ZWFrT3duZXIoMCkKLSAgICAsIG1f
d2Vha093bmVyQ29udGV4dCgwKQogICAgICwgbV9wcmV2KDApCiAgICAgLCBtX25leHQoMCkKIHsK
QEAgLTI0MiwyOCArMTcwLDYgQEAgaW5saW5lIEhhbmRsZUhlYXAqIEhhbmRsZUhlYXA6Ok5vZGU6
OmhhbgogICAgIHJldHVybiBtX2hhbmRsZUhlYXA7CiB9CiAKLWlubGluZSB2b2lkIEhhbmRsZUhl
YXA6Ok5vZGU6Om1ha2VXZWFrKFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyLCB2b2lkKiBjb250
ZXh0KQotewotICAgIG1fd2Vha093bmVyID0gd2Vha093bmVyID8gd2Vha093bmVyIDogZW1wdHlX
ZWFrT3duZXIoKTsKLSAgICBtX3dlYWtPd25lckNvbnRleHQgPSBjb250ZXh0OwotfQotCi1pbmxp
bmUgYm9vbCBIYW5kbGVIZWFwOjpOb2RlOjppc1dlYWsoKQotewotICAgIHJldHVybiBtX3dlYWtP
d25lcjsgLy8gVHJ1ZSBmb3IgZW1wdHlXZWFrT3duZXIoKS4KLX0KLQotaW5saW5lIFdlYWtIYW5k
bGVPd25lciogSGFuZGxlSGVhcDo6Tm9kZTo6d2Vha093bmVyKCkKLXsKLSAgICByZXR1cm4gbV93
ZWFrT3duZXIgPT0gZW1wdHlXZWFrT3duZXIoKSA/IDAgOiBtX3dlYWtPd25lcjsgLy8gMCBmb3Ig
ZW1wdHlXZWFrT3duZXIoKS4KLX0KLQotaW5saW5lIHZvaWQqIEhhbmRsZUhlYXA6Ok5vZGU6Ondl
YWtPd25lckNvbnRleHQoKQotewotICAgIEFTU0VSVCh3ZWFrT3duZXIoKSk7Ci0gICAgcmV0dXJu
IG1fd2Vha093bmVyQ29udGV4dDsKLX0KLQogaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6Tm9kZTo6
c2V0UHJldihOb2RlKiBwcmV2KQogewogICAgIG1fcHJldiA9IHByZXY7CkBAIC0yODQsMTMgKzE5
MCw2IEBAIGlubGluZSBIYW5kbGVIZWFwOjpOb2RlKiBIYW5kbGVIZWFwOjpOb2QKICAgICByZXR1
cm4gbV9uZXh0OwogfQogCi0vLyBTZW50aW5lbCB0byBpbmRpY2F0ZSB0aGF0IGEgbm9kZSBpcyB3
ZWFrLCBidXQgaXRzIG93bmVyIGhhcyBubyBtZWFuaW5nZnVsCi0vLyBjYWxsYmFja3MuIFRoaXMg
YWxsb3dzIHVzIHRvIG9wdGltaXplIGJ5IHNraXBwaW5nIHN1Y2ggbm9kZXMuCi1pbmxpbmUgV2Vh
a0hhbmRsZU93bmVyKiBIYW5kbGVIZWFwOjpOb2RlOjplbXB0eVdlYWtPd25lcigpCi17Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0hhbmRsZU93bmVyKj4oLTEpOwotfQotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIEhhbmRsZUhlYXA6OmZvckVhY2hTdHJvbmdIYW5k
bGUoRnVuY3RvciYgZnVuY3RvciwgY29uc3QgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4mIHNraXBT
ZXQpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVuZCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsMTggKzMxMywx
NyBAQCBIZWFwOjpIZWFwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSGVhCiAgICAgOiBtX2hl
YXBTaXplKGhlYXBTaXplKQogICAgICwgbV9taW5CeXRlc1BlckN5Y2xlKGhlYXBTaXplRm9ySGlu
dChoZWFwU2l6ZSkpCiAgICAgLCBtX2xhc3RGdWxsR0NTaXplKDApCi0gICAgLCBtX3dhdGVyTWFy
aygwKQogICAgICwgbV9oaWdoV2F0ZXJNYXJrKG1fbWluQnl0ZXNQZXJDeWNsZSkKICAgICAsIG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyhOb09wZXJhdGlvbikKICAgICAsIG1fb2JqZWN0U3BhY2UodGhp
cykKICAgICAsIG1fc3RvcmFnZVNwYWNlKHRoaXMpCiAgICAgLCBtX2Jsb2NrRnJlZWluZ1RocmVh
ZFNob3VsZFF1aXQoZmFsc2UpCi0gICAgLCBtX2V4dHJhQ29zdCgwKQogICAgICwgbV9tYXJrTGlz
dFNldCgwKQogICAgICwgbV9hY3Rpdml0eUNhbGxiYWNrKERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJh
Y2s6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1f
c2hhcmVkRGF0YShnbG9iYWxEYXRhKQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEp
CisgICAgLCBtX3dlYWtIZWFwKHRoaXMpCiAgICAgLCBtX2hhbmRsZUhlYXAoZ2xvYmFsRGF0YSkK
ICAgICAsIG1faXNTYWZlVG9Db2xsZWN0KGZhbHNlKQogICAgICwgbV9nbG9iYWxEYXRhKGdsb2Jh
bERhdGEpCkBAIC0zNzYsNyArMzc1LDcgQEAgdm9pZCBIZWFwOjpkZXN0cm95KCkKICAgICBjYW5v
bmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CiAgICAgY2xlYXJNYXJrcygpOwogCi0gICAgbV9o
YW5kbGVIZWFwLmZpbmFsaXplV2Vha0hhbmRsZXMoKTsKKyAgICBtX3dlYWtIZWFwLmZpbmFsaXpl
QWxsKCk7CiAgICAgbV9nbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZmluYWxpemVTbWFsbFN0cmlu
Z3MoKTsKICAgICBzaHJpbmsoKTsKICAgICBtX3N0b3JhZ2VTcGFjZS5kZXN0cm95KCk7CkBAIC00
NjYsOSArNDY1LDcgQEAgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZQog
ICAgIC8vIGlmIGEgbGFyZ2UgdmFsdWUgc3Vydml2ZXMgb25lIGdhcmJhZ2UgY29sbGVjdGlvbiwg
dGhlcmUgaXMgbm90IG11Y2ggcG9pbnQgdG8KICAgICAvLyBjb2xsZWN0aW5nIG1vcmUgZnJlcXVl
bnRseSBhcyBsb25nIGFzIGl0IHN0YXlzIGFsaXZlLgogCi0gICAgaWYgKG1fZXh0cmFDb3N0ID4g
bWF4RXh0cmFDb3N0ICYmIG1fZXh0cmFDb3N0ID4gaGlnaFdhdGVyTWFyaygpIC8gMikKLSAgICAg
ICAgY29sbGVjdEFsbEdhcmJhZ2UoKTsKLSAgICBtX2V4dHJhQ29zdCArPSBjb3N0OworICAgIGFk
ZFRvV2F0ZXJNYXJrKGNvc3QpOwogfQogCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQpA
QCAtNjg3LDEyICs2ODQsMTIgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAj
ZW5kaWYKICAgICB9CiAKLSAgICAvLyBXZWFrIGhhbmRsZXMgbXVzdCBiZSBtYXJrZWQgbGFzdCwg
YmVjYXVzZSB0aGVpciBvd25lcnMgdXNlIHRoZSBzZXQgb2YKLSAgICAvLyBvcGFxdWUgcm9vdHMg
dG8gZGV0ZXJtaW5lIHJlYWNoYWJpbGl0eS4KKyAgICAvLyBXZWFrIHJlZmVyZW5jZXMgbXVzdCBi
ZSBtYXJrZWQgbGFzdCBiZWNhdXNlIHRoZWlyIGxpdmVuZXNzIGRlcGVuZHMgb24KKyAgICAvLyB0
aGUgbGl2ZW5lc3Mgb2YgdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCBncmFwaC4KICAgICB7Ci0gICAg
ICAgIEdDUEhBU0UoVmlzaXRpbmdXZWFrSGFuZGxlcyk7CisgICAgICAgIEdDUEhBU0UoVmlzaXRp
bmdMaXZlV2Vha0hhbmRsZXMpOwogICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAg
bV9oYW5kbGVIZWFwLnZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAg
ICAgIG1fd2Vha0hlYXAudmlzaXRMaXZlV2Vha0ltcGxzKGhlYXBSb290VmlzaXRvcik7CiAgICAg
ICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAgICAgIGlmICh2aXNpdG9y
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTcwNSw2ICs3MDIsMjAgQEAg
dm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CisKKyAgICB7CisgICAgICAgIEdDUEhBU0UoVmlzaXRpbmdEZWFkV2Vha0hhbmRs
ZXMpOworICAgICAgICBtX3dlYWtIZWFwLnZpc2l0RGVhZFdlYWtJbXBscyhoZWFwUm9vdFZpc2l0
b3IpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cih2aXNpdG9yKTsKKyAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyNpZiBF
TkFCTEUoUEFSQUxMRUxfR0MpCisgICAgICAgICAgICB2aXNpdG9yLmRyYWluRnJvbVNoYXJlZChT
bG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKICAg
ICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKIAog
ICAgIHZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKQEAgLTgwNSw3ICs4MTYsNyBAQCB2b2lkIEhlYXA6
OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgICAgIAogICAgIHsKICAgICAgICAg
R0NQSEFTRShGaW5hbGl6ZVdlYWtIYW5kbGVzKTsKLSAgICAgICAgbV9oYW5kbGVIZWFwLmZpbmFs
aXplV2Vha0hhbmRsZXMoKTsKKyAgICAgICAgbV93ZWFrSGVhcC5zd2VlcCgpOwogICAgICAgICBt
X2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5maW5hbGl6ZVNtYWxsU3RyaW5ncygpOwogICAgIH0K
ICAgICAKQEAgLTgzNiw3ICs4NDcsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUg
c3dlZXBUb2dnCiAgICAgc2l6ZV90IHByb3BvcnRpb25hbEJ5dGVzID0gMiAqIG5ld1NpemU7CiAg
ICAgaWYgKGZ1bGxHQykgewogICAgICAgICBtX2xhc3RGdWxsR0NTaXplID0gbmV3U2l6ZTsKLSAg
ICAgICAgc2V0SGlnaFdhdGVyTWFyayhtYXgocHJvcG9ydGlvbmFsQnl0ZXMsIG1fbWluQnl0ZXNQ
ZXJDeWNsZSkpOworICAgICAgICBtX2hpZ2hXYXRlck1hcmsgPSBtYXgocHJvcG9ydGlvbmFsQnl0
ZXMsIG1fbWluQnl0ZXNQZXJDeWNsZSk7CiAgICAgfQogICAgIGRvdWJsZSBsYXN0R0NFbmRUaW1l
ID0gV1RGOjpjdXJyZW50VGltZSgpOwogICAgIG1fbGFzdEdDTGVuZ3RoID0gbGFzdEdDRW5kVGlt
ZSAtIGxhc3RHQ1N0YXJ0VGltZTsKQEAgLTg1Miw4ICs4NjMsOCBAQCB2b2lkIEhlYXA6OmNhbm9u
aWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoCiAKIHZvaWQgSGVhcDo6cmVzZXRBbGxvY2F0b3JzKCkK
IHsKLSAgICBtX2V4dHJhQ29zdCA9IDA7CiAgICAgbV9vYmplY3RTcGFjZS5yZXNldEFsbG9jYXRv
cnMoKTsKKyAgICBtX3dlYWtIZWFwLnJlc2V0QWxsb2NhdG9yKCk7CiB9CiAKIHZvaWQgSGVhcDo6
c2V0QWN0aXZpdHlDYWxsYmFjayhQYXNzT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gYWN0aXZp
dHlDYWxsYmFjaykKQEAgLTkxNCwxNSArOTI1LDE1IEBAIHZvaWQgSGVhcDo6cmVsZWFzZUZyZWVC
bG9ja3MoKQogCiB2b2lkIEhlYXA6OmFkZEZpbmFsaXplcihKU0NlbGwqIGNlbGwsIEZpbmFsaXpl
ciBmaW5hbGl6ZXIpCiB7Ci0gICAgV2VhazxKU0NlbGw+IHdlYWsoKmdsb2JhbERhdGEoKSwgY2Vs
bCwgJm1fZmluYWxpemVyT3duZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpbmFsaXplcikp
OwotICAgIHdlYWsubGVha0hhbmRsZSgpOyAvLyBCYWxhbmNlZCBieSBGaW5hbGl6ZXJPd25lcjo6
ZmluYWxpemUoKS4KKyAgICB3ZWFrSGVhcCgpLT5hbGxvY2F0ZShjZWxsLCAmbV9maW5hbGl6ZXJP
d25lciwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmluYWxpemVyKSk7IC8vIEJhbGFuY2VkIGJ5
IEZpbmFsaXplck93bmVyOjpmaW5hbGl6ZSgpLgogfQogCiB2b2lkIEhlYXA6OkZpbmFsaXplck93
bmVyOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQogewot
ICAgIFdlYWs8SlNDZWxsPiB3ZWFrKFdlYWs8SlNDZWxsPjo6QWRvcHQsIGhhbmRsZSk7CisgICAg
SGFuZGxlU2xvdCBzbG90ID0gaGFuZGxlLnNsb3QoKTsKICAgICBGaW5hbGl6ZXIgZmluYWxpemVy
ID0gcmVpbnRlcnByZXRfY2FzdDxGaW5hbGl6ZXI+KGNvbnRleHQpOwotICAgIGZpbmFsaXplcih3
ZWFrLmdldCgpKTsKKyAgICBmaW5hbGl6ZXIoc2xvdC0+YXNDZWxsKCkpOworICAgIFdlYWtIZWFw
OjpkZWFsbG9jYXRlKFdlYWtJbXBsOjphc1dlYWtJbXBsKHNsb3QpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxMTI1
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2luY2x1ZGUg
Ik1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXZWFr
SGFuZGxlT3duZXIuaCIKKyNpbmNsdWRlICJXZWFrSGVhcC5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllclN1cHBvcnQuaCIKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMzMsMTEgKzEzNSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0
dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVkQ2VsbChGdW5jdG9yJik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaFBy
b3RlY3RlZENlbGwoKTsKIAorICAgICAgICBXZWFrSGVhcCogd2Vha0hlYXAoKSB7IHJldHVybiAm
bV93ZWFrSGVhcDsgfQogICAgICAgICBIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKCkgeyByZXR1cm4g
Jm1faGFuZGxlSGVhcDsgfQogICAgICAgICBIYW5kbGVTdGFjayogaGFuZGxlU3RhY2soKSB7IHJl
dHVybiAmbV9oYW5kbGVTdGFjazsgfQogCiAgICAgICAgIHZvaWQgZ2V0Q29uc2VydmF0aXZlUmVn
aXN0ZXJSb290cyhIYXNoU2V0PEpTQ2VsbCo+JiByb290cyk7CiAKKyAgICAgICAgdm9pZCBhZGRU
b1dhdGVyTWFyayhzaXplX3QpOworCiAgICAgICAgIGRvdWJsZSBsYXN0R0NMZW5ndGgoKSB7IHJl
dHVybiBtX2xhc3RHQ0xlbmd0aDsgfQogCiAgICAgcHJpdmF0ZToKQEAgLTE1NSw3ICsxNjAsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzaXplX3Qgd2F0ZXJNYXJrKCk7CiAgICAgICAg
IHNpemVfdCBoaWdoV2F0ZXJNYXJrKCk7Ci0gICAgICAgIHZvaWQgc2V0SGlnaFdhdGVyTWFyayhz
aXplX3QpOwogICAgICAgICBib29sIHNob3VsZENvbGxlY3QoKTsKIAogICAgICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IG1pbkV4dHJhQ29zdCA9IDI1NjsKQEAgLTE5OSw3ICsyMDMsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgSGVhcFNpemUgbV9oZWFwU2l6ZTsKICAgICAgICAg
Y29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKICAgICAgICAgc2l6ZV90IG1fbGFzdEZ1
bGxHQ1NpemU7Ci0gICAgICAgIHNpemVfdCBtX3dhdGVyTWFyazsKICAgICAgICAgc2l6ZV90IG1f
aGlnaFdhdGVyTWFyazsKICAgICAgICAgCiAgICAgICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3MgbV9v
cGVyYXRpb25JblByb2dyZXNzOwpAQCAtMjE4LDggKzIyMSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBWVGFibGVTcGVjdHJ1bSBtX2Rlc3Ryb3llZFR5cGVDb3VudHM7CiAjZW5kaWYKIAot
ICAgICAgICBzaXplX3QgbV9leHRyYUNvc3Q7Ci0KICAgICAgICAgUHJvdGVjdENvdW50U2V0IG1f
cHJvdGVjdGVkVmFsdWVzOwogICAgICAgICBWZWN0b3I8VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4q
ID4gbV90ZW1wU29ydGluZ1ZlY3RvcnM7CiAgICAgICAgIEhhc2hTZXQ8TWFya2VkQXJndW1lbnRC
dWZmZXIqPiogbV9tYXJrTGlzdFNldDsKQEAgLTIzMSw2ICsyMzIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJlZERhdGE7CiAgICAg
ICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CiAKKyAgICAgICAgV2Vha0hlYXAgbV93ZWFr
SGVhcDsKICAgICAgICAgSGFuZGxlSGVhcCBtX2hhbmRsZUhlYXA7CiAgICAgICAgIEhhbmRsZVN0
YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgICAgIERGR0NvZGVCbG9ja3MgbV9kZmdDb2RlQmxvY2tz
OwpAQCAtMjkzLDkgKzI5NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1f
aGlnaFdhdGVyTWFyazsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjpzZXRIaWdoV2F0
ZXJNYXJrKHNpemVfdCBuZXdIaWdoV2F0ZXJNYXJrKQorICAgIGlubGluZSB2b2lkIEhlYXA6OmFk
ZFRvV2F0ZXJNYXJrKHNpemVfdCBzaXplKQogICAgIHsKLSAgICAgICAgbV9oaWdoV2F0ZXJNYXJr
ID0gbmV3SGlnaFdhdGVyTWFyazsKKyAgICAgICAgbV9vYmplY3RTcGFjZS5hZGRUb1dhdGVyTWFy
ayhzaXplKTsKKyAgICAgICAgaWYgKHdhdGVyTWFyaygpID4gaGlnaFdhdGVyTWFyaygpKQorICAg
ICAgICAgICAgY29sbGVjdChEb05vdFN3ZWVwKTsKICAgICB9CiAKICNpZiBFTkFCTEUoR0dDKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNp
b24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIGNsYXNzIFN0cnVjdHVyZTsKIAogTWFy
a2VkU3BhY2U6Ok1hcmtlZFNwYWNlKEhlYXAqIGhlYXApCiAgICAgOiBtX3dhdGVyTWFyaygwKQot
ICAgICwgbV9udXJzZXJ5V2F0ZXJNYXJrKDApCiAgICAgLCBtX2hlYXAoaGVhcCkKIHsKICAgICBm
b3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0
b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewpAQCAtNDksNyArNDgsNiBAQCBNYXJrZWRT
cGFjZTo6TWFya2VkU3BhY2UoSGVhcCogaGVhcCkKIHZvaWQgTWFya2VkU3BhY2U6OnJlc2V0QWxs
b2NhdG9ycygpCiB7CiAgICAgbV93YXRlck1hcmsgPSAwOwotICAgIG1fbnVyc2VyeVdhdGVyTWFy
ayA9IDA7CiAKICAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6
ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewogICAgICAgICBh
bGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcg
QEAgcHVibGljOgogICAgIHZvaWQgY2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpOwogCiAg
ICAgc2l6ZV90IHdhdGVyTWFyaygpOwotICAgIHNpemVfdCBudXJzZXJ5V2F0ZXJNYXJrKCk7Cisg
ICAgdm9pZCBhZGRUb1dhdGVyTWFyayhzaXplX3QpOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PE1h
cmtlZEJsb2NrKj46Oml0ZXJhdG9yIEJsb2NrSXRlcmF0b3I7CiAgICAgCkBAIC03Nyw2ICs3Nyw3
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHNocmluaygpOwogICAgIHZvaWQgZnJlZUJsb2Nr
cyhNYXJrZWRCbG9jayogaGVhZCk7CisKICAgICB2b2lkIGRpZEFkZEJsb2NrKE1hcmtlZEJsb2Nr
Kik7CiAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoTWFya2VkQmxvY2sqKTsKIApAQCAtMTAy
LDcgKzEwMyw2IEBAIHByaXZhdGU6CiAgICAgU3Vic3BhY2UgbV9ub3JtYWxTcGFjZTsKIAogICAg
IHNpemVfdCBtX3dhdGVyTWFyazsKLSAgICBzaXplX3QgbV9udXJzZXJ5V2F0ZXJNYXJrOwogICAg
IEhlYXAqIG1faGVhcDsKICAgICBNYXJrZWRCbG9ja1NldCBtX2Jsb2NrczsKIH07CkBAIC0xMTIs
OSArMTEyLDkgQEAgaW5saW5lIHNpemVfdCBNYXJrZWRTcGFjZTo6d2F0ZXJNYXJrKCkKICAgICBy
ZXR1cm4gbV93YXRlck1hcms7CiB9CiAKLWlubGluZSBzaXplX3QgTWFya2VkU3BhY2U6Om51cnNl
cnlXYXRlck1hcmsoKQoraW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmFkZFRvV2F0ZXJNYXJrKHNp
emVfdCBzaXplKQogewotICAgIHJldHVybiBtX251cnNlcnlXYXRlck1hcms7CisgICAgbV93YXRl
ck1hcmsgKz0gc2l6ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5
cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgTWFya2VkU3BhY2U6OmZvckVhY2hDZWxsKEZ1bmN0
b3ImIGZ1bmN0b3IpCkBAIC0xOTksNyArMTk5LDYgQEAgaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6
OmRpZEFkZEJsb2NrKE1hcgogCiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6ZGlkQ29uc3VtZUZy
ZWVMaXN0KE1hcmtlZEJsb2NrKiBibG9jaykKIHsKLSAgICBtX251cnNlcnlXYXRlck1hcmsgKz0g
YmxvY2stPmNhcGFjaXR5KCkgLSBibG9jay0+c2l6ZSgpOwogICAgIG1fd2F0ZXJNYXJrICs9IGJs
b2NrLT5jYXBhY2l0eSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Q
YXNzV2Vhay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NX
ZWFrLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bh
c3NXZWFrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgUGFzc1dl
YWtfaAogI2RlZmluZSBQYXNzV2Vha19oCiAKKyNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgIkhhbmRsZS5oIgogI2luY2x1ZGUgPHd0Zi9O
dWxsUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KIApAQCAtMzUsNjEgKzM1LDE2
NCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NXZWFrOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gUGFzc1dlYWs8VD4gYWRvcHRXZWFrKEhhbmRsZVNsb3QpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gUGFzc1dlYWs8VD4gYWRvcHRXZWFrKFdlYWtJbXBsKik7CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNsYXNzIFBhc3NXZWFrIDogcHVibGljIEhhbmRsZTxUPiB7Ci0gICAgdXNpbmcgSGFuZGxl
PFQ+OjpzbG90OwotICAgIHVzaW5nIEhhbmRsZTxUPjo6c2V0U2xvdDsKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWtJbXBsQWNjZXNzb3IgeworcHVibGljOgor
ICAgIHR5cGVkZWYgVCogR2V0VHlwZTsKKworICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdDsKKyAg
ICBUJiBvcGVyYXRvciooKSBjb25zdDsKKyAgICBHZXRUeXBlIGdldCgpIGNvbnN0OworCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgd2FzKEdldFR5cGUpIGNvbnN0OworI2VuZGlmCit9
OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBjbGFzcyBXZWFrSW1wbEFjY2Vzc29yPEJhc2Us
IFVua25vd24+IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhbmRsZTxUPjo6RXh0
ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKKyAgICB0eXBlZGVmIEpTVmFsdWUgR2V0VHlwZTsKIAot
ICAgIFBhc3NXZWFrKCkgOiBIYW5kbGU8VD4oKSB7IH0KLSAgICBQYXNzV2VhayhzdGQ6Om51bGxw
dHJfdCkgOiBIYW5kbGU8VD4oKSB7IH0KKyAgICBjb25zdCBKU1ZhbHVlKiBvcGVyYXRvci0+KCkg
Y29uc3Q7CisgICAgY29uc3QgSlNWYWx1ZSYgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgR2V0VHlw
ZSBnZXQoKSBjb25zdDsKK307CiAKLSAgICBQYXNzV2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEV4dGVybmFsVHlwZSBleHRlcm5hbFR5cGUgPSBFeHRlcm5hbFR5cGUoKSwgV2Vha0hhbmRs
ZU93bmVyKiB3ZWFrT3duZXIgPSAwLCB2b2lkKiBjb250ZXh0ID0gMCkKLSAgICAgICAgOiBIYW5k
bGU8VD4oZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKSkKLSAgICB7Ci0g
ICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+bWFrZVdlYWsoc2xvdCgpLCB3ZWFr
T3duZXIsIGNvbnRleHQpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSGFuZGxlVHlwZXM8VD46
OnRvSlNWYWx1ZShleHRlcm5hbFR5cGUpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNs
b3QoKSktPndyaXRlQmFycmllcihzbG90KCksIHZhbHVlKTsKLSAgICAgICAgKnNsb3QoKSA9IHZh
bHVlOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NXZWFrIDogcHVibGlj
IFdlYWtJbXBsQWNjZXNzb3I8UGFzc1dlYWs8VD4sIFQ+IHsKK3B1YmxpYzoKKyAgICBmcmllbmQg
Y2xhc3MgV2Vha0ltcGxBY2Nlc3NvcjxQYXNzV2VhazxUPiwgVD47CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBXZWFrSW1wbEFjY2Vzc29yPFBhc3NXZWFrPFQ+LCBUPjo6R2V0VHlwZSBHZXRUeXBlOwor
CisgICAgUGFzc1dlYWsoKTsKKyAgICBQYXNzV2VhayhzdGQ6Om51bGxwdHJfdCk7CisgICAgUGFz
c1dlYWsoSlNHbG9iYWxEYXRhJiwgR2V0VHlwZSA9IEdldFR5cGUoKSwgV2Vha0hhbmRsZU93bmVy
KiA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKTsKIAogICAgIC8vIEl0IHNvbWV3aGF0IGJyZWFrcyB0
aGUgdHlwZSBzeXN0ZW0gdG8gYWxsb3cgdHJhbnNmZXIgb2Ygb3duZXJzaGlwIG91dCBvZgogICAg
IC8vIGEgY29uc3QgUGFzc1dlYWsuIEhvd2V2ZXIsIGl0IG1ha2VzIGl0IG11Y2ggZWFzaWVyIHRv
IHdvcmsgd2l0aCBQYXNzV2VhawogICAgIC8vIHRlbXBvcmFyaWVzLCBhbmQgd2UgZG9uJ3QgaGF2
ZSBhIG5lZWQgdG8gdXNlIHJlYWwgY29uc3QgUGFzc1dlYWtzIGFueXdheS4KLSAgICBQYXNzV2Vh
ayhjb25zdCBQYXNzV2VhayYgbykgOiBIYW5kbGU8VD4oby5sZWFrSGFuZGxlKCkpIHsgfQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvKSA6IEhh
bmRsZTxUPihvLmxlYWtIYW5kbGUoKSkgeyB9CisgICAgUGFzc1dlYWsoY29uc3QgUGFzc1dlYWsm
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBQYXNzV2Vhayhjb25zdCBQYXNzV2VhazxVPiYp
OworCisgICAgflBhc3NXZWFrKCk7CiAKLSAgICB+UGFzc1dlYWsoKQotICAgIHsKLSAgICAgICAg
aWYgKCFzbG90KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEhhbmRsZUhlYXA6Omhl
YXBGb3Ioc2xvdCgpKS0+ZGVhbGxvY2F0ZShzbG90KCkpOwotICAgICAgICBzZXRTbG90KDApOwot
ICAgIH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0OwogCi0gICAgRXh0ZXJuYWxUeXBlIGdl
dCgpIGNvbnN0IHsgcmV0dXJuICBIYW5kbGVUeXBlczxUPjo6Z2V0RnJvbVNsb3Qoc2xvdCgpKTsg
fQorICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVy
c2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVm
IEpTVmFsdWUgKFBhc3NXZWFrOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3Ig
VW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdDsKIAotICAgIEhhbmRsZVNsb3QgbGVha0hhbmRs
ZSgpIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBXZWFrSW1wbCogbGVha0ltcGwoKSBj
b25zdCBXQVJOX1VOVVNFRF9SRVRVUk47CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIFBhc3NXZWFr
IGFkb3B0V2VhazxUPihIYW5kbGVTbG90KTsKKyAgICBmcmllbmQgUGFzc1dlYWsgYWRvcHRXZWFr
PFQ+KFdlYWtJbXBsKik7CisgICAgZXhwbGljaXQgUGFzc1dlYWsoV2Vha0ltcGwqKTsKIAotICAg
IGV4cGxpY2l0IFBhc3NXZWFrKEhhbmRsZVNsb3Qgc2xvdCkgOiBIYW5kbGU8VD4oc2xvdCkgeyB9
CisgICAgV2Vha0ltcGwqIG1faW1wbDsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBIYW5kbGVTbG90IFBhc3NXZWFrPFQ+OjpsZWFrSGFuZGxlKCkgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGlubGluZSBUKiBXZWFrSW1wbEFjY2Vzc29yPEJhc2Us
IFQ+OjpvcGVyYXRvci0+KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzZSo+KHRoaXMpLT5tX2ltcGwgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5t
X2ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpOworICAgIHJldHVybiBqc0Nhc3Q8VCo+
KHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCkuYXNDZWxs
KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBUPiBpbmxpbmUgVCYg
V2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6b3BlcmF0b3IqKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwgJiYgc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpOwor
ICAgIHJldHVybiAqanNDYXN0PFQqPihzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1f
aW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzZSwg
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVD46Okdl
dFR5cGUgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6Z2V0KCkgY29uc3QKK3sKKyAgICBpZiAo
IXN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsIHx8IHN0YXRpY19jYXN0PGNv
bnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlKQorICAg
ICAgICByZXR1cm4gR2V0VHlwZSgpOworICAgIHJldHVybiBqc0Nhc3Q8VCo+KHN0YXRpY19jYXN0
PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpOworfQorCisj
aWYgIUFTU0VSVF9ESVNBQkxFRAordGVtcGxhdGU8dHlwZW5hbWUgQmFzZSwgdHlwZW5hbWUgVD4g
aW5saW5lIGJvb2wgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6d2FzKHR5cGVuYW1lIFdlYWtJ
bXBsQWNjZXNzb3I8QmFzZSwgVD46OkdldFR5cGUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGpzQ2FzdDxUKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFs
dWUoKS5hc0NlbGwoKSkgPT0gb3RoZXI7Cit9CisjZW5kaWYKKwordGVtcGxhdGU8dHlwZW5hbWUg
QmFzZT4gaW5saW5lIGNvbnN0IEpTVmFsdWUqIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93
bj46Om9wZXJhdG9yLT4oKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBC
YXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1f
aW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuICZzdGF0aWNfY2Fz
dDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+anNWYWx1ZSgpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBCYXNlPiBpbmxpbmUgY29uc3QgSlNWYWx1ZSYgV2Vha0ltcGxBY2Nlc3NvcjxCYXNl
LCBVbmtub3duPjo6b3BlcmF0b3IqKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRo
aXMpLT5tX2ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+anNWYWx1ZSgpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCYXNlPiBpbmxpbmUgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxCYXNl
LCBVbmtub3duPjo6R2V0VHlwZSBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25vd24+OjpnZXQo
KSBjb25zdAoreworICAgIGlmICghc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2lt
cGwgfHwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgIT0g
V2Vha0ltcGw6OkxpdmUpCisgICAgICAgIHJldHVybiBHZXRUeXBlKCk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxUPjo6UGFzc1dlYWsoKQorICAgIDog
bV9pbXBsKDApCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxU
Pjo6UGFzc1dlYWsoc3RkOjpudWxscHRyX3QpCisgICAgOiBtX2ltcGwoMCkKK3sKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2VhayhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHR5cGVuYW1lIFBhc3NXZWFrPFQ+OjpHZXRUeXBlIGdldFR5cGUsIFdl
YWtIYW5kbGVPd25lciogd2Vha093bmVyLCB2b2lkKiBjb250ZXh0KQorICAgIDogbV9pbXBsKGds
b2JhbERhdGEuaGVhcC53ZWFrSGVhcCgpLT5hbGxvY2F0ZShnZXRUeXBlLCB3ZWFrT3duZXIsIGNv
bnRleHQpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46
OlBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrJiBvKQorICAgIDogbV9pbXBsKG8ubGVha0ltcGwoKSkK
K3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4gaW5saW5l
IFBhc3NXZWFrPFQ+OjpQYXNzV2Vhayhjb25zdCBQYXNzV2VhazxVPiYgbykKKyAgICA6IG1faW1w
bChvLmxlYWtJbXBsKCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNz
V2VhazxUPjo6flBhc3NXZWFrKCkKK3sKKyAgICBpZiAoIW1faW1wbCkKKyAgICAgICAgcmV0dXJu
OworICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKG1faW1wbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBib29sIFBhc3NXZWFrPFQ+OjpvcGVyYXRvciEoKSBjb25zdAoreworICAg
IHJldHVybiAhbV9pbXBsIHx8IG1faW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1wbDo6TGl2ZSB8fCAh
bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNz
V2VhazxUPjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdAoreworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPighISp0aGlzKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2VhayhXZWFr
SW1wbCogaW1wbCkKKzogbV9pbXBsKGltcGwpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBXZWFrSW1wbCogUGFzc1dlYWs8VD46OmxlYWtJbXBsKCkgY29uc3QKIHsKLSAgICBI
YW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCk7Ci0gICAgY29uc3RfY2FzdDxQYXNzV2VhazxU
Pio+KHRoaXMpLT5zZXRTbG90KDApOwotICAgIHJldHVybiBzbG90OworICAgIFdlYWtJbXBsKiB0
bXAgPSAwOworICAgIHN0ZDo6c3dhcCh0bXAsIGNvbnN0X2Nhc3Q8V2Vha0ltcGwqJj4obV9pbXBs
KSk7CisgICAgcmV0dXJuIHRtcDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1dlYWs8
VD4gYWRvcHRXZWFrKEhhbmRsZVNsb3Qgc2xvdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFBhc3NX
ZWFrPFQ+IGlubGluZSBhZG9wdFdlYWsoV2Vha0ltcGwqIGltcGwpCiB7Ci0gICAgcmV0dXJuIFBh
c3NXZWFrPFQ+KHNsb3QpOworICAgIHJldHVybiBQYXNzV2VhazxUPihpbXBsKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQYXNzV2VhazxUPiYgYSwgY29uc3QgUGFzc1dlYWs8VT4mIGIpIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Ryb25nLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N0cm9uZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsMTkgQEAg
cHVibGljOgogICAgICAgICBjbGVhcigpOwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIXNsb3QoKSB8fCAhKnNsb3QoKTsgfQorCisgICAgLy8gVGhpcyBjb252
ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5v
dCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgSlNWYWx1ZSAoSGFuZGxlQmFz
ZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5
cGUqKCkgY29uc3QgeyByZXR1cm4gISEqdGhpcyA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZp
ZWRCb29sVHlwZSo+KDEpIDogMDsgfQorCiAgICAgdm9pZCBzd2FwKFN0cm9uZyYgb3RoZXIpCiAg
ICAgewogICAgICAgICBIYW5kbGU8VD46OnN3YXAob3RoZXIpOwogICAgIH0KIAorICAgIEV4dGVy
bmFsVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiBIYW5kbGVUeXBlczxUPjo6Z2V0RnJvbVNsb3Qo
dGhpcy0+c2xvdCgpKTsgfQorCiAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiwgRXh0ZXJuYWxU
eXBlKTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBTdHJvbmcmIG9wZXJhdG9yPShjb25z
dCBTdHJvbmc8VT4mIG90aGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaAkocmV2
aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywxMDkgKzI3LDEyOSBAQAogI2RlZmluZSBXZWFrX2gKIAogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSAiSGFuZGxlLmgiCi0jaW5jbHVkZSAiSGFu
ZGxlSGVhcC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIlBhc3NXZWFr
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi0vLyBBIHdlYWtseSByZWZlcmVuY2VkIGhhbmRsZSB0
aGF0IGJlY29tZXMgMCB3aGVuIHRoZSB2YWx1ZSBpdCBwb2ludHMgdG8gaXMgZ2FyYmFnZSBjb2xs
ZWN0ZWQuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2VhayA6IHB1YmxpYyBIYW5kbGU8
VD4gewordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhayA6IHB1YmxpYyBXZWFrSW1wbEFj
Y2Vzc29yPFdlYWs8VD4sIFQ+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWFrKTsKLQot
ICAgIHVzaW5nIEhhbmRsZTxUPjo6c2xvdDsKLSAgICB1c2luZyBIYW5kbGU8VD46OnNldFNsb3Q7
Ci0KIHB1YmxpYzoKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhbmRsZTxUPjo6RXh0ZXJuYWxUeXBl
IEV4dGVybmFsVHlwZTsKKyAgICBmcmllbmQgY2xhc3MgV2Vha0ltcGxBY2Nlc3NvcjxXZWFrPFQ+
LCBUPjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFdlYWtJbXBsQWNjZXNzb3I8V2VhazxUPiwgVD46
OkdldFR5cGUgR2V0VHlwZTsKIAotICAgIFdlYWsoKQotICAgICAgICA6IEhhbmRsZTxUPigpCi0g
ICAgewotICAgIH0KLQotICAgIFdlYWsoc3RkOjpudWxscHRyX3QpCi0gICAgICAgIDogSGFuZGxl
PFQ+KCkKLSAgICB7Ci0gICAgfQotCi0gICAgV2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEV4dGVybmFsVHlwZSBleHRlcm5hbFR5cGUgPSBFeHRlcm5hbFR5cGUoKSwgV2Vha0hhbmRsZU93
bmVyKiB3ZWFrT3duZXIgPSAwLCB2b2lkKiBjb250ZXh0ID0gMCkKLSAgICAgICAgOiBIYW5kbGU8
VD4oZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKSkKLSAgICB7Ci0gICAg
ICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+bWFrZVdlYWsoc2xvdCgpLCB3ZWFrT3du
ZXIsIGNvbnRleHQpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSGFuZGxlVHlwZXM8VD46OnRv
SlNWYWx1ZShleHRlcm5hbFR5cGUpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3Qo
KSktPndyaXRlQmFycmllcihzbG90KCksIHZhbHVlKTsKLSAgICAgICAgKnNsb3QoKSA9IHZhbHVl
OwotICAgIH0KLQotICAgIGVudW0gQWRvcHRUYWcgeyBBZG9wdCB9OwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IFdlYWsoQWRvcHRUYWcsIEhhbmRsZTxVPiBoYW5kbGUpCi0gICAgICAgIDogSGFu
ZGxlPFQ+KGhhbmRsZS5zbG90KCkpCi0gICAgewotICAgICAgICB2YWxpZGF0ZUNlbGwoZ2V0KCkp
OwotICAgIH0KKyAgICBXZWFrKCk7CisgICAgV2VhayhzdGQ6Om51bGxwdHJfdCk7CisgICAgV2Vh
ayhKU0dsb2JhbERhdGEmLCBHZXRUeXBlID0gR2V0VHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqID0g
MCwgdm9pZCogY29udGV4dCA9IDApOwogCiAgICAgZW51bSBIYXNoVGFibGVEZWxldGVkVmFsdWVU
YWcgeyBIYXNoVGFibGVEZWxldGVkVmFsdWUgfTsKLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc2xvdCgpID09IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
OyB9Ci0gICAgV2VhayhIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCi0gICAgICAgIDogSGFuZGxl
PFQ+KGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBXZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvdGhlcikKLSAgICAgICAgOiBI
YW5kbGU8VD4ob3RoZXIubGVha0hhbmRsZSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICB+V2Vhaygp
Ci0gICAgewotICAgICAgICBjbGVhcigpOwotICAgIH0KLQotICAgIHZvaWQgc3dhcChXZWFrJiBv
dGhlcikKLSAgICB7Ci0gICAgICAgIEhhbmRsZTxUPjo6c3dhcChvdGhlcik7Ci0gICAgfQorICAg
IGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdDsKKyAgICBXZWFrKEhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVRhZyk7CiAKLSAgICBXZWFrJiBvcGVyYXRvcj0oY29uc3QgUGFzc1dlYWs8
VD4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBXZWFrKGNvbnN0IFBhc3NXZWFrPFU+Jik7
CiAKLSAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29uc3QgeyByZXR1cm4gIEhhbmRsZVR5cGVzPFQ+
OjpnZXRGcm9tU2xvdChzbG90KCkpOyB9Ci0gICAgCi0gICAgUGFzc1dlYWs8VD4gcmVsZWFzZSgp
IHsgUGFzc1dlYWs8VD4gdG1wID0gYWRvcHRXZWFrPFQ+KHNsb3QoKSk7IHNldFNsb3QoMCk7IHJl
dHVybiB0bXA7IH0KKyAgICB+V2VhaygpOwogCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAg
ICAgICBpZiAoIXNsb3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KCkpLT5kZWFsbG9jYXRlKHNsb3QoKSk7Ci0gICAgICAgIHNldFNsb3Qo
MCk7Ci0gICAgfQorICAgIHZvaWQgc3dhcChXZWFrJik7CisgICAgV2VhayYgb3BlcmF0b3I9KGNv
bnN0IFBhc3NXZWFrPFQ+Jik7CiAgICAgCi0gICAgSGFuZGxlU2xvdCBsZWFrSGFuZGxlKCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QoKSktPmhhc0ZpbmFs
aXplcihzbG90KCkpKTsKLSAgICAgICAgSGFuZGxlU2xvdCByZXN1bHQgPSBzbG90KCk7Ci0gICAg
ICAgIHNldFNsb3QoMCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3Q7CisKKyAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxs
b3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIg
dHlwZXMuCisgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNlOjoqVW5zcGVjaWZpZWRCb29s
VHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdDsKIAorICAg
IFBhc3NXZWFrPFQ+IHJlbGVhc2UoKTsKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgCiBwcml2YXRl
OgotICAgIHN0YXRpYyBIYW5kbGVTbG90IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8SGFuZGxlU2xvdD4oLTEpOyB9CisgICAgc3RhdGljIFdlYWtJbXBs
KiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKworICAgIFdlYWtJbXBsKiBtX2ltcGw7CiB9Owog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2VhaygpCisgICAgOiBtX2lt
cGwoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWso
c3RkOjpudWxscHRyX3QpCisgICAgOiBtX2ltcGwoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWsoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB0eXBl
bmFtZSBXZWFrPFQ+OjpHZXRUeXBlIGdldFR5cGUsIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVy
LCB2b2lkKiBjb250ZXh0KQorICAgIDogbV9pbXBsKGdsb2JhbERhdGEuaGVhcC53ZWFrSGVhcCgp
LT5hbGxvY2F0ZShnZXRUeXBlLCB3ZWFrT3duZXIsIGNvbnRleHQpKQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFrPFQ+Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbCA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUo
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWsodHlwZW5h
bWUgV2VhazxUPjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKQorICAgIDogbV9pbXBsKGhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiAgaW5saW5lIFdlYWs8VD46OldlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG90
aGVyKQorICAgIDogbV9pbXBsKG90aGVyLmxlYWtJbXBsKCkpCit7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+Ojp+V2VhaygpCit7CisgICAgY2xlYXIoKTsKK30KKwog
dGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgc3dhcChXZWFrPFQ+JiBhLCBXZWFrPFQ+JiBi
KQogewogICAgIGEuc3dhcChiKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZv
aWQgV2VhazxUPjo6c3dhcChXZWFrJiBvdGhlcikKK3sKKyAgICBzdGQ6OnN3YXAobV9pbXBsLCBv
dGhlci5tX2ltcGwpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPiYg
V2VhazxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NXZWFrPFQ+JiBvKQogewogICAgIGNsZWFyKCk7
Ci0gICAgc2V0U2xvdChvLmxlYWtIYW5kbGUoKSk7CisgICAgbV9pbXBsID0gby5sZWFrSW1wbCgp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJv
b2wgV2VhazxUPjo6b3BlcmF0b3IhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faW1wbCB8fCAh
bV9pbXBsLT5qc1ZhbHVlKCkgfHwgbV9pbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6b3BlcmF0b3IgVW5zcGVj
aWZpZWRCb29sVHlwZSooKSBjb25zdAoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFVu
c3BlY2lmaWVkQm9vbFR5cGUqPighISp0aGlzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIFBhc3NXZWFrPFQ+IFdlYWs8VD46OnJlbGVhc2UoKQoreworICAgIFBhc3NXZWFrPFQ+
IHRtcCA9IGFkb3B0V2VhazxUPihtX2ltcGwpOworICAgIG1faW1wbCA9IDA7CisgICAgcmV0dXJu
IHRtcDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgV2VhazxUPjo6Y2xl
YXIoKQoreworICAgIGlmICghbV9pbXBsKQorICAgICAgICByZXR1cm47CisgICAgV2Vha0hlYXA6
OmRlYWxsb2NhdGUobV9pbXBsKTsKKyAgICBtX2ltcGwgPSAwOworfQorICAgIAordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIFdlYWtJbXBsKiBXZWFrPFQ+OjpoYXNoVGFibGVEZWxldGVkVmFs
dWUoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4oLTEpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0xNTEsNyArMTcxLDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM8SgogICAgIHN0YXRpYyBQ
YXNzT3V0VHlwZSBwYXNzT3V0KFN0b3JhZ2VUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUucmVs
ZWFzZSgpOyB9CiAgICAgc3RhdGljIFBhc3NPdXRUeXBlIHBhc3NPdXQoRW1wdHlWYWx1ZVR5cGUp
IHsgcmV0dXJuIFBhc3NPdXRUeXBlKCk7IH0KIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgU3RvcmFn
ZVR5cGU6OkV4dGVybmFsVHlwZSBQZWVrVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFN0b3Jh
Z2VUeXBlOjpHZXRUeXBlIFBlZWtUeXBlOwogICAgIHN0YXRpYyBQZWVrVHlwZSBwZWVrKGNvbnN0
IFN0b3JhZ2VUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCk7IH0KICAgICBzdGF0aWMg
UGVla1R5cGUgcGVlayhFbXB0eVZhbHVlVHlwZSkgeyByZXR1cm4gUGVla1R5cGUoKTsgfQogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYWtCbG9jay5oIgorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkhl
YXBSb290VmlzaXRvci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworV2Vha0Jsb2NrKiBXZWFrQmxvY2s6OmNyZWF0ZSgpCit7CisgICAgUGFnZUFsbG9jYXRp
b25BbGlnbmVkIGFsbG9jYXRpb24gPSBQYWdlQWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKGJs
b2NrU2l6ZSwgYmxvY2tTaXplLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYg
KCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBy
ZXR1cm4gbmV3IChOb3ROdWxsLCBhbGxvY2F0aW9uLmJhc2UoKSkgV2Vha0Jsb2NrKGFsbG9jYXRp
b24pOworfQorCit2b2lkIFdlYWtCbG9jazo6ZGVzdHJveShXZWFrQmxvY2sqIGJsb2NrKQorewor
ICAgIGJsb2NrLT5tX2FsbG9jYXRpb24uZGVhbGxvY2F0ZSgpOworfQorCitXZWFrQmxvY2s6Oldl
YWtCbG9jayhQYWdlQWxsb2NhdGlvbkFsaWduZWQmIGFsbG9jYXRpb24pCisgICAgOiBIZWFwQmxv
Y2soYWxsb2NhdGlvbikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYWtJbXBsQ291
bnQoKTsgKytpKSB7CisgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtp
XTsKKyAgICAgICAgbmV3IChOb3ROdWxsLCB3ZWFrSW1wbCkgV2Vha0ltcGw7CisgICAgICAgIGFk
ZFRvRnJlZUxpc3QoJm1fc3dlZXBSZXN1bHQuZnJlZUxpc3QsIHdlYWtJbXBsKTsKKyAgICB9CisK
KyAgICBBU1NFUlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkgJiYgbV9zd2VlcFJlc3VsdC5ibG9j
a0lzRnJlZSk7Cit9CisKK3ZvaWQgV2Vha0Jsb2NrOjpmaW5hbGl6ZUFsbCgpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB3ZWFrSW1wbENvdW50KCk7ICsraSkgeworICAgICAgICBXZWFr
SW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxzKClbaV07CisgICAgICAgIGlmICh3ZWFrSW1wbC0+
c3RhdGUoKSA+PSBXZWFrSW1wbDo6RmluYWxpemVkKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHdlYWtJbXBsLT5zZXRTdGF0ZShXZWFrSW1wbDo6RGVhZCk7CisgICAgICAgIGZpbmFs
aXplKHdlYWtJbXBsKTsKKyAgICB9Cit9CisKK3ZvaWQgV2Vha0Jsb2NrOjpzd2VlcCgpCit7Cisg
ICAgaWYgKCFtX3N3ZWVwUmVzdWx0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBT
d2VlcFJlc3VsdCBzd2VlcFJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYWtJ
bXBsQ291bnQoKTsgKytpKSB7CisgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1w
bHMoKVtpXTsKKyAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID09IFdlYWtJbXBsOjpEZWFk
KQorICAgICAgICAgICAgZmluYWxpemUod2Vha0ltcGwpOworICAgICAgICBpZiAod2Vha0ltcGwt
PnN0YXRlKCkgPT0gV2Vha0ltcGw6OkRlYWxsb2NhdGVkKQorICAgICAgICAgICAgYWRkVG9GcmVl
TGlzdCgmc3dlZXBSZXN1bHQuZnJlZUxpc3QsIHdlYWtJbXBsKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc3dlZXBSZXN1bHQuYmxvY2tJc0ZyZWUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBt
X3N3ZWVwUmVzdWx0ID0gc3dlZXBSZXN1bHQ7CisgICAgQVNTRVJUKCFtX3N3ZWVwUmVzdWx0Lmlz
TnVsbCgpKTsKK30KKwordm9pZCBXZWFrQmxvY2s6OnZpc2l0TGl2ZVdlYWtJbXBscyhIZWFwUm9v
dFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKK3sKKyAgICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBs
ZXRlbHkgZW1wdHksIGEgdmlzaXQgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgorICAgIGlmICghbV9z
d2VlcFJlc3VsdC5pc051bGwoKSAmJiBtX3N3ZWVwUmVzdWx0LmJsb2NrSXNGcmVlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IGhlYXBSb290VmlzaXRvci52
aXNpdG9yKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYWtJbXBsQ291bnQoKTsg
KytpKSB7CisgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsKKyAg
ICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgSlNWYWx1ZSYganNWYWx1ZSA9IHdlYWtJbXBs
LT5qc1ZhbHVlKCk7CisgICAgICAgIGlmICghanNWYWx1ZSB8fCAhanNWYWx1ZS5pc0NlbGwoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTQ2VsbCoganNDZWxsID0ganNWYWx1
ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGpzQ2VsbCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBXZWFrSGFuZGxlT3duZXIqIHdlYWtIYW5kbGVPd25l
ciA9IHdlYWtJbXBsLT53ZWFrSGFuZGxlT3duZXIoKTsKKyAgICAgICAgaWYgKCF3ZWFrSGFuZGxl
T3duZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIXdlYWtIYW5kbGVP
d25lci0+aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xv
dCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2
aXNpdG9yKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGhlYXBSb290VmlzaXRv
ci52aXNpdCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpOworICAgIH0KK30KKwordm9p
ZCBXZWFrQmxvY2s6OnZpc2l0RGVhZFdlYWtJbXBscyhIZWFwUm9vdFZpc2l0b3ImKQoreworICAg
IC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFu
eSBlZmZlY3QuCisgICAgaWYgKCFtX3N3ZWVwUmVzdWx0LmlzTnVsbCgpICYmIG1fc3dlZXBSZXN1
bHQuYmxvY2tJc0ZyZWUpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBs
ID0gJndlYWtJbXBscygpW2ldOworICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPiBXZWFr
SW1wbDo6RGVhZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IEpTVmFs
dWUmIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOworICAgICAgICBpZiAoIWpzVmFsdWUg
fHwgIWpzVmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBK
U0NlbGwqIGpzQ2VsbCA9IGpzVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChIZWFwOjppc01h
cmtlZChqc0NlbGwpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgd2Vha0ltcGwt
PnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYWtCbG9ja19oCisjZGVm
aW5lIFdlYWtCbG9ja19oCisKKyNpbmNsdWRlICJIZWFwQmxvY2suaCIKKyNpbmNsdWRlICJXZWFr
SGFuZGxlT3duZXIuaCIKKyNpbmNsdWRlICJXZWFrSW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9Eb3Vi
bHlMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0aW9uQWxpZ25lZC5oPgor
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEhlYXBSb290VmlzaXRvcjsKK2NsYXNzIEpTVmFsdWU7CitjbGFzcyBXZWFrSGFuZGxlT3duZXI7
CisKK2NsYXNzIFdlYWtCbG9jayA6IHB1YmxpYyBIZWFwQmxvY2sgeworcHVibGljOgorICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgYmxvY2tTaXplID0gNCAqIEtCOworICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgYmxvY2tNYXNrID0gfihibG9ja1NpemUgLSAxKTsKKworICAgIHN0cnVjdCBGcmVlQ2Vs
bCB7CisgICAgICAgIEZyZWVDZWxsKiBuZXh0OworICAgIH07CisKKyAgICBzdHJ1Y3QgU3dlZXBS
ZXN1bHQgeworICAgICAgICBTd2VlcFJlc3VsdCgpOworICAgICAgICBib29sIGlzTnVsbCgpIGNv
bnN0OworCisgICAgICAgIGJvb2wgYmxvY2tJc0ZyZWU7CisgICAgICAgIEZyZWVDZWxsKiBmcmVl
TGlzdDsKKyAgICB9OworCisgICAgc3RhdGljIFdlYWtCbG9jayogY3JlYXRlKCk7CisgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShXZWFrQmxvY2sqKTsKKworICAgIHN0YXRpYyBXZWFrQmxvY2sqIGJs
b2NrRm9yKFdlYWtJbXBsKik7CisgICAgc3RhdGljIFdlYWtJbXBsKiBhc1dlYWtJbXBsKEZyZWVD
ZWxsKik7CisKKyAgICB2b2lkIHN3ZWVwKCk7CisgICAgY29uc3QgU3dlZXBSZXN1bHQmIHN3ZWVw
UmVzdWx0KCk7CisgICAgU3dlZXBSZXN1bHQgdGFrZVN3ZWVwUmVzdWx0KCk7CisKKyAgICB2b2lk
IGRlYWxsb2NhdGUoV2Vha0ltcGwqKTsKKworICAgIHZvaWQgdmlzaXRMaXZlV2Vha0ltcGxzKEhl
YXBSb290VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXREZWFkV2Vha0ltcGxzKEhlYXBSb290Vmlz
aXRvciYpOworCisgICAgdm9pZCBmaW5hbGl6ZUFsbCgpOworCitwcml2YXRlOgorICAgIHN0YXRp
YyBGcmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1wbCopOworCisgICAgV2Vha0Jsb2NrKFBhZ2VB
bGxvY2F0aW9uQWxpZ25lZCYpOworICAgIFdlYWtJbXBsKiBmaXJzdFdlYWtJbXBsKCk7CisgICAg
dm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOworICAgIFdlYWtJbXBsKiB3ZWFrSW1wbHMoKTsKKyAg
ICBzaXplX3Qgd2Vha0ltcGxDb3VudCgpOworICAgIHZvaWQgYWRkVG9GcmVlTGlzdChGcmVlQ2Vs
bCoqLCBXZWFrSW1wbCopOworCisgICAgU3dlZXBSZXN1bHQgbV9zd2VlcFJlc3VsdDsKK307CisK
K2lubGluZSBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0OjpTd2VlcFJlc3VsdCgpCisgICAgOiBibG9j
a0lzRnJlZSh0cnVlKQorICAgICwgZnJlZUxpc3QoMCkKK3sKKyAgICBBU1NFUlQoaXNOdWxsKCkp
OworfQorCitpbmxpbmUgYm9vbCBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0Ojppc051bGwoKSBjb25z
dAoreworICAgIHJldHVybiBibG9ja0lzRnJlZSAmJiAhZnJlZUxpc3Q7IC8vIFRoaXMgc3RhdGUg
aXMgaW1wb3NzaWJsZSwgc28gd2UgY2FuIHVzZSBpdCB0byBtZWFuIG51bGwuCit9CisKK2lubGlu
ZSBXZWFrQmxvY2sqIFdlYWtCbG9jazo6YmxvY2tGb3IoV2Vha0ltcGwqIHdlYWtJbXBsKQorewor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pih3ZWFrSW1wbCkgJiBibG9ja01hc2spOworfQorCitpbmxpbmUgV2Vha0ltcGwq
IFdlYWtCbG9jazo6YXNXZWFrSW1wbChGcmVlQ2VsbCogZnJlZUNlbGwpCit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0ltcGwqPihmcmVlQ2VsbCk7Cit9CisKK2lubGluZSBXZWFr
QmxvY2s6OlN3ZWVwUmVzdWx0IFdlYWtCbG9jazo6dGFrZVN3ZWVwUmVzdWx0KCkKK3sKKyAgICBT
d2VlcFJlc3VsdCB0bXA7CisgICAgc3RkOjpzd2FwKHRtcCwgbV9zd2VlcFJlc3VsdCk7CisgICAg
QVNTRVJUKG1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOworICAgIHJldHVybiB0bXA7Cit9CisKK2lu
bGluZSBjb25zdCBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0JiBXZWFrQmxvY2s6OnN3ZWVwUmVzdWx0
KCkKK3sKKyAgICByZXR1cm4gbV9zd2VlcFJlc3VsdDsKK30KKworaW5saW5lIFdlYWtCbG9jazo6
RnJlZUNlbGwqIFdlYWtCbG9jazo6YXNGcmVlQ2VsbChXZWFrSW1wbCogd2Vha0ltcGwpCit7Cisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwqPih3ZWFrSW1wbCk7Cit9CisKK2lu
bGluZSB2b2lkIFdlYWtCbG9jazo6ZGVhbGxvY2F0ZShXZWFrSW1wbCogd2Vha0ltcGwpCit7Cisg
ICAgd2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJbXBsOjpEZWFsbG9jYXRlZCk7Cit9CisKK2lubGlu
ZSB2b2lkIFdlYWtCbG9jazo6ZmluYWxpemUoV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIEFT
U0VSVCh3ZWFrSW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6RGVhZCk7CisgICAgd2Vha0ltcGwt
PnNldFN0YXRlKFdlYWtJbXBsOjpGaW5hbGl6ZWQpOworICAgIFdlYWtIYW5kbGVPd25lciogd2Vh
a0hhbmRsZU93bmVyID0gd2Vha0ltcGwtPndlYWtIYW5kbGVPd25lcigpOworICAgIGlmICghd2Vh
a0hhbmRsZU93bmVyKQorICAgICAgICByZXR1cm47CisgICAgd2Vha0hhbmRsZU93bmVyLT5maW5h
bGl6ZShIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPih3ZWFr
SW1wbC0+anNWYWx1ZSgpKSksIHdlYWtJbXBsLT5jb250ZXh0KCkpOworfQorCitpbmxpbmUgV2Vh
a0ltcGwqIFdlYWtCbG9jazo6d2Vha0ltcGxzKCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxXZWFrSW1wbCo+KHRoaXMpICsgKChzaXplb2YoV2Vha0Jsb2NrKSArIHNpemVvZihXZWFr
SW1wbCkgLSAxKSAvIHNpemVvZihXZWFrSW1wbCkpOworfQorCitpbmxpbmUgc2l6ZV90IFdlYWtC
bG9jazo6d2Vha0ltcGxDb3VudCgpCit7CisgICAgcmV0dXJuIChibG9ja1NpemUgLyBzaXplb2Yo
V2Vha0ltcGwpKSAtICgoc2l6ZW9mKFdlYWtCbG9jaykgKyBzaXplb2YoV2Vha0ltcGwpIC0gMSkg
LyBzaXplb2YoV2Vha0ltcGwpKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Jsb2NrOjphZGRUb0Zy
ZWVMaXN0KEZyZWVDZWxsKiogZnJlZUxpc3QsIFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICBB
U1NFUlQod2Vha0ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkRlYWxsb2NhdGVkKTsKKyAgICBG
cmVlQ2VsbCogZnJlZUNlbGwgPSBhc0ZyZWVDZWxsKHdlYWtJbXBsKTsKKyAgICBBU1NFUlQoISpm
cmVlTGlzdCB8fCAoKGNoYXIqKSpmcmVlTGlzdCA+IChjaGFyKil0aGlzICYmIChjaGFyKikqZnJl
ZUxpc3QgPCAoY2hhciopdGhpcyArIGJsb2NrU2l6ZSkpOworICAgIEFTU0VSVCgoY2hhciopZnJl
ZUNlbGwgPiAoY2hhciopdGhpcyAmJiAoY2hhciopZnJlZUNlbGwgPCAoY2hhciopdGhpcyArIGJs
b2NrU2l6ZSk7CisgICAgZnJlZUNlbGwtPm5leHQgPSAqZnJlZUxpc3Q7CisgICAgKmZyZWVMaXN0
ID0gZnJlZUNlbGw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gV2Vha0Js
b2NrX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93
bmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtI
YW5kbGVPd25lci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vha0hhbmRsZU93bmVyLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBTbG90VmlzaXRvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNsYXNzIEhhbmRsZTsKKworV2Vha0hhbmRsZU93bmVyOjp+V2Vha0hhbmRsZU93bmVyKCkKK3sK
K30KKworYm9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhh
bmRsZTxVbmtub3duPiwgdm9pZCosIFNsb3RWaXNpdG9yJikKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgV2Vha0hhbmRsZU93bmVyOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZv
aWQqKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYWtIYW5kbGVPd25lcl9oCisjZGVmaW5l
IFdlYWtIYW5kbGVPd25lcl9oCisKKyNpbmNsdWRlICJIYW5kbGUuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFr
SGFuZGxlT3duZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOwor
ICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFs
aXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIFdlYWtIYW5kbGVPd25lcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vha0hlYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vha0hlYXAuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWFrSGVhcC5oIgor
CisjaW5jbHVkZSAiSGVhcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworV2Vha0hlYXA6On5XZWFr
SGVhcCgpCit7CisgICAgV2Vha0Jsb2NrKiBuZXh0ID0gMDsKKyAgICBmb3IgKFdlYWtCbG9jayog
YmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihtX2Jsb2Nrcy5oZWFkKCkpOyBibG9jazsg
YmxvY2sgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihi
bG9jay0+bmV4dCgpKTsKKyAgICAgICAgV2Vha0Jsb2NrOjpkZXN0cm95KGJsb2NrKTsKKyAgICB9
CisgICAgbV9ibG9ja3MuY2xlYXIoKTsKK30KKwordm9pZCBXZWFrSGVhcDo6ZmluYWxpemVBbGwo
KQoreworICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+
KG1fYmxvY2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+
KGJsb2NrLT5uZXh0KCkpKQorICAgICAgICBibG9jay0+ZmluYWxpemVBbGwoKTsKK30KKwordm9p
ZCBXZWFrSGVhcDo6dmlzaXRMaXZlV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPiht
X2Jsb2Nrcy5oZWFkKCkpOyBibG9jazsgYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihi
bG9jay0+bmV4dCgpKSkKKyAgICAgICAgYmxvY2stPnZpc2l0TGl2ZVdlYWtJbXBscyh2aXNpdG9y
KTsKK30KKwordm9pZCBXZWFrSGVhcDo6dmlzaXREZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxX
ZWFrQmxvY2sqPihtX2Jsb2Nrcy5oZWFkKCkpOyBibG9jazsgYmxvY2sgPSBzdGF0aWNfY2FzdDxX
ZWFrQmxvY2sqPihibG9jay0+bmV4dCgpKSkKKyAgICAgICAgYmxvY2stPnZpc2l0RGVhZFdlYWtJ
bXBscyh2aXNpdG9yKTsKK30KKwordm9pZCBXZWFrSGVhcDo6c3dlZXAoKQoreworICAgIFdlYWtC
bG9jayogbmV4dDsKKyAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFr
QmxvY2sqPihtX2Jsb2Nrcy5oZWFkKCkpOyBibG9jazsgYmxvY2sgPSBuZXh0KSB7CisgICAgICAg
IG5leHQgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihibG9jay0+bmV4dCgpKTsKKworICAgICAg
ICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBsZXRlbHkgZW1wdHksIGEgbmV3IHN3ZWVwIHdvbid0IGhh
dmUgYW55IGVmZmVjdC4KKyAgICAgICAgaWYgKCFibG9jay0+c3dlZXBSZXN1bHQoKS5pc051bGwo
KSAmJiBibG9jay0+c3dlZXBSZXN1bHQoKS5ibG9ja0lzRnJlZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGJsb2NrLT50YWtlU3dlZXBSZXN1bHQoKTsgLy8gRm9yY2UgYSBuZXcg
c3dlZXAgYnkgZGlzY2FyZGluZyB0aGUgbGFzdCBzd2VlcC4KKyAgICAgICAgYmxvY2stPnN3ZWVw
KCk7CisgICAgfQorfQorCit2b2lkIFdlYWtIZWFwOjpyZXNldEFsbG9jYXRvcigpCit7CisgICAg
bV9hbGxvY2F0b3IgPSAwOworICAgIG1fbmV4dEFsbG9jYXRvciA9IHN0YXRpY19jYXN0PFdlYWtC
bG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7Cit9CisKK1dlYWtCbG9jazo6RnJlZUNlbGwqIFdlYWtI
ZWFwOjpmaW5kQWxsb2NhdG9yKCkKK3sKKyAgICBpZiAoV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWxs
b2NhdG9yID0gdHJ5RmluZEFsbG9jYXRvcigpKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yOwor
CisgICAgbV9oZWFwLT5hZGRUb1dhdGVyTWFyayhXZWFrQmxvY2s6OmJsb2NrU2l6ZSk7CisKKyAg
ICAvLyBhZGRUb1dhdGVyTWFyaygpIG1heSBjYXVzZSBhIEdDLCBzbyB0cnkgYWdhaW4uCisgICAg
aWYgKFdlYWtCbG9jazo6RnJlZUNlbGwqIGFsbG9jYXRvciA9IHRyeUZpbmRBbGxvY2F0b3IoKSkK
KyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKKworICAgIHJldHVybiBhZGRBbGxvY2F0b3IoKTsK
K30KKworV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OnRyeUZpbmRBbGxvY2F0b3IoKQor
eworICAgIHdoaWxlIChtX25leHRBbGxvY2F0b3IpIHsKKyAgICAgICAgV2Vha0Jsb2NrKiBibG9j
ayA9IG1fbmV4dEFsbG9jYXRvcjsKKyAgICAgICAgbV9uZXh0QWxsb2NhdG9yID0gc3RhdGljX2Nh
c3Q8V2Vha0Jsb2NrKj4obV9uZXh0QWxsb2NhdG9yLT5uZXh0KCkpOworCisgICAgICAgIGJsb2Nr
LT5zd2VlcCgpOworICAgICAgICBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0IHN3ZWVwUmVzdWx0ID0g
YmxvY2stPnRha2VTd2VlcFJlc3VsdCgpOworICAgICAgICBpZiAoc3dlZXBSZXN1bHQuZnJlZUxp
c3QpCisgICAgICAgICAgICByZXR1cm4gc3dlZXBSZXN1bHQuZnJlZUxpc3Q7CisgICAgfQorCisg
ICAgcmV0dXJuIDA7Cit9CisKK1dlYWtCbG9jazo6RnJlZUNlbGwqIFdlYWtIZWFwOjphZGRBbGxv
Y2F0b3IoKQoreworICAgIFdlYWtCbG9jayogYmxvY2sgPSBXZWFrQmxvY2s6OmNyZWF0ZSgpOwor
ICAgIG1fYmxvY2tzLmFwcGVuZChibG9jayk7CisgICAgV2Vha0Jsb2NrOjpTd2VlcFJlc3VsdCBz
d2VlcFJlc3VsdCA9IGJsb2NrLT50YWtlU3dlZXBSZXN1bHQoKTsKKyAgICBBU1NFUlQoIXN3ZWVw
UmVzdWx0LmlzTnVsbCgpICYmIHN3ZWVwUmVzdWx0LmZyZWVMaXN0KTsKKyAgICByZXR1cm4gc3dl
ZXBSZXN1bHQuZnJlZUxpc3Q7Cit9CisKK3ZvaWQgV2Vha0hlYXA6OnJlbW92ZUFsbG9jYXRvcihX
ZWFrQmxvY2sqIGJsb2NrKQoreworICAgIG1fYmxvY2tzLnJlbW92ZShibG9jayk7CisgICAgV2Vh
a0Jsb2NrOjpkZXN0cm95KGJsb2NrKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGVhcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGVhcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWFrSGVhcF9oCisjZGVmaW5lIFdlYWtIZWFwX2gK
KworI2luY2x1ZGUgIldlYWtCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVh
cDsKK2NsYXNzIFdlYWtJbXBsOworCitjbGFzcyBXZWFrSGVhcCB7CitwdWJsaWM6CisgICAgV2Vh
a0hlYXAoSGVhcCopOworICAgIHZvaWQgZmluYWxpemVBbGwoKTsKKyAgICB+V2Vha0hlYXAoKTsK
KworICAgIFdlYWtJbXBsKiBhbGxvY2F0ZShKU1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqID0gMCwg
dm9pZCogY29udGV4dCA9IDApOworICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoV2Vha0ltcGwq
KTsKKworICAgIHZvaWQgdmlzaXRMaXZlV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpOworICAg
IHZvaWQgdmlzaXREZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpOworCisgICAgdm9pZCBz
d2VlcCgpOworICAgIHZvaWQgcmVzZXRBbGxvY2F0b3IoKTsKKworcHJpdmF0ZToKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBXZWFrQmxvY2s6OkZyZWVDZWxsKiBmaW5kQWxsb2NhdG9yKCk7CisgICAg
V2Vha0Jsb2NrOjpGcmVlQ2VsbCogdHJ5RmluZEFsbG9jYXRvcigpOworICAgIFdlYWtCbG9jazo6
RnJlZUNlbGwqIGFkZEFsbG9jYXRvcigpOworICAgIHZvaWQgcmVtb3ZlQWxsb2NhdG9yKFdlYWtC
bG9jayopOworCisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogbV9hbGxvY2F0b3I7CisgICAgV2Vh
a0Jsb2NrKiBtX25leHRBbGxvY2F0b3I7CisgICAgRG91Ymx5TGlua2VkTGlzdDxIZWFwQmxvY2s+
IG1fYmxvY2tzOworICAgIEhlYXAqIG1faGVhcDsKK307CisKK2lubGluZSBXZWFrSGVhcDo6V2Vh
a0hlYXAoSGVhcCogaGVhcCkKKyAgICA6IG1fYWxsb2NhdG9yKDApCisgICAgLCBtX25leHRBbGxv
Y2F0b3IoMCkKKyAgICAsIG1faGVhcChoZWFwKQoreworfQorCitpbmxpbmUgV2Vha0ltcGwqIFdl
YWtIZWFwOjphbGxvY2F0ZShKU1ZhbHVlIGpzVmFsdWUsIFdlYWtIYW5kbGVPd25lciogd2Vha0hh
bmRsZU93bmVyLCB2b2lkKiBjb250ZXh0KQoreworICAgIFdlYWtCbG9jazo6RnJlZUNlbGwqIGFs
bG9jYXRvciA9IG1fYWxsb2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBhbGxv
Y2F0b3IgPSBmaW5kQWxsb2NhdG9yKCk7CisgICAgbV9hbGxvY2F0b3IgPSBhbGxvY2F0b3ItPm5l
eHQ7CisKKyAgICBXZWFrSW1wbCogd2Vha0ltcGwgPSBXZWFrQmxvY2s6OmFzV2Vha0ltcGwoYWxs
b2NhdG9yKTsKKyAgICByZXR1cm4gbmV3IChOb3ROdWxsLCB3ZWFrSW1wbCkgV2Vha0ltcGwoanNW
YWx1ZSwgd2Vha0hhbmRsZU93bmVyLCBjb250ZXh0KTsKK30KKworaW5saW5lIHZvaWQgV2Vha0hl
YXA6OmRlYWxsb2NhdGUoV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIFdlYWtCbG9jazo6Ymxv
Y2tGb3Iod2Vha0ltcGwpLT5kZWFsbG9jYXRlKHdlYWtJbXBsKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBXZWFrSGVhcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtJbXBsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrSW1wbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2Vha0ltcGxfaAorI2RlZmluZSBXZWFrSW1wbF9oCisKKyNpbmNsdWRlICJKU1Zh
bHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWFrSGFuZGxlT3duZXI7CisKK2Ns
YXNzIFdlYWtJbXBsIHsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgTGl2ZSAg
ICAgICAgPSAweDAsCisgICAgICAgIERlYWQgICAgICAgID0gMHgxLAorICAgICAgICBGaW5hbGl6
ZWQgICA9IDB4MiwKKyAgICAgICAgRGVhbGxvY2F0ZWQgPSAweDMKKyAgICB9OworCisgICAgZW51
bSB7CisgICAgICAgIFN0YXRlTWFzayAgID0gMHgzCisgICAgfTsKKworICAgIFdlYWtJbXBsKCk7
CisgICAgV2Vha0ltcGwoSlNWYWx1ZSwgV2Vha0hhbmRsZU93bmVyKiwgdm9pZCogY29udGV4dCk7
CisKKyAgICBTdGF0ZSBzdGF0ZSgpOworICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUpOworCisgICAg
Y29uc3QgSlNWYWx1ZSYganNWYWx1ZSgpOworICAgIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRs
ZU93bmVyKCk7CisgICAgdm9pZCogY29udGV4dCgpOworCisgICAgc3RhdGljIFdlYWtJbXBsKiBh
c1dlYWtJbXBsKEpTVmFsdWUqKTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBKU1ZhbHVlIG1fanNW
YWx1ZTsKKyAgICBXZWFrSGFuZGxlT3duZXIqIG1fd2Vha0hhbmRsZU93bmVyOworICAgIHZvaWQq
IG1fY29udGV4dDsKK307CisKK2lubGluZSBXZWFrSW1wbDo6V2Vha0ltcGwoKQorICAgIDogbV93
ZWFrSGFuZGxlT3duZXIoMCkKKyAgICAsIG1fY29udGV4dCgwKQoreworICAgIHNldFN0YXRlKERl
YWxsb2NhdGVkKTsKK30KKworaW5saW5lIFdlYWtJbXBsOjpXZWFrSW1wbChKU1ZhbHVlIGpzVmFs
dWUsIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyLCB2b2lkKiBjb250ZXh0KQorICAg
IDogbV9qc1ZhbHVlKGpzVmFsdWUpCisgICAgLCBtX3dlYWtIYW5kbGVPd25lcih3ZWFrSGFuZGxl
T3duZXIpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKK3sKKyAgICBBU1NFUlQoc3RhdGUoKSA9
PSBMaXZlKTsKK30KKworaW5saW5lIFdlYWtJbXBsOjpTdGF0ZSBXZWFrSW1wbDo6c3RhdGUoKQor
eworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdGF0ZT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG1fd2Vha0hhbmRsZU93bmVyKSAmIFN0YXRlTWFzayk7Cit9CisKK2lubGluZSB2b2lkIFdl
YWtJbXBsOjpzZXRTdGF0ZShXZWFrSW1wbDo6U3RhdGUgc3RhdGUpCit7CisgICAgQVNTRVJUKHN0
YXRlID49IHRoaXMtPnN0YXRlKCkpOworICAgIG1fd2Vha0hhbmRsZU93bmVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxXZWFrSGFuZGxlT3duZXIqPigocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1f
d2Vha0hhbmRsZU93bmVyKSAmIH5TdGF0ZU1hc2spIHwgc3RhdGUpOworfQorCitpbmxpbmUgY29u
c3QgSlNWYWx1ZSYgV2Vha0ltcGw6OmpzVmFsdWUoKQoreworICAgIHJldHVybiBtX2pzVmFsdWU7
Cit9CisKK2lubGluZSBXZWFrSGFuZGxlT3duZXIqIFdlYWtJbXBsOjp3ZWFrSGFuZGxlT3duZXIo
KQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtIYW5kbGVPd25lcio+KChyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxlT3duZXIpICYgflN0YXRlTWFzaykp
OworfQorCitpbmxpbmUgdm9pZCogV2Vha0ltcGw6OmNvbnRleHQoKQoreworICAgIHJldHVybiBt
X2NvbnRleHQ7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0ltcGw6OmFzV2Vha0ltcGwoSlNW
YWx1ZSogc2xvdCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXZWFrSW1wbCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNsb3QpICsgT0JKRUNUX09GRlNFVE9GKFdlYWtJbXBsLCBt
X2pzVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBXZWFrSW1w
bF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24g
MTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1NzUsNyArMzU3NSw3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5r
czo6aG9zdEZ1bmN0aW8KIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9u
U3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMpCiB7CiAgICAgSG9z
dEZ1bmN0aW9uU3R1Yk1hcDo6QWRkUmVzdWx0IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFw
LT5hZGQoZnVuY3Rpb24sIFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCkpOwotICAgIGlmICgh
KmVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQpIHsKKyAgICBpZiAoIWVudHJ5Lml0ZXJhdG9yLT5zZWNv
bmQpIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGU7CiAgICAgICAgIGlmIChn
ZW5lcmF0b3IpIHsKICAgICAgICAgICAgIGlmIChnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUxLDcgKzM1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFRvLCB0eXBlbmFtZSBGcm9tPgogICAgIGlubGluZSBUbyBqc0Nhc3QoRnJvbSogZnJvbSkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChmcm9tLT5pbmhlcml0cygmV1RGOjpSZW1vdmVQb2ludGVy
PFRvPjo6VHlwZTo6c19pbmZvKSk7CisgICAgICAgIEFTU0VSVCghZnJvbSB8fCBmcm9tLT5pbmhl
cml0cygmV1RGOjpSZW1vdmVQb2ludGVyPFRvPjo6VHlwZTo6c19pbmZvKSk7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUbz4oZnJvbSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDExMjU3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNyw3ICsxMDcsNyBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6
OmFkCiAgICAgICAgIC8vIFRoZXJlIGFscmVhZHkgaXMgYW4gZW50cnkhIC0gd2Ugc2hvdWxkIG9u
bHkgaGl0IHRoaXMgd2hlbiBkZXNwZWNpZnlpbmcuCiAgICAgICAgIEFTU0VSVChyZXN1bHQuaXRl
cmF0b3IuZ2V0KCkuc2Vjb25kLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKICAgICAgICAg
QVNTRVJUKCFzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOwotICAgICAgICBt
YXAoKS0+c2V0KHJlc3VsdC5pdGVyYXRvciwgc3RydWN0dXJlKTsKKyAgICAgICAgbWFwKCktPnNl
dChnbG9iYWxEYXRhLCByZXN1bHQuaXRlcmF0b3IuZ2V0KCkuZmlyc3QsIHN0cnVjdHVyZSk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNz
IEpTQ2VsbDsKIGNsYXNzIFN0cnVjdHVyZTsKIAogY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlIHsKQEAgLTgzLDEwICs4NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCk7Ci0gICAg
ICAgIGlmICghc2xvdCkKKyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSB0aGlzLT53ZWFrSW1wbCgp
OworICAgICAgICBpZiAoIWltcGwpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEhhbmRs
ZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgICAgIFdlYWtIZWFw
OjpkZWFsbG9jYXRlKGltcGwpOwogICAgIH0KIAogICAgIGlubGluZSB2b2lkIGFkZChKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqKTsKQEAgLTEwNSwxOCArMTA2LDE4IEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRyYW5zaXRpb25NYXAqPihtX2RhdGEpOwogICAg
IH0KIAotICAgIEhhbmRsZVNsb3Qgc2xvdCgpIGNvbnN0CisgICAgV2Vha0ltcGwqIHdlYWtJbXBs
KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKLSAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SGFuZGxlU2xvdD4obV9kYXRhICYgflVzaW5n
U2luZ2xlU2xvdEZsYWcpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXZWFrSW1w
bCo+KG1fZGF0YSAmIH5Vc2luZ1NpbmdsZVNsb3RGbGFnKTsKICAgICB9CiAKICAgICB2b2lkIHNl
dE1hcChUcmFuc2l0aW9uTWFwKiBtYXApCiAgICAgewogICAgICAgICBBU1NFUlQoaXNVc2luZ1Np
bmdsZVNsb3QoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoSGFuZGxlU2xvdCBzbG90ID0gdGhp
cy0+c2xvdCgpKQotICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxv
Y2F0ZShzbG90KTsKKyAgICAgICAgaWYgKFdlYWtJbXBsKiBpbXBsID0gdGhpcy0+d2Vha0ltcGwo
KSkKKyAgICAgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogCiAgICAgICAgIC8v
IFRoaXMgaW1wbGljaXRseSBjbGVhcnMgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2UncmUgdXNp
bmcgYSBzaW5nbGUgdHJhbnNpdGlvbgogICAgICAgICBtX2RhdGEgPSByZWludGVycHJldF9jYXN0
PGludHB0cl90PihtYXApOwpAQCAtMTI3LDkgKzEyOCw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0
dXJlKiBzaW5nbGVUcmFuc2l0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1Vz
aW5nU2luZ2xlU2xvdCgpKTsKLSAgICAgICAgaWYgKEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNs
b3QoKSkgewotICAgICAgICAgICAgaWYgKCpzbG90KQotICAgICAgICAgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KHNsb3QtPmFzQ2VsbCgpKTsKKyAgICAgICAgaWYg
KFdlYWtJbXBsKiBpbXBsID0gdGhpcy0+d2Vha0ltcGwoKSkgeworICAgICAgICAgICAgaWYgKGlt
cGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4oaW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xMzcsMTQgKzEzOCwxMCBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2V0U2luZ2xlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVXNp
bmdTaW5nbGVTbG90KCkpOwotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCk7
Ci0gICAgICAgIGlmICghc2xvdCkgewotICAgICAgICAgICAgc2xvdCA9IGdsb2JhbERhdGEuaGVh
cC5oYW5kbGVIZWFwKCktPmFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFw
Rm9yKHNsb3QpLT5tYWtlV2VhayhzbG90LCAwLCAwKTsKLSAgICAgICAgICAgIG1fZGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHNsb3QpIHwgVXNpbmdTaW5nbGVTbG90RmxhZzsKLSAg
ICAgICAgfQotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIo
c2xvdCwgcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihzdHJ1Y3R1cmUpKTsKLSAgICAgICAgKnNs
b3QgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChX
ZWFrSW1wbCogaW1wbCA9IHRoaXMtPndlYWtJbXBsKCkpCisgICAgICAgICAgICBXZWFrSGVhcDo6
ZGVhbGxvY2F0ZShpbXBsKTsKKyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSBnbG9iYWxEYXRhLmhl
YXAud2Vha0hlYXAoKS0+YWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihzdHJ1Y3R1
cmUpKTsKKyAgICAgICAgbV9kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW1wbCkg
fCBVc2luZ1NpbmdsZVNsb3RGbGFnOwogICAgIH0KIAogICAgIGludHB0cl90IG1fZGF0YTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCShyZXZpc2lvbiAx
MTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBjbGFzcyBXZWFrR0NNYXAgOiBwcml2YXRlIFdl
YWtIYW5kbGVPd25lCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoV2Vha0dDTWFwKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlUeXBlLCBI
YW5kbGVTbG90LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IE1hcFR5cGU7CisgICAgdHlwZWRlZiBI
YXNoTWFwPEtleVR5cGUsIFdlYWtJbXBsKiwgSGFzaEFyZywgS2V5VHJhaXRzQXJnPiBNYXBUeXBl
OwogICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OkV4dGVybmFs
VHlwZSBFeHRlcm5hbFR5cGU7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRv
ciBtYXBfaXRlcmF0b3I7CiAKQEAgLTY0LDggKzY0LDcgQEAgcHVibGljOgogICAgICAgICB7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5
cGU+IGdldCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0
LCBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QobV9pdGVyYXRvci0+c2Vjb25k
KSk7IH0KLSAgICAgICAgc3RkOjpwYWlyPEtleVR5cGUsIEhhbmRsZVNsb3Q+IGdldFNsb3QoKSBj
b25zdCB7IHJldHVybiAqbV9pdGVyYXRvcjsgfQorICAgICAgICBzdGQ6OnBhaXI8S2V5VHlwZSwg
RXh0ZXJuYWxUeXBlPiBnZXQoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihtX2l0ZXJh
dG9yLT5maXJzdCwgSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21TbG90KGNvbnN0X2Nh
c3Q8SlNWYWx1ZSo+KCZtX2l0ZXJhdG9yLT5zZWNvbmQtPmpzVmFsdWUoKSkpKTsgfQogICAgICAg
ICAKICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7ICsrbV9pdGVyYXRvcjsgcmV0dXJu
ICp0aGlzOyB9CiAgICAgICAgIApAQCAtOTAsNyArODksNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBtYXBfaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAgICAgIGZvciAobWFwX2l0
ZXJhdG9yIHB0ciA9IG1fbWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAg
ICAgSGFuZGxlSGVhcDo6aGVhcEZvcihwdHItPnNlY29uZCktPmRlYWxsb2NhdGUocHRyLT5zZWNv
bmQpOworICAgICAgICAgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUocHRyLT5zZWNvbmQpOwogICAg
ICAgICBtX21hcC5jbGVhcigpOwogICAgIH0KIApAQCAtMTA3LDY0ICsxMDYsNDIgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQo
aXRlci5tX2l0ZXJhdG9yICE9IG1fbWFwLmVuZCgpKTsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90
ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgICAgIEFTU0VSVChzbG90KTsKLSAgICAg
ICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShzbG90KTsKKyAgICAgICAg
V2Vha0ltcGwqIGltcGwgPSBpdGVyLm1faXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQVNTRVJU
KGltcGwpOworICAgICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShpbXBsKTsKICAgICAgICAgbV9t
YXAucmVtb3ZlKGl0ZXIubV9pdGVyYXRvcik7CiAgICAgfQogCiAgICAgRXh0ZXJuYWxUeXBlIGdl
dChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gSGFuZGxl
VHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21TbG90KG1fbWFwLmdldChrZXkpKTsKLSAgICB9Ci0K
LSAgICBIYW5kbGVTbG90IGdldFNsb3QoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fbWFwLmdldChrZXkpOworICAgICAgICByZXR1cm4gSGFuZGxlVHlw
ZXM8TWFwcGVkVHlwZT46OmdldEZyb21TbG90KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KCZtX21hcC5n
ZXQoa2V5KS0+anNWYWx1ZSgpKSk7CiAgICAgfQogCiAgICAgQWRkUmVzdWx0IGFkZChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEtleVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVl
KQogICAgIHsKICAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1f
bWFwLmFkZChrZXksIDApOwotICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGdsb2JhbERhdGEuaGVhcC5oYW5kbGVIZWFwKCktPmFs
bG9jYXRlKCk7Ci0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHNsb3Q7Ci0g
ICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5tYWtlV2VhayhzbG90LCB0aGlz
LCBGaW5hbGl6ZXJDYWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKLSAgICAgICAg
ICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihzbG90LCB2YWx1ZSk7
Ci0gICAgICAgICAgICAqc2xvdCA9IHZhbHVlOwotICAgICAgICB9CisgICAgICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gZ2xv
YmFsRGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJD
YWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKKwogICAgICAgICAvLyBXZWFrR0NN
YXAgZXhwb3NlcyBhIGRpZmZlcmVudCBpdGVyYXRvciwgc28gd2UgbmVlZCB0byB3cmFwIGl0IGFu
ZCBjcmVhdGUgb3VyIG93biBBZGRSZXN1bHQuCiAgICAgICAgIHJldHVybiBBZGRSZXN1bHQoaXRl
cmF0b3IocmVzdWx0Lml0ZXJhdG9yKSwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0KLSAgICAK
LSAgICB2b2lkIHNldChpdGVyYXRvciBpdGVyLCBFeHRlcm5hbFR5cGUgdmFsdWUpCi0gICAgewot
ICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSBpdGVyLm1faXRlcmF0b3ItPnNlY29uZDsKLSAgICAg
ICAgQVNTRVJUKHNsb3QpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0
ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwotICAgICAgICAqc2xvdCA9IHZhbHVlOwotICAgIH0KIAog
ICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgS2V5VHlwZSYga2V5
LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAgewogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpB
ZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7Ci0gICAgICAgIEhhbmRsZVNsb3Qg
c2xvdCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotICAgICAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkpIHsKLSAgICAgICAgICAgIHNsb3QgPSBnbG9iYWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgp
LT5hbGxvY2F0ZSgpOwotICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+bWFr
ZVdlYWsoc2xvdCwgdGhpcywga2V5KTsKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kID0gc2xvdDsKLSAgICAgICAgfQotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3Qp
LT53cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwotICAgICAgICAqc2xvdCA9IHZhbHVlOworICAg
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgV2Vha0hlYXA6OmRlYWxs
b2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCA9IGdsb2JhbERhdGEuaGVhcC53ZWFrSGVhcCgpLT5hbGxvY2F0ZSh2YWx1ZSwgdGhp
cywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7CiAgICAgfQog
CiAgICAgRXh0ZXJuYWxUeXBlIHRha2UoY29uc3QgS2V5VHlwZSYga2V5KQogICAgIHsKLSAgICAg
ICAgSGFuZGxlU2xvdCBzbG90ID0gbV9tYXAudGFrZShrZXkpOwotICAgICAgICBpZiAoIXNsb3Qp
CisgICAgICAgIFdlYWtJbXBsKiBpbXBsID0gbV9tYXAudGFrZShrZXkpOworICAgICAgICBpZiAo
IWltcGwpCiAgICAgICAgICAgICByZXR1cm4gSGFzaFRyYWl0czxFeHRlcm5hbFR5cGU+OjplbXB0
eVZhbHVlKCk7Ci0gICAgICAgIEV4dGVybmFsVHlwZSByZXN1bHQgPSBIYW5kbGVUeXBlczxNYXBw
ZWRUeXBlPjo6Z2V0RnJvbVNsb3Qoc2xvdCk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Io
c2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgICAgIEV4dGVybmFsVHlwZSByZXN1bHQgPSBI
YW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4o
JmltcGwtPmpzVmFsdWUoKSkpOworICAgICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShpbXBsKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTE4MSw5ICsxNTgsOSBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0g
bV9tYXAudGFrZShGaW5hbGl6ZXJDYWxsYmFjazo6a2V5Rm9yRmluYWxpemVyKGNvbnRleHQsIEhh
bmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9tU2xvdChoYW5kbGUuc2xvdCgpKSkpOwotICAg
ICAgICBBU1NFUlQoc2xvdCk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRl
YWxsb2NhdGUoc2xvdCk7CisgICAgICAgIFdlYWtJbXBsKiBpbXBsID0gbV9tYXAudGFrZShGaW5h
bGl6ZXJDYWxsYmFjazo6a2V5Rm9yRmluYWxpemVyKGNvbnRleHQsIEhhbmRsZVR5cGVzPE1hcHBl
ZFR5cGU+OjpnZXRGcm9tU2xvdChoYW5kbGUuc2xvdCgpKSkpOworICAgICAgICBBU1NFUlQoaW1w
bCk7CisgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgIH0KIAogICAgIE1h
cFR5cGUgbV9tYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTI1ODcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxMi0w
My0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIEZpcnN0
IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgV2ViQ29yZSBmb3Ig
V2VhazxUPiBBUEkgY2hhbmdlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJX
b3JsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N0cmluZ093bmVyOjpmaW5hbGl6ZSk6IFdl
J3JlIG5vdCBhbGxvd2VkIHRvIGdldCgpIGEgZGVhZCBXZWFrPFQ+CisgICAgICAgIGFueW1vcmUs
IHNvIHVzZSB0aGUgZGVidWctb25seSB3YXMoKSBoZWxwZXIgZnVuY3Rpb24gaW5zdGVhZC4KKwor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6
dW5jYWNoZVdyYXBwZXIpOiBEaXR0by4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1
c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6c2V0SW5saW5lQ2FjaGVkV3JhcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjpjbGVhcklubGluZUNhY2hlZFdyYXBwZXIpOiBXZSdyZSBub3QgYWxsb3dl
ZCB0byBnZXQoKSBhIGRlYWQKKyAgICAgICAgV2VhazxUPiwgc28gSSBoYWQgdG8gcHVzaCBkb3du
IHRoZXNlIEFTU0VSVHMgaW50byBTY3JpcHRXcmFwcGFibGUuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2Rl
RmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKTogVXBkYXRlZCBmb3Igbm9uLUhhbmRsZS1uZXNz
CisgICAgICAgIG9mIFdlYWs8VD4uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRXcmFw
cGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFdyYXBwYWJsZTo6c2V0V3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRXcmFwcGFibGU6OmNsZWFyV3JhcHBlcik6IFVzZSB3
YXMoKSwgYXMgYWJvdmUuCisKIDIwMTItMDMtMjkgIEJlYXIgVHJhdmlzICA8YmV0cmF2aXNAYWRv
YmUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBDU1MgRXhjbHVzaW9uIHdyYXAtZmxvdyB2YWx1ZXMg
bGVmdCAmIHJpZ2h0IHRvIHN0YXJ0ICYgZW5kCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAgdm9pZCBKU1N0cmluZ093bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRs
ZQogewogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oaGFu
ZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RhdGlj
X2Nhc3Q8U3RyaW5nSW1wbCo+KGNvbnRleHQpOwotICAgIEFTU0VSVF9VTlVTRUQoanNTdHJpbmcs
IG1fd29ybGQtPm1fc3RyaW5nQ2FjaGUuZmluZChzdHJpbmdJbXBsKS0+c2Vjb25kLmdldCgpID09
IGpzU3RyaW5nKTsKKyAgICBBU1NFUlRfVU5VU0VEKGpzU3RyaW5nLCBtX3dvcmxkLT5tX3N0cmlu
Z0NhY2hlLmZpbmQoc3RyaW5nSW1wbCktPnNlY29uZC53YXMoanNTdHJpbmcpKTsKICAgICBtX3dv
cmxkLT5tX3N0cmluZ0NhY2hlLnJlbW92ZShzdHJpbmdJbXBsKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDExMjU3OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTAsNyArMTUwLDcgQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsKICAgICB7
CiAgICAgICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwg
d3JhcHBlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCh3b3JsZC0+bV93
cmFwcGVycy5maW5kKGRvbU9iamVjdCktPnNlY29uZC5nZXQoKSA9PSB3cmFwcGVyKTsKKyAgICAg
ICAgQVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJzLmZpbmQoZG9tT2JqZWN0KS0+c2Vjb25kLndhcyh3
cmFwcGVyKSk7CiAgICAgICAgIHdvcmxkLT5tX3dyYXBwZXJzLnJlbW92ZShkb21PYmplY3QpOwog
ICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3Rv
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3Rv
bS5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCBpbmxpbmUgYm9vbCBz
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyCiB7CiAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVCghbm9kZS0+d3JhcHBlcigpKTsK
ICAgICBub2RlLT5zZXRXcmFwcGVyKCp3b3JsZC0+Z2xvYmFsRGF0YSgpLCB3cmFwcGVyLCB3cmFw
cGVyT3duZXIod29ybGQsIG5vZGUpLCB3cmFwcGVyQ29udGV4dCh3b3JsZCwgbm9kZSkpOwogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtNTEsOCArNTAsNyBAQCBpbmxpbmUgYm9vbCBjbGVhcklubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NCiB7CiAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVF9VTlVTRUQod3JhcHBlciwgbm9kZS0+d3JhcHBl
cigpID09IHdyYXBwZXIpOwotICAgIG5vZGUtPmNsZWFyV3JhcHBlcigpOworICAgIG5vZGUtPmNs
ZWFyV3JhcHBlcih3cmFwcGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3Bw
CShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHNob3J0
IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSgKIHsKICAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCi0gICAgaWYgKCFtX2ZpbHRlci5pc09iamVjdCgpKQor
ICAgIGlmICghbV9maWx0ZXIgfHwgIW1fZmlsdGVyLT5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKIAogICAgLy8gVGhlIGV4ZWMgYXJndW1lbnQg
aGVyZSBzaG91bGQgb25seSBiZSBudWxsIGlmIHRoaXMgd2FzIGNhbGxlZCBmcm9tIGEKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTEgKzQ1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0V3JhcHBlcihKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNET01XcmFwcGVyKiB3
cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0
KQogICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3dyYXBwZXIpOwogICAgICAgICBtX3dyYXBwZXIg
PSBKU0M6OlBhc3NXZWFrPEpTRE9NV3JhcHBlcj4oZ2xvYmFsRGF0YSwgd3JhcHBlciwgd3JhcHBl
ck93bmVyLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyV3JhcHBlcigpCisgICAg
dm9pZCBjbGVhcldyYXBwZXIoSlNET01XcmFwcGVyKiB3cmFwcGVyKQogICAgIHsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRCh3cmFwcGVyLCBtX3dyYXBwZXIud2FzKHdyYXBwZXIpKTsKICAgICAgICAg
bV93cmFwcGVyLmNsZWFyKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTI1
ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgor
CisgICAgICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0
ZWQgZm9yIEFQSSBjaGFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2Jq
ZWN0TWFwOjpmaW5hbGl6ZSk6CisKIDIwMTItMDMtMjkgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJl
dmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIx
MTI1NTMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TlBSdW50aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24g
MTEyNTc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05Q
UnVudGltZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCB2
b2lkIE5QUnVudGltZU9iamVjdE1hcDo6ZmluYWxpemUoSlNDOjpICiB7CiAgICAgSGFzaE1hcDxO
UE9iamVjdCosIEpTQzo6V2VhazxKU05QT2JqZWN0PiA+OjppdGVyYXRvciBmb3VuZCA9IG1fanNO
UE9iamVjdHMuZmluZChzdGF0aWNfY2FzdDxOUE9iamVjdCo+KGNvbnRleHQpKTsKICAgICBBU1NF
UlQoZm91bmQgIT0gbV9qc05QT2JqZWN0cy5lbmQoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5k
bGUsIGFzT2JqZWN0KGhhbmRsZS5nZXQoKSkgPT0gZm91bmQtPnNlY29uZCk7CisgICAgQVNTRVJU
X1VOVVNFRChoYW5kbGUsIGFzT2JqZWN0KGhhbmRsZS5nZXQoKSkgPT0gZm91bmQtPnNlY29uZC5n
ZXQoKSk7CiAgICAgSlNOUE9iamVjdCogb2JqZWN0ID0gZm91bmQtPnNlY29uZC5nZXQoKTsKICAg
ICBtX2pzTlBPYmplY3RzLnJlbW92ZShmb3VuZCk7CiAgICAgYWRkVG9JbnZhbGlkYXRpb25RdWV1
ZShvYmplY3QtPmxlYWtOUE9iamVjdCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134848</attachid>
            <date>2012-03-30 11:38:52 -0700</date>
            <delta_ts>2012-03-30 15:10:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82670-20120330113852.patch</filename>
            <type>text/plain</type>
            <size>102543</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MiBA
QAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyBhIFdlYWs8VD4gaGVhcCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBpbmNyZW1l
bnRhbAorICAgICAgICBmaW5hbGl6YXRpb24sIHdoaWxlIG1ha2luZyBhcyBmZXcgYmVoYXZpb3Ig
Y2hhbmdlcyBhcyBwb3NzaWJsZS4gVGhlIGJlaGF2aW9yCisgICAgICAgIGNoYW5nZXMgaXQgbWFr
ZXMgYXJlOgorCisgICAgICAgICgqKSBXZWFrPFQ+J3MgcmF3IEpTVmFsdWUgbm8gbG9uZ2VyIHJl
dmVydHMgdG8gSlNWYWx1ZSgpIGF1dG9tYXRpY2FsbHkgLS0KKyAgICAgICAgaW5zdGVhZCwgYSBz
ZXBhcmF0ZSBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBKU1ZhbHVlIGlzIG5vIGxvbmdlciB2YWxp
ZC4KKyAgICAgICAgKFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgSlNWYWx1ZSBjYW4gYmUg
cHJlc2VydmVkIGZvciBsYXRlciBmaW5hbGl6YXRpb24uKQorICAgICAgICBPYmplY3RzIGRlYWxp
bmcgd2l0aCBXZWFrSW1wbHMgZGlyZWN0bHkgbXVzdCBjaGFuZ2UgdG8gY2hlY2sgdGhlIGZsYWcu
CisKKyAgICAgICAgKCopIFdlYWs8VD4gaXMgbm8gbG9uZ2VyIGEgc3ViY2xhc3Mgb2YgSGFuZGxl
PFQ+LgorCisgICAgICAgICgqKSBET00gR0MgcGVyZm9ybWFuY2UgaXMgZGlmZmVyZW50IC0tIDkl
IGZhc3RlciBpbiB0aGUgZ2VvbWV0cmljIG1lYW4sCisgICAgICAgIGJ1dCAxNSUgc2xvd2VyIGlu
IG9uZSBzcGVjaWZpYyBjYXNlOgorICAgICAgICAgICAgICAgIGdjLWRvbTEuaHRtbDogNiUgIGZh
c3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTIuaHRtbDogMjMlIGZhc3RlcgorICAgICAgICAg
ICAgICAgIGdjLWRvbTMuaHRtbDogMTclIGZhc3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTQu
aHRtbDogMTUlICpzbG93ZXIqCisKKyAgICAgICAgVGhlIGtleSBmZWF0dXJlcyBvZiB0aGlzIG5l
dyBoZWFwIGFyZToKKworICAgICAgICAoKikgRWFjaCBibG9jayBrbm93cyBpdHMgb3duIHN0YXRl
LCBpbmRlcGVuZGVudCBvZiBhbnkgb3RoZXIgYmxvY2tzLgorCisgICAgICAgICgqKSBFYWNoIGJs
b2NrIGNhY2hlcyBpdHMgb3duIHN3ZWVwIHJlc3VsdC4KKworICAgICAgICAoKikgVGhlIGhlYXAg
dmlzaXRzIGRlYWQgV2VhazxUPnMgYXQgdGhlIGVuZCBvZiBHQy4gKEl0IGRvZXNuJ3QKKyAgICAg
ICAgbWFyayB0aGVtIHlldCwgc2luY2UgdGhhdCB3b3VsZCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4p
CisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tPYmplY3REYXRhOjpmaW5hbGl6ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Ojppbml0KTogVXBkYXRlZCB0byB1c2Ug
dGhlIG5ldyBXZWFrSGVhcCBBUEkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6IFBhaWQgdGhlIGJ1aWxkIHN5c3RlbSB0
YXggc2luY2UgSSBhZGRlZCBzb21lIG5ldyBmaWxlcy4KKworICAgICAgICAqIGhlYXAvSGFuZGxl
Lmg6IE1hZGUgV2Vha0Jsb2NrIGEgZnJpZW5kIGFuZCBleHBvc2VkIHNsb3QoKSBhcyBwdWJsaWMs
CisgICAgICAgIHNvIHdlIGNhbiBrZWVwIHBhc3NpbmcgYSBIYW5kbGU8VD4gdG8gZmluYWxpemVy
cywgdG8gYXZvaWQgbW9yZSBzdXJmYWNlCisgICAgICAgIGFyZWEgY2hhbmdlIGluIHRoaXMgcGF0
Y2guIEEgZm9sbG93LXVwIHBhdGNoIHNob3VsZCBjaGFuZ2UgdGhlIHR5cGUgd2UKKyAgICAgICAg
cGFzcyB0byBmaW5hbGl6ZXJzLgorCisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmNwcDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OndyaXRlQmFycmllcik6Cisg
ICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUpOgorICAgICAgICAqIGhlYXAvSGFu
ZGxlSGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZUhlYXApOgorICAgICAg
ICAoTm9kZSk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUpOiBSZW1vdmVk
IGFsbCBjb2RlIHJlbGF0ZWQgdG8gV2VhazxUPiwgc2luY2UKKyAgICAgICAgd2UgaGF2ZSBhIHNl
cGFyYXRlIFdlYWtIZWFwIG5vdy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OkhlYXApOiBSZW1vdmVkIG1fZXh0cmFDb3N0IGJlY2F1c2UgZXh0cmEgY29z
dCBpcyBhY2NvdW50ZWQKKyAgICAgICAgZm9yIHRocm91Z2ggb3VyIHdhdGVybWFyayBub3cuIFJl
bW92ZWQgbV93YXRlck1hcmsgYmVjYXVzZSBpdCB3YXMgdW51c2VkLgorCisgICAgICAgIChKU0M6
OkhlYXA6OmRlc3Ryb3kpOiBVcGRhdGVkIGZvciBhZGRpdGlvbiBvZiBXZWFrSGVhcC4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZSk6IENoYW5nZWQg
ZnJvbSB1c2luZyBpdHMgb3duCisgICAgICAgIHZhcmlhYmxlIHRvIHBhcnRpY2lwYXRpbmcgaW4g
dGhlIHdhdGVybWFyayBzdHJhdGVneS4gSSB3YW50ZWQgdG8gc3RhbmRhcmRpemUKKyAgICAgICAg
V2Vha0hlYXAgYW5kIGFsbCBvdGhlciBIZWFwIGNsaWVudHMgb24gdGhpcyBzdHJhdGVneSwgdG8g
bWFrZSBzdXJlIGl0J3MKKyAgICAgICAgYWNjdXJhdGUuCisgCisgICAgICAgIChKU0M6OkhlYXA6
Om1hcmtSb290cyk6IFVwZGF0ZWQgZm9yIGFkZGl0aW9uIG9mIFdlYWtIZWFwLiBBZGRlZCBXZWFr
SGVhcAorICAgICAgICBkZWFkIHZpc2l0IHBhc3MsIGFzIGV4cGxhaW5lZCBhYm92ZS4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVzZXRBbGxv
Y2F0b3JzKTogVXBkYXRlZCBmb3IgYWRkaXRpb24gb2YgV2Vha0hlYXAuCisKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6RmluYWxpemVyT3du
ZXI6OmZpbmFsaXplKTogVXBkYXRlZCBmb3IgbmV3IFdlYWs8VD4gQVBJLgorCisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndlYWtIZWFwKToKKyAgICAgICAgKEhl
YXApOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1dhdGVyTWFyayk6IEFkZGVkIGEgd2F5IHRv
IHBhcnRpY2lwYXRlIGluIHRoZSB3YXRlcm1hcmtpbmcKKyAgICAgICAgc3RyYXRlZ3ksIHNpbmNl
IHRoaXMgaXMgdGhlIGJlc3Qgd2F5IGZvciBXZWFrSGVhcCB0byByZXBvcnQgaXRzIG1lbW9yeQor
ICAgICAgICBjb3N0LiAoSSBwbGFuIHRvIHVwZGF0ZSB0aGlzIGluIGEgZm9sbG93LXVwIHBhdGNo
IHRvIG1ha2UgaXQgbW9yZSBhY2N1cmF0ZSwKKyAgICAgICAgYnV0IGZvciBub3cgaXQgaXMgbm90
IGxlc3MgYWNjdXJhdGUgdGhhbiBpdCB1c2VkIHRvIGJlLikKKworICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjphZGRUb1dhdGVyTWFyayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpkaWRDb25zdW1lRnJlZUxpc3QpOiBSZW1vdmVkIG1fbnVyc2VyeVdhdGVyTWFyayBiZWNhdXNl
CisgICAgICAgIGl0IHdhcyB1bnVzZWQsIGFuZCBJIGRpZG4ndCB3YW50IHRvIHVwZGF0ZSBXZWFr
SGVhcCB0byBrZWVwIGFuIHVzdXNlZAorICAgICAgICB2YXJpYWJsZSB3b3JraW5nLiBBZGRlZCBB
UEkgZm9yIGFib3ZlLgorCisgICAgICAgICogaGVhcC9QYXNzV2Vhay5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKFdlYWtJbXBsQWNjZXNzb3IpOgorICAgICAgICAoUGFzc1dlYWspOgorICAg
ICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6OjpnZXQpOgorICAgICAgICAo
SlNDOjo6Ondhcyk6CisgICAgICAgIChKU0M6Ojo6UGFzc1dlYWspOgorICAgICAgICAoSlNDOjo6
On5QYXNzV2Vhayk6CisgICAgICAgIChKU0M6OlVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAg
ICAoSlNDOjo6OmxlYWtJbXBsKToKKyAgICAgICAgKEpTQzo6YWRvcHRXZWFrKToKKyAgICAgICAg
KiBoZWFwL1N0cm9uZy5oOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yISk6CisgICAg
ICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKToKKyAgICAgICAgKEpTQzo6U3Ryb25nOjpnZXQpOgorICAgICAgICAqIGhlYXAv
V2Vhay5oOgorICAgICAgICAoV2Vhayk6CisgICAgICAgIChKU0M6Ojo6V2Vhayk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjo6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6Ojp+V2Vhayk6CisgICAgICAgIChKU0M6Ojo6c3dhcCk6CisgICAgICAgIChKU0M6
Oj0pOgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6VW5zcGVjaWZp
ZWRCb29sVHlwZSk6CisgICAgICAgIChKU0M6Ojo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6Ojo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjo6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IExvdHMgb2Yg
Y29kZSBjaGFuZ2VzIGhlcmUsIGJ1dCB0aGV5IGJvaWwKKyAgICAgICAgZG93biB0byB0d28gdGhp
bmdzOgorCisgICAgICAgICgqKSBBbGxvY2F0ZSBXZWFrSW1wbHMgZnJvbSB0aGUgV2Vha0hlYXAg
aW5zdGVhZCBvZiBIYW5kbGVzIGZyb20gdGhlIEhhbmRsZUhlYXAuCisKKyAgICAgICAgKCopIEV4
cGxpY2l0bHkgY2hlY2sgV2Vha0ltcGw6OnN0YXRlKCkgZm9yIG5vbi1saXZlbmVzcyBiZWZvcmUg
cmV0dXJuaW5nCisgICAgICAgIGEgdmFsdWUgKGV4cGxhaW5lZCBhYm92ZSkuCisKKyAgICAgICAg
VGhlc2UgZmlsZXMgaW1wbGVtZW50IHRoZSBuZXcgV2VhazxUPiBoZWFwIGJlaGF2aW9yIGRlc2Ny
aWJlZCBhYm92ZToKKworICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDogQWRkZWQuCisgICAg
ICAgICogaGVhcC9XZWFrQmxvY2suaDogQWRkZWQuCisgICAgICAgICogaGVhcC9XZWFrSGFuZGxl
T3duZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIYW5kbGVPd25lci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIZWFwLmNwcDogQWRkZWQuCisgICAgICAgICogaGVhcC9X
ZWFrSGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtJbXBsLmg6IEFkZGVkLgorCisg
ICAgICAgIE9uZSBpbnRlcmVzdGluZyBkaWZmZXJlbmNlIGZyb20gdGhlIG9sZCBoZWFwIGlzIHRo
YXQgd2UgZG9uJ3QgYWxsb3cKKyAgICAgICAgY2xpZW50cyB0byBvdmVyd3JpdGUgYSBXZWFrSW1w
bCBhZnRlciBhbGxvY2F0aW5nIGl0LCBhbmQgd2UgZG9uJ3QgcmVjeWNsZQorICAgICAgICBXZWFr
SW1wbHMgcHJpb3IgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBs
YXp5IGZpbmFsaXphdGlvbiwKKyAgICAgICAgYnV0IGl0IHdpbGwgYWxzbyBoZWxwIHVzIGVzYWJs
aXNoIGEgdXNlZnVsIGludmFyaWFudCBpbiB0aGUgZnV0dXJlOiBhbGxvY2F0aW5nCisgICAgICAg
IGEgV2Vha0ltcGwgd2lsbCBiZSBhIGJpbmRpbmcgY29udHJhY3QgdG8gcnVuIGEgZmluYWxpemVy
IGF0IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgIGZ1dHVyZSwgZXZlbiBpZiB0aGUgV2Vha0lt
cGwgaXMgbGF0ZXIgZGVhbGxvY2F0ZWQuCisKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOiBDaGVjayB0aGUgV2Vh
azxUPiBmb3IgISBpbnN0ZWFkIG9mCisgICAgICAgIGl0cyBKU1ZhbHVlLCBzaW5jZSB0aGF0J3Mg
b3VyIEFQSSBjb250cmFjdCBub3csIGFuZCB0aGUgSlNWYWx1ZSBtaWdodAorICAgICAgICBiZSBz
dGFsZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OmpzQ2Fz
dCk6IEFsbG93IGNhc3RpbmcgTlVMTCBwb2ludGVycyBiZWNhdXNlIGl0J3MgdXNlZnVsIGFuZCBo
YXJtbGVzcy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOiBJIGNhbid0IHJlbWVtYmVyIHdoeSBJ
IGRpZCB0aGlzLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOiBJIGhhZCB0byB1cGRhdGUgdGhlc2Ug
Y2xhc3NlcyBiZWNhdXNlIHRoZXkgYWxsb2NhdGUKKyAgICAgICAgYW5kIGRlYWxsb2NhdGUgd2Vh
ayBwb2ludGVycyBtYW51YWxseS4gVGhleSBzaG91bGQgcHJvYmFibHkgc3RvcCBkb2luZyB0aGF0
LgorCiAyMDEyLTAzLTI5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeCBwMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDE5IEBAIFNF
VChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwCisgICAgaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCi0gICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSGVhcC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAg
ICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcAogICAg
IGhlYXAvTWFya2VkU3BhY2UuY3BwCi0gICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAg
ICBoZWFwL01hcmtTdGFjay5jcHAKKyAgICBoZWFwL1dlYWtIZWFwLmNwcAorICAgIGhlYXAvV2Vh
a0hhbmRsZU93bmVyLmNwcAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogCiAgICAgZGVidWdnZXIv
RGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAsNiArMjUwLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFwLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDYgKzIxNyw5IEBACiAgICAgICAgICAgICAnYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAnLAogICAgICAgICAgICAgJ2J5dGVjb21waWxlci9SZWdpc3RlcklELmgnLAogICAgICAgICAg
ICAgJ2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwJywKKyAgICAgICAgICAgICdoZWFwL1dlYWtI
ZWFwLmNwcCcsCisgICAgICAgICAgICAnaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwJywKKyAgICAg
ICAgICAgICdoZWFwL1dlYWtCbG9jay5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlSGVh
cC5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlU3RhY2suY3BwJywKICAgICAgICAgICAg
ICdoZWFwL0hlYXAuY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0NvcGllZFNwYWNl
LmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAogICAgIGhlYXAvREZHQ29k
ZUJsb2Nrcy5jcHAgXAorICAgIGhlYXAvV2Vha0hlYXAuY3BwIFwKKyAgICBoZWFwL1dlYWtIYW5k
bGVPd25lci5jcHAgXAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVI
ZWFwLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw3IEBAIHZvaWQgSlND
YWxsYmFja09iamVjdERhdGE6OmZpbmFsaXplKEhhbmQKICAgICBmb3IgKDsganNDbGFzczsganND
bGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKQogICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6
ZUNhbGxiYWNrIGZpbmFsaXplID0ganNDbGFzcy0+ZmluYWxpemUpCiAgICAgICAgICAgICBmaW5h
bGl6ZSh0aGlzUmVmKTsKLSAgICBIYW5kbGVTbG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwotICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgV2Vha0hl
YXA6OmRlYWxsb2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQog
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTEyNTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNCArMTAyLDExIEBAIHZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojppbml0KEV4ZWMKICAgICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwg
dG9SZWYodGhpcykpOwogICAgIH0KIAotICAgIGJvb2wgbmVlZHNGaW5hbGl6ZXIgPSBmYWxzZTsK
LSAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHIg
JiYgIW5lZWRzRmluYWxpemVyOyBqc0NsYXNzUHRyID0ganNDbGFzc1B0ci0+cGFyZW50Q2xhc3Mp
Ci0gICAgICAgIG5lZWRzRmluYWxpemVyID0ganNDbGFzc1B0ci0+ZmluYWxpemU7Ci0gICAgaWYg
KG5lZWRzRmluYWxpemVyKSB7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGV4ZWMtPmdsb2Jh
bERhdGEoKS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0
KCksIGNsYXNzUmVmKCkpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0
ZUJhcnJpZXIoc2xvdCwgdGhpcyk7Ci0gICAgICAgICpzbG90ID0gdGhpczsKKyAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHI7IGpzQ2xhc3NQdHIg
PSBqc0NsYXNzUHRyLT5wYXJlbnRDbGFzcykgeworICAgICAgICBpZiAoanNDbGFzc1B0ci0+Zmlu
YWxpemUpIHsKKyAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLndlYWtIZWFwKCkt
PmFsbG9jYXRlKHRoaXMsIG1fY2FsbGJhY2tPYmplY3REYXRhLmdldCgpLCBjbGFzc1JlZigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNp
b24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTUs
OSArNSw5IEBAIEVYUE9SVFMKICAgICA/PyRzdHJ0b2RAJDBBQCQwMEBXVEZAQFlBTlBCRFBBUEFE
QFoKICAgICA/PyRzdHJ0b2RAJDBBQCQwQUBAV1RGQEBZQU5QQkRQQVBBREBaCiAgICAgPz8wQXJy
YXlCdWZmZXJWaWV3QFdURkBASUFFQFY/JFBhc3NSZWZQdHJAVkFycmF5QnVmZmVyQFdURkBAQDFA
SUBaCisgICAgPz8wQ29sbGF0b3JAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBA
UUFFQFBCREBaCiAgICAgPz8wQ1N0cmluZ0BXVEZAQFFBRUBQQkRJQFoKLSAgICA/PzBDb2xsYXRv
ckBXVEZAQFFBRUBQQkRAWgogICAgID8/MERhdGVJbnN0YW5jZUBKU0NAQElBRUBQQVZFeGVjU3Rh
dGVAMUBQQVZTdHJ1Y3R1cmVAMUBAWgogICAgID8/MERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2tA
SlNDQEBRQUVAUEFWSGVhcEAxQEBaCiAgICAgPz8wRHJvcEFsbExvY2tzQEpTTG9ja0BKU0NAQFFB
RUBXNEpTTG9ja0JlaGF2aW9yQDJAQFoKQEAgLTI1LDEwICsyNSwxMCBAQCBFWFBPUlRTCiAgICAg
Pz8wU3RyaW5nT2JqZWN0QEpTQ0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAx
QEBaCiAgICAgPz8wU3RydWN0dXJlQEpTQ0BAQUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVkpTR2xv
YmFsT2JqZWN0QDFAVkpTVmFsdWVAMUBBQlZUeXBlSW5mb0AxQFBCVUNsYXNzSW5mb0AxQEBaCiAg
ICAgPz8wVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFQFhaCi0gICAgPz8wVVN0cmluZ0BKU0NAQFFB
RUBQQkRAWgotICAgID8/MFVTdHJpbmdASlNDQEBRQUVAUEJESUBaCiAgICAgPz8wVVN0cmluZ0BK
U0NAQFFBRUBQQl9XQFoKICAgICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCX1dJQFoKKyAgICA/PzBV
U3RyaW5nQEpTQ0BAUUFFQFBCREBaCisgICAgPz8wVVN0cmluZ0BKU0NAQFFBRUBQQkRJQFoKICAg
ICA/PzBXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCiAgICAgPz8wWWFyclBhdHRlcm5AWWFyckBK
U0NAQFFBRUBBQlZVU3RyaW5nQDJAX04xUEFQQkRAWgogICAgID8/MUFycmF5QnVmZmVyVmlld0BX
VEZAQFVBRUBYWgpAQCAtNDIsMTUgKzQyLDEwIEBAIEVYUE9SVFMKICAgICA/PzFSZWZDb3VudGVk
TGVha0NvdW50ZXJAV1RGQEBRQUVAWFoKICAgICA/PzFTb3VyY2VQcm92aWRlckNhY2hlQEpTQ0BA
UUFFQFhaCiAgICAgPz8xVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFQFhaCi0gICAgPz8xV1RGVGhy
ZWFkRGF0YUBXVEZAQFFBRUBYWgogICAgID8/MVdlYWtIYW5kbGVPd25lckBKU0NAQFVBRUBYWgor
ICAgID8/MVdURlRocmVhZERhdGFAV1RGQEBRQUVAWFoKICAgICA/PzhKU0NAQFlBX05BQlZVU3Ry
aW5nQDBAMEBaCiAgICAgPz84V1RGQEBZQV9OQUJWQ1N0cmluZ0AwQDBAWgotICAgID9FY21hU2Ny
aXB0Q29udmVydGVyQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdU
RkBAU0FBQlYxMjNAWFoKLSAgICA/VG9FeHBvbmVudGlhbEBEb3VibGVUb1N0cmluZ0NvbnZlcnRl
ckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCi0g
ICAgP1RvRml4ZWRARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RG
QEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgotICAgID9Ub1ByZWNpc2lvbkBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJpbmdC
dWlsZGVyQDIzQEBaCi0gICAgP1RvU2hvcnRlc3RARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91
YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5QQVZTdHJpbmdCdWlsZGVyQDIzQEBaCiAgICAgP2Fi
c29sdXRlVGltZVRvV2FpdFRpbWVvdXRJbnRlcnZhbEBXVEZAQFlBS05AWgogICAgID9hY3Rpdml0
eUNhbGxiYWNrQEhlYXBASlNDQEBRQUVQQVZHQ0FjdGl2aXR5Q2FsbGJhY2tAMkBYWgogICAgID9h
ZGRAQXRvbWljU3RyaW5nQFdURkBAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBA
MkBQQkRAWgpAQCAtNjksOCArNjQsOCBAQCBFWFBPUlRTCiAgICAgP2FkZFN0YXRpY0dsb2JhbHNA
SlNHbG9iYWxPYmplY3RASlNDQEBJQUVYUEFVR2xvYmFsUHJvcGVydHlJbmZvQDEyQEhAWgogICAg
ID9hbGxvY2F0ZVByb3BlcnR5U3RvcmFnZUBKU09iamVjdEBKU0NAQFFBRVhBQVZKU0dsb2JhbERh
dGFAMkBJSUBaCiAgICAgP2FsbG9jYXRlU2xvd0Nhc2VATWFya2VkQWxsb2NhdG9yQEpTQ0BAQUFF
UEFYWFoKLSAgICA/YXBwZW5kQFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYUEJFSUBaCiAgICAgP2Fw
cGVuZEBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWFBCX1dJQFoKKyAgICA/YXBwZW5kQFN0cmluZ0J1
aWxkZXJAV1RGQEBRQUVYUEJFSUBaCiAgICAgP2FzY2lpQFVTdHJpbmdASlNDQEBRQkU/QVZDU3Ry
aW5nQFdURkBAWFoKICAgICA/YXR0YWNoQERlYnVnZ2VyQEpTQ0BAUUFFWFBBVkpTR2xvYmFsT2Jq
ZWN0QDJAQFoKICAgICA/YnJvYWRjYXN0QFRocmVhZENvbmRpdGlvbkBXVEZAQFFBRVhYWgpAQCAt
NzgsMTAgKzczLDEwIEBAIEVYUE9SVFMKICAgICA/YnVmZmVyTGVuZ3RoRm9yU3RyaW5nRXhwb25l
bnRpYWxARGVjaW1hbE51bWJlckBXVEZAQFFCRUlYWgogICAgID9ieXRlQ29tcGlsZUBZYXJyQEpT
Q0BAWUE/QVY/JFBhc3NPd25QdHJAVUJ5dGVjb2RlUGF0dGVybkBZYXJyQEpTQ0BAQFdURkBAQUFV
WWFyclBhdHRlcm5AMTJAUEFWQnVtcFBvaW50ZXJBbGxvY2F0b3JANEBAWgogICAgID9ieXRlU2l6
ZUBTb3VyY2VQcm92aWRlckNhY2hlQEpTQ0BAUUJFSVhaCisgICAgP2NhbGN1bGF0ZWRGdW5jdGlv
bk5hbWVARGVidWdnZXJDYWxsRnJhbWVASlNDQEBRQkU/QVZVU3RyaW5nQDJAWFoKICAgICA/Y2Fs
Y3VsYXRlRFNUT2Zmc2V0QFdURkBAWUFOTk5AWgogICAgID9jYWxjdWxhdGVTdHJpbmdIYXNoQW5k
TGVuZ3RoRnJvbVVURjhAVW5pY29kZUBXVEZAQFlBSVBCRDBBQUkxQFoKICAgICA/Y2FsY3VsYXRl
VVRDT2Zmc2V0QFdURkBAWUFIWFoKLSAgICA/Y2FsY3VsYXRlZEZ1bmN0aW9uTmFtZUBEZWJ1Z2dl
ckNhbGxGcmFtZUBKU0NAQFFCRT9BVlVTdHJpbmdAMkBYWgogICAgID9jYWxsQEpTQ0BAWUE/QVZK
U1ZhbHVlQDFAUEFWRXhlY1N0YXRlQDFAVjIxQFc0Q2FsbFR5cGVAMUBBQlRDYWxsRGF0YUAxQDFB
QlZBcmdMaXN0QDFAQFoKICAgICA/Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3JASlNDQEBZ
SV9KUEFWRXhlY1N0YXRlQDFAQFoKICAgICA/Y2FsbE9uTWFpblRocmVhZEBXVEZAQFlBWFA2QVhQ
QVhAWjBAWgpAQCAtOTEsOCArODYsOCBAQCBFWFBPUlRTCiAgICAgP2NoYW5nZVByb3RvdHlwZVRy
YW5zaXRpb25AU3RydWN0dXJlQEpTQ0BAU0FQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBQQVYxMkBW
SlNWYWx1ZUAyQEBaCiAgICAgP2NoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZUBJZGVudGlmaWVy
QEpTQ0BAQ0FYUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/Y2hlY2tDdXJyZW50SWRlbnRpZmllclRh
YmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZKU0dsb2JhbERhdGFAMkBAWgotICAgID9jaGVja1N5
bnRheEBKU0NAQFlBX05QQVZFeGVjU3RhdGVAMUBBQlZTb3VyY2VDb2RlQDFAUEFWSlNWYWx1ZUAx
QEBaCiAgICAgP2NoZWNrc3VtQE1ENUBXVEZAQFFBRVhBQVY/JFZlY3RvckBFJDBCQUBAMkBAWgor
ICAgID9jaGVja1N5bnRheEBKU0NAQFlBX05QQVZFeGVjU3RhdGVAMUBBQlZTb3VyY2VDb2RlQDFA
UEFWSlNWYWx1ZUAxQEBaCiAgICAgP2NsYXNzTmFtZUBKU09iamVjdEBKU0NAQFNBP0FWVVN0cmlu
Z0AyQFBCVjEyQEBaCiAgICAgP2NsZWFyQFNvdXJjZVByb3ZpZGVyQ2FjaGVASlNDQEBRQUVYWFoK
ICAgICA/Y2xlYXJCdWlsdGluU3RydWN0dXJlc0BKU0dsb2JhbERhdGFASlNDQEBRQUVYWFoKQEAg
LTE2NCw2ICsxNTksNyBAQCBFWFBPUlRTCiAgICAgP2Rpc3BsYXlOYW1lQEpTRnVuY3Rpb25ASlND
QEBRQUU/QlZVU3RyaW5nQDJAUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/ZHRvYUBXVEZAQFlBWFFB
RE5BQV9OQUFIQUFJQFoKICAgICA/ZHVtcFNhbXBsZURhdGFASlNHbG9iYWxEYXRhQEpTQ0BAUUFF
WFBBVkV4ZWNTdGF0ZUAyQEBaCisgICAgP0VjbWFTY3JpcHRDb252ZXJ0ZXJARG91YmxlVG9TdHJp
bmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBTQUFCVjEyM0BYWgogICAgID9lbXB0
eUBTdHJpbmdJbXBsQFdURkBAU0FQQVYxMkBYWgogICAgID9lbnVtZXJhYmxlQFByb3BlcnR5RGVz
Y3JpcHRvckBKU0NAQFFCRV9OWFoKICAgICA/ZXF1YWxVVEYxNldpdGhVVEY4QFVuaWNvZGVAV1RG
QEBZQV9OUEJfVzBQQkQxQFoKQEAgLTE4Myw2ICsxNzksNyBAQCBFWFBPUlRTCiAgICAgP2Zhc3Ra
ZXJvZWRNYWxsb2NAV1RGQEBZQVBBWElAWgogICAgID9maWxsR2V0dGVyUHJvcGVydHlTbG90QEpT
T2JqZWN0QEpTQ0BAQUFFWEFBVlByb3BlcnR5U2xvdEAyQFBBVj8kV3JpdGVCYXJyaWVyQmFzZUBX
NFVua25vd25ASlNDQEBAMkBAWgogICAgID9maW5hbGl6ZUBXZWFrSGFuZGxlT3duZXJASlNDQEBV
QUVYVj8kSGFuZGxlQFc0VW5rbm93bkBKU0NAQEAyQFBBWEBaCisgICAgP2ZpbmRBbGxvY2F0b3JA
V2Vha0hlYXBASlNDQEBBQUVQQVVGcmVlQ2VsbEBXZWFrQmxvY2tAMkBYWgogICAgID9maW5pc2hD
cmVhdGlvbkBEYXRlSW5zdGFuY2VASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRhQDJATkBaCiAgICAg
P2ZpbmlzaENyZWF0aW9uQEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRh
QDJAQUJWSWRlbnRpZmllckAyQEBaCiAgICAgP2ZpbmlzaENyZWF0aW9uQEpTQXJyYXlASlNDQEBJ
QUVYQUFWSlNHbG9iYWxEYXRhQDJASUBaCkBAIC0yMjAsMTAgKzIxNywxMCBAQCBFWFBPUlRTCiAg
ICAgP2dsb2JhbEV4ZWNASlNHbG9iYWxPYmplY3RASlNDQEBRQUVQQVZFeGVjU3RhdGVAMkBYWgog
ICAgID9nbG9iYWxPYmplY3RDb3VudEBIZWFwQEpTQ0BAUUFFSVhaCiAgICAgP2dyb3dASGFuZGxl
SGVhcEBKU0NAQEFBRVhYWgorICAgID9oYXNoU2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRUlY
WgogICAgID9oYXNJbnN0YW5jZUBKU09iamVjdEBKU0NAQFNBX05QQVYxMkBQQVZFeGVjU3RhdGVA
MkBWSlNWYWx1ZUAyQDJAWgogICAgID9oYXNQcm9wZXJ0eUBKU09iamVjdEBKU0NAQFFCRV9OUEFW
RXhlY1N0YXRlQDJAQUJWSWRlbnRpZmllckAyQEBaCiAgICAgP2hhc1Byb3BlcnR5QEpTT2JqZWN0
QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBJQFoKLSAgICA/aGFzaFNsb3dDYXNlQFN0cmluZ0lt
cGxAV1RGQEBBQkVJWFoKICAgICA/aGVhcEBIZWFwQEpTQ0BAU0FQQVYxMkBWSlNWYWx1ZUAyQEBa
CiAgICAgP2luY3JlbWVudEBSZWZDb3VudGVkTGVha0NvdW50ZXJAV1RGQEBRQUVYWFoKICAgICA/
aW5pdEBBdG9taWNTdHJpbmdAV1RGQEBTQVhYWgpAQCAtMzExLDEwICszMDgsMTAgQEAgRVhQT1JU
UwogICAgID9zZXRPcmRlckxvd2VyRmlyc3RAQ29sbGF0b3JAV1RGQEBRQUVYX05AWgogICAgID9z
ZXRQcm90b3R5cGVASlNPYmplY3RASlNDQEBRQUVYQUFWSlNHbG9iYWxEYXRhQDJAVkpTVmFsdWVA
MkBAWgogICAgID9zZXRTZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUFFWFZKU1ZhbHVl
QDJAQFoKKyAgICA/c2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFCRT9BVkpTVmFsdWVA
MkBYWgogICAgID9zZXRVbmRlZmluZWRAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUFFWFhaCiAg
ICAgP3NldFVwU3RhdGljRnVuY3Rpb25TbG90QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0ZUAxQFBCVkhh
c2hFbnRyeUAxQFBBVkpTT2JqZWN0QDFAQUJWSWRlbnRpZmllckAxQEFBVlByb3BlcnR5U2xvdEAx
QEBaCiAgICAgP3NldFdyaXRhYmxlQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFBRVhfTkBaCi0g
ICAgP3NldHRlckBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQkU/QVZKU1ZhbHVlQDJAWFoKICAg
ICA/c2hyaW5rVG9GaXRAU3RyaW5nQnVpbGRlckBXVEZAQFFBRVhYWgogICAgID9zaWduYWxAVGhy
ZWFkQ29uZGl0aW9uQFdURkBAUUFFWFhaCiAgICAgP3NpbmdsZUNoYXJhY3RlclN0cmluZ1JlcEBT
bWFsbFN0cmluZ3NASlNDQEBRQUVQQVZTdHJpbmdJbXBsQFdURkBARUBaCkBAIC0zNDAsMTEgKzMz
NywxNSBAQCBFWFBPUlRTCiAgICAgP3Rsc0tleUNvdW50QFdURkBAWUFBQUpYWgogICAgID90bHNL
ZXlzQFdURkBAWUFQQUtYWgogICAgID90b0Jvb2xlYW5ASlNTdHJpbmdASlNDQEBRQkVfTlBBVkV4
ZWNTdGF0ZUAyQEBaCisgICAgP1RvRXhwb25lbnRpYWxARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJA
ZG91YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgorICAg
ID9Ub0ZpeGVkQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBA
UUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKICAgICA/dG9JbnQzMkBKU0NAQFlBSE5AWgog
ICAgID90b0ludGVnZXJASlNWYWx1ZUBKU0NAQFFCRU5QQVZFeGVjU3RhdGVAMkBAWgogICAgID90
b051bWJlclNsb3dDYXNlQEpTVmFsdWVASlNDQEBBQkVOUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/
dG9PYmplY3RASlNDZWxsQEpTQ0BAUUJFUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBQQVZK
U0dsb2JhbE9iamVjdEAyQEBaCiAgICAgP3RvT2JqZWN0U2xvd0Nhc2VASlNWYWx1ZUBKU0NAQEFC
RVBBVkpTT2JqZWN0QDJAUEFWRXhlY1N0YXRlQDJAUEFWSlNHbG9iYWxPYmplY3RAMkBAWgorICAg
ID9Ub1ByZWNpc2lvbkBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBX
VEZAQFFCRV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCisgICAgP1RvU2hvcnRlc3RARG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5QQVZTdHJpbmdC
dWlsZGVyQDIzQEBaCiAgICAgP3RvU3RyaW5nQEpTT2JqZWN0QEpTQ0BAUUJFUEFWSlNTdHJpbmdA
MkBQQVZFeGVjU3RhdGVAMkBAWgogICAgID90b1N0cmluZ0RlY2ltYWxARGVjaW1hbE51bWJlckBX
VEZAQFFCRUlQQV9XSUBaCiAgICAgP3RvU3RyaW5nRXhwb25lbnRpYWxARGVjaW1hbE51bWJlckBX
VEZAQFFCRUlQQV9XSUBaCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTIxMzAsNiArMjEzMCwzNCBAQAog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFw
XFdlYWtCbG9jay5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0Jsb2NrLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0hlYXAuY3BwIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtIZWFw
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcV2Vha0ltcGwuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrSGFuZGxlT3duZXIuY3BwIgorCQkJCT4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtIYW5kbGVPd25l
ci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwu
LlxoZWFwXEhhbmRsZVN0YWNrLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTMxMiw3ICszMTIsMTQgQEAKIAkJMTRDNTI0MkIwRjUzNTVFOTAwQkEzRDA0IC8q
IEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNEE2NTgxQTBGNEUzNkY0MDAwMTUwRkQgLyogSklUU3R1YnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEw
MzEgLyogTWFya2VkU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCAq
LzsgfTsKIAkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyRjNEOTEzOUY0QkUy
MDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2Nr
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0
Rjk5MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwICovOyB9OworCQkxNEU4NEY5RjE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNEU4NEY5QTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2Nr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRF
ODRGQTAxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlCMTRFRTFBQ0MwMEQ2RDVENCAvKiBX
ZWFrSGVhcC5jcHAgKi87IH07CisJCTE0RTg0RkExMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVh
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFODRG
OUMxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdl
YWtJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NEU4NEY5RDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEU5RDE3QjEwN0VDNDY5MDA0RERBMjEg
LyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcCAqLzsgfTsKKwkJMTRGNzI1NjUxNEVFMjY1RTAwQjE2NTJCIC8q
IFdlYWtIYW5kbGVPd25lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEY3MjU2MzE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmNw
cCAqLzsgfTsKKwkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRGNzI1NjQx
NEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAv
KiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0Rjk3NDQ2MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTM1OUNG
MzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBE
YXRlQ29udmVyc2lvbi5oICovOyB9OwogCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFy
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUxNTM5
QjgxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTI1LDcgKzkzMiwxNCBAQAogCQkxNERBODE4RTBEOTlG
RDIwMDBCMEE0RkIgLyogSlNBY3RpdmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQWN0aXZhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERB
ODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNBY3RpdmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0REUwRDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dsb2JhbE9iamVjdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVE
NCAvKiBXZWFrQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2Vha0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUExNEVF
MUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWFrQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUIx
NEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYWtIZWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MTRFODRGOUMxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYWtIZWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTE0RTg0RjlEMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNEYyNTI1NjBEMDhERDhEMDA0RUNGRkYgLyogSlNWYXJpYWJsZU9iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZhcmlhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTE0RjcyNTYzMTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxl
T3duZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0hhbmRs
ZU93bmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRGNzI1NjQxNEVFMjY1
RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWFrSGFuZGxlT3duZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwUm9vdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUM5MDUxNDIwQkE5RThBNzAwODFFOUQwIC8qIFZlcnNpb24ueGNjb25m
aWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEph
dmFTY3JpcHRDb3JlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEph
dmFTY3JpcHRDb3JlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2
OCw2ICsxNTgyLDEzIEBACiAJCQkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmNwcCAqLywKIAkJCQkwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3Bl
Y3RydW0uaCAqLywKIAkJCQkxNDJFMzEzMzEzNEZGMEE2MDBBRkFEQjUgLyogV2Vhay5oICovLAor
CQkJCTE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwICovLAorCQkJCTE0
RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCAqLywKKwkJCQkxNEY3MjU2MzE0
RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmNwcCAqLywKKwkJCQkxNEY3MjU2NDE0
RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggKi8sCisJCQkJMTRFODRGOUIxNEVF
MUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCAqLywKKwkJCQkxNEU4NEY5QzE0RUUxQUNDMDBE
NkQ1RDQgLyogV2Vha0hlYXAuaCAqLywKKwkJCQkxNEU4NEY5RDE0RUUxQUNDMDBENkQ1RDQgLyog
V2Vha0ltcGwuaCAqLywKIAkJCQkwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlci5oICovLAogCQkJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0
ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLywKIAkJCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5oICovLApAQCAtMjUwNSw2ICsyNTI2LDEwIEBACiAJCQkJMEZG
RkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDk3MjA5MTE0
RUI4MzE1MDBGRUIxQjcgLyogUGFzc1dlYWsuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RTg0RjlG
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RTg0
RkExMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRF
ODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQkx
NEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI1NDY3NzE0RjU5QjVDMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0
RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzA2MCw2ICszMDg1LDkgQEAKIAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29k
ZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkI5MTZDNTE0REEwNDBDMDBDQkFD
ODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUZDOEMzMTRF
MUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTE0RTg0RjlFMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMTRFODRGQTAxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTE0RjcyNTY1MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3du
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERG
R0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU5MTRFRjkwQTYwMEM3MjUz
MiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1QjE0RUY5MEFE
MDBDNzI1MzIgLyogREZHUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGUuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgcHVi
bGljOgogICAgIHR5cGVkZWYgSlNWYWx1ZSAoSGFuZGxlQmFzZTo6KlVuc3BlY2lmaWVkQm9vbFR5
cGUpOwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4g
KG1fc2xvdCAmJiAqbV9zbG90KSA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlw
ZSo+KDEpIDogMDsgfQogCisgICAgSGFuZGxlU2xvdCBzbG90KCkgY29uc3QgeyByZXR1cm4gbV9z
bG90OyB9CisKIHByb3RlY3RlZDoKICAgICBIYW5kbGVCYXNlKEhhbmRsZVNsb3Qgc2xvdCkKICAg
ICAgICAgOiBtX3Nsb3Qoc2xvdCkKQEAgLTY3LDcgKzY5LDYgQEAgcHJvdGVjdGVkOgogICAgIAog
ICAgIHZvaWQgc3dhcChIYW5kbGVCYXNlJiBvdGhlcikgeyBzdGQ6OnN3YXAobV9zbG90LCBvdGhl
ci5tX3Nsb3QpOyB9CiAKLSAgICBIYW5kbGVTbG90IHNsb3QoKSBjb25zdCB7IHJldHVybiBtX3Ns
b3Q7IH0KICAgICB2b2lkIHNldFNsb3QoSGFuZGxlU2xvdCBzbG90KQogICAgIHsKICAgICAgICAg
bV9zbG90ID0gc2xvdDsKQEAgLTEzMyw2ICsxMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVIZWFwOworICAgIGZyaWVuZCBjbGFzcyBXZWFr
QmxvY2s7CiAKICAgICBzdGF0aWMgSGFuZGxlPFQ+IHdyYXBTbG90KEhhbmRsZVNsb3Qgc2xvdCkK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAko
cmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVh
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE5ICszMSw2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1XZWFrSGFuZGxlT3duZXI6On5XZWFrSGFuZGxlT3duZXIoKQotewotfQotCi1ib29sIFdl
YWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+
LCB2b2lkKiwgU2xvdFZpc2l0b3ImKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBX
ZWFrSGFuZGxlT3duZXI6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCopCi17Ci19Ci0K
IEhhbmRsZUhlYXA6OkhhbmRsZUhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDog
bV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX25leHRUb0ZpbmFsaXplKDApCkBAIC03
Myw2MiArNjAsNiBAQCB2b2lkIEhhbmRsZUhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwCiAg
ICAgfQogfQogCi12b2lkIEhhbmRsZUhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNp
dG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17Ci0gICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSBoZWFw
Um9vdFZpc2l0b3IudmlzaXRvcigpOwotCi0gICAgTm9kZSogZW5kID0gbV93ZWFrTGlzdC5lbmQo
KTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX3dlYWtMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5k
OyBub2RlID0gbm9kZS0+bmV4dCgpKSB7Ci0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAg
ICAgIGlmICghaXNWYWxpZFdlYWtOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNl
bmRpZgotICAgICAgICBKU0NlbGwqIGNlbGwgPSBub2RlLT5zbG90KCktPmFzQ2VsbCgpOwotICAg
ICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBXZWFrSGFuZGxlT3duZXIqIHdlYWtPd25lciA9IG5vZGUtPndlYWtPd25lcigpOwot
ICAgICAgICBpZiAoIXdlYWtPd25lcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGlmICghd2Vha093bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93
bj46OndyYXBTbG90KG5vZGUtPnNsb3QoKSksIG5vZGUtPndlYWtPd25lckNvbnRleHQoKSwgdmlz
aXRvcikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBoZWFwUm9vdFZpc2l0b3Iu
dmlzaXQobm9kZS0+c2xvdCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgSGFuZGxlSGVhcDo6ZmluYWxp
emVXZWFrSGFuZGxlcygpCi17Ci0gICAgTm9kZSogZW5kID0gbV93ZWFrTGlzdC5lbmQoKTsKLSAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBtX3dlYWtMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2Rl
ID0gbV9uZXh0VG9GaW5hbGl6ZSkgewotICAgICAgICBtX25leHRUb0ZpbmFsaXplID0gbm9kZS0+
bmV4dCgpOwotI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBpZiAoIWlzVmFsaWRX
ZWFrTm9kZShub2RlKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0jZW5kaWYKLQotICAgICAgICBK
U0NlbGwqIGNlbGwgPSBub2RlLT5zbG90KCktPmFzQ2VsbCgpOwotICAgICAgICBpZiAoSGVhcDo6
aXNNYXJrZWQoY2VsbCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoV2Vh
a0hhbmRsZU93bmVyKiB3ZWFrT3duZXIgPSBub2RlLT53ZWFrT3duZXIoKSkgewotICAgICAgICAg
ICAgd2Vha093bmVyLT5maW5hbGl6ZShIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KG5vZGUtPnNs
b3QoKSksIG5vZGUtPndlYWtPd25lckNvbnRleHQoKSk7Ci0gICAgICAgICAgICBpZiAobV9uZXh0
VG9GaW5hbGl6ZSAhPSBub2RlLT5uZXh0KCkpIC8vIE93bmVyIGRlYWxsb2NhdGVkIG5vZGUuCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUoR0NfVkFMSURB
VElPTikKLSAgICAgICAgaWYgKCFpc0xpdmVOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0go
KTsKLSNlbmRpZgotICAgICAgICAqbm9kZS0+c2xvdCgpID0gSlNWYWx1ZSgpOwotICAgICAgICBT
ZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92ZShub2RlKTsKLSAgICAgICAgbV9pbW1lZGlh
dGVMaXN0LnB1c2gobm9kZSk7Ci0gICAgfQotICAgIAotICAgIG1fbmV4dFRvRmluYWxpemUgPSAw
OwotfQotCiB2b2lkIEhhbmRsZUhlYXA6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNv
bnN0IEpTVmFsdWUmIHZhbHVlKQogewogICAgIC8vIEZvcmJpZCBhc3NpZ25tZW50IHRvIGhhbmRs
ZXMgZHVyaW5nIHRoZSBmaW5hbGl6YXRpb24gcGhhc2UsIHNpbmNlIGl0IHdvdWxkIHZpb2xhdGUg
bWFueSBHQyBpbnZhcmlhbnRzLgpAQCAtMTUwLDE1ICs4MSw2IEBAIHZvaWQgSGFuZGxlSGVhcDo6
d3JpdGVCYXJyaWVyKEhhbmRsZVNsb3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChub2RlLT5pc1dlYWsoKSkgewotICAgICAgICBtX3dlYWtMaXN0LnB1c2gobm9kZSk7Ci0jaWYg
RU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgICAgIGlmICghaXNMaXZlTm9kZShub2RlKSkKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IG1fc3Ryb25nTGlzdC5wdXNoKG5vZGUpOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAg
IGlmICghaXNMaXZlTm9kZShub2RlKSkKQEAgLTE4OCwyNCArMTEwLDYgQEAgYm9vbCBIYW5kbGVI
ZWFwOjppc0xpdmVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgIHJldHVybiB0cnVlOwog
fQotCi1ib29sIEhhbmRsZUhlYXA6OmlzVmFsaWRXZWFrTm9kZShOb2RlKiBub2RlKQotewotICAg
IGlmICghaXNMaXZlTm9kZShub2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
bm9kZS0+aXNXZWFrKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTVmFsdWUgdmFs
dWUgPSAqbm9kZS0+c2xvdCgpOwotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwo
KTsKLSAgICBpZiAoIWNlbGwgfHwgIWNlbGwtPnN0cnVjdHVyZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFwLmgJKHJldmlzaW9u
IDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDYgQEAgY2xhc3MgSlNHbG9iYWxEYXRhOwogY2xhc3Mg
SlNWYWx1ZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBX
ZWFrSGFuZGxlT3duZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigp
OwotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJik7Ci0gICAgdmlydHVhbCB2b2lkIGZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCk7Ci19OwotCiBjbGFzcyBIYW5k
bGVIZWFwIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSGFuZGxlSGVhcCogaGVhcEZvcihIYW5kbGVT
bG90KTsKQEAgLTU4LDIwICs1MSwxMCBAQCBwdWJsaWM6CiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0
ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVTbG90KTsKIAotICAgIHZvaWQgbWFrZVdl
YWsoSGFuZGxlU2xvdCwgV2Vha0hhbmRsZU93bmVyKiA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKTsK
LSAgICBIYW5kbGVTbG90IGNvcHlXZWFrKEhhbmRsZVNsb3QpOwotCiAgICAgdm9pZCB2aXNpdFN0
cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVz
KEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgZmluYWxpemVXZWFrSGFuZGxlcygpOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCwgY29uc3Qg
SlNWYWx1ZSYpOwogCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGJvb2wgaGFzV2Vha093bmVy
KEhhbmRsZVNsb3QsIFdlYWtIYW5kbGVPd25lciopOwotICAgIGJvb2wgaGFzRmluYWxpemVyKEhh
bmRsZVNsb3QpOwotI2VuZGlmCi0KICAgICB1bnNpZ25lZCBwcm90ZWN0ZWRHbG9iYWxPYmplY3RD
b3VudCgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoU3Ry
b25nSGFuZGxlKEZ1bmN0b3ImLCBjb25zdCBIYXNoQ291bnRlZFNldDxKU0NlbGwqPiYgc2tpcFNl
dCk7CkBAIC04NSwxMiArNjgsNiBAQCBwcml2YXRlOgogICAgICAgICBIYW5kbGVTbG90IHNsb3Qo
KTsKICAgICAgICAgSGFuZGxlSGVhcCogaGFuZGxlSGVhcCgpOwogCi0gICAgICAgIHZvaWQgbWFr
ZVdlYWsoV2Vha0hhbmRsZU93bmVyKiwgdm9pZCogY29udGV4dCk7Ci0gICAgICAgIGJvb2wgaXNX
ZWFrKCk7Ci0gICAgICAgIAotICAgICAgICBXZWFrSGFuZGxlT3duZXIqIHdlYWtPd25lcigpOwot
ICAgICAgICB2b2lkKiB3ZWFrT3duZXJDb250ZXh0KCk7Ci0KICAgICAgICAgdm9pZCBzZXRQcmV2
KE5vZGUqKTsKICAgICAgICAgTm9kZSogcHJldigpOwogCkBAIC05OCwxMiArNzUsOCBAQCBwcml2
YXRlOgogICAgICAgICBOb2RlKiBuZXh0KCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBXZWFr
SGFuZGxlT3duZXIqIGVtcHR5V2Vha093bmVyKCk7Ci0KICAgICAgICAgSlNWYWx1ZSBtX3ZhbHVl
OwogICAgICAgICBIYW5kbGVIZWFwKiBtX2hhbmRsZUhlYXA7Ci0gICAgICAgIFdlYWtIYW5kbGVP
d25lciogbV93ZWFrT3duZXI7Ci0gICAgICAgIHZvaWQqIG1fd2Vha093bmVyQ29udGV4dDsKICAg
ICAgICAgTm9kZSogbV9wcmV2OwogICAgICAgICBOb2RlKiBtX25leHQ7CiAgICAgfTsKQEAgLTEx
NCw3ICs4Nyw2IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBncm93KCk7
CiAgICAgCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pIHx8ICFBU1NFUlRfRElTQUJMRUQKLSAg
ICBib29sIGlzVmFsaWRXZWFrTm9kZShOb2RlKik7CiAgICAgYm9vbCBpc0xpdmVOb2RlKE5vZGUq
KTsKICNlbmRpZgogCkBAIC0xMjIsNyArOTQsNiBAQCBwcml2YXRlOgogICAgIEJsb2NrU3RhY2s8
Tm9kZT4gbV9ibG9ja1N0YWNrOwogCiAgICAgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+IG1fc3Ry
b25nTGlzdDsKLSAgICBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT4gbV93ZWFrTGlzdDsKICAgICBT
ZW50aW5lbExpbmtlZExpc3Q8Tm9kZT4gbV9pbW1lZGlhdGVMaXN0OwogICAgIFNpbmdseUxpbmtl
ZExpc3Q8Tm9kZT4gbV9mcmVlTGlzdDsKICAgICBOb2RlKiBtX25leHRUb0ZpbmFsaXplOwpAQCAt
MTc1LDQ5ICsxNDYsOCBAQCBpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjpkZWFsbG9jYXRlKEhhbmRs
CiAgICAgbV9mcmVlTGlzdC5wdXNoKG5vZGUpOwogfQogCi1pbmxpbmUgSGFuZGxlU2xvdCBIYW5k
bGVIZWFwOjpjb3B5V2VhayhIYW5kbGVTbG90IG90aGVyKQotewotICAgIE5vZGUqIG5vZGUgPSB0
b05vZGUoYWxsb2NhdGUoKSk7Ci0gICAgbm9kZS0+bWFrZVdlYWsodG9Ob2RlKG90aGVyKS0+d2Vh
a093bmVyKCksIHRvTm9kZShvdGhlciktPndlYWtPd25lckNvbnRleHQoKSk7Ci0gICAgd3JpdGVC
YXJyaWVyKG5vZGUtPnNsb3QoKSwgKm90aGVyKTsKLSAgICAqbm9kZS0+c2xvdCgpID0gKm90aGVy
OwotICAgIHJldHVybiB0b0hhbmRsZShub2RlKTsKLX0KLQotaW5saW5lIHZvaWQgSGFuZGxlSGVh
cDo6bWFrZVdlYWsoSGFuZGxlU2xvdCBoYW5kbGUsIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVy
LCB2b2lkKiBjb250ZXh0KQotewotICAgIC8vIEZvcmJpZCBhc3NpZ25tZW50IHRvIGhhbmRsZXMg
ZHVyaW5nIHRoZSBmaW5hbGl6YXRpb24gcGhhc2UsIHNpbmNlIGl0IHdvdWxkIHZpb2xhdGUgbWFu
eSBHQyBpbnZhcmlhbnRzLgotICAgIC8vIEZpbGUgYSBidWcgd2l0aCBzdGFjayB0cmFjZSBpZiB5
b3UgaGl0IHRoaXMuCi0gICAgaWYgKG1fbmV4dFRvRmluYWxpemUpCi0gICAgICAgIENSQVNIKCk7
Ci0gICAgTm9kZSogbm9kZSA9IHRvTm9kZShoYW5kbGUpOwotICAgIG5vZGUtPm1ha2VXZWFrKHdl
YWtPd25lciwgY29udGV4dCk7Ci0KLSAgICBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92
ZShub2RlKTsKLSAgICBpZiAoISpoYW5kbGUgfHwgIWhhbmRsZS0+aXNDZWxsKCkpIHsKLSAgICAg
ICAgbV9pbW1lZGlhdGVMaXN0LnB1c2gobm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX3dlYWtMaXN0LnB1c2gobm9kZSk7Ci19Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi1p
bmxpbmUgYm9vbCBIYW5kbGVIZWFwOjpoYXNXZWFrT3duZXIoSGFuZGxlU2xvdCBoYW5kbGUsIFdl
YWtIYW5kbGVPd25lciogd2Vha093bmVyKQotewotICAgIHJldHVybiB0b05vZGUoaGFuZGxlKS0+
d2Vha093bmVyKCkgPT0gd2Vha093bmVyOwotfQotCi1pbmxpbmUgYm9vbCBIYW5kbGVIZWFwOjpo
YXNGaW5hbGl6ZXIoSGFuZGxlU2xvdCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIHRvTm9kZShoYW5k
bGUpLT53ZWFrT3duZXIoKTsKLX0KLSNlbmRpZgotCiBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6
Tm9kZShIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKQogICAgIDogbV9oYW5kbGVIZWFwKGhhbmRsZUhl
YXApCi0gICAgLCBtX3dlYWtPd25lcigwKQotICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDApCiAg
ICAgLCBtX3ByZXYoMCkKICAgICAsIG1fbmV4dCgwKQogewpAQCAtMjI1LDggKzE1NSw2IEBAIGlu
bGluZSBIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKEhhbmRsZUhlYXAKIAogaW5saW5lIEhhbmRsZUhl
YXA6Ok5vZGU6Ok5vZGUoV1RGOjpTZW50aW5lbFRhZykKICAgICA6IG1faGFuZGxlSGVhcCgwKQot
ICAgICwgbV93ZWFrT3duZXIoMCkKLSAgICAsIG1fd2Vha093bmVyQ29udGV4dCgwKQogICAgICwg
bV9wcmV2KDApCiAgICAgLCBtX25leHQoMCkKIHsKQEAgLTI0MiwyOCArMTcwLDYgQEAgaW5saW5l
IEhhbmRsZUhlYXAqIEhhbmRsZUhlYXA6Ok5vZGU6OmhhbgogICAgIHJldHVybiBtX2hhbmRsZUhl
YXA7CiB9CiAKLWlubGluZSB2b2lkIEhhbmRsZUhlYXA6Ok5vZGU6Om1ha2VXZWFrKFdlYWtIYW5k
bGVPd25lciogd2Vha093bmVyLCB2b2lkKiBjb250ZXh0KQotewotICAgIG1fd2Vha093bmVyID0g
d2Vha093bmVyID8gd2Vha093bmVyIDogZW1wdHlXZWFrT3duZXIoKTsKLSAgICBtX3dlYWtPd25l
ckNvbnRleHQgPSBjb250ZXh0OwotfQotCi1pbmxpbmUgYm9vbCBIYW5kbGVIZWFwOjpOb2RlOjpp
c1dlYWsoKQotewotICAgIHJldHVybiBtX3dlYWtPd25lcjsgLy8gVHJ1ZSBmb3IgZW1wdHlXZWFr
T3duZXIoKS4KLX0KLQotaW5saW5lIFdlYWtIYW5kbGVPd25lciogSGFuZGxlSGVhcDo6Tm9kZTo6
d2Vha093bmVyKCkKLXsKLSAgICByZXR1cm4gbV93ZWFrT3duZXIgPT0gZW1wdHlXZWFrT3duZXIo
KSA/IDAgOiBtX3dlYWtPd25lcjsgLy8gMCBmb3IgZW1wdHlXZWFrT3duZXIoKS4KLX0KLQotaW5s
aW5lIHZvaWQqIEhhbmRsZUhlYXA6Ok5vZGU6OndlYWtPd25lckNvbnRleHQoKQotewotICAgIEFT
U0VSVCh3ZWFrT3duZXIoKSk7Ci0gICAgcmV0dXJuIG1fd2Vha093bmVyQ29udGV4dDsKLX0KLQog
aW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6Tm9kZTo6c2V0UHJldihOb2RlKiBwcmV2KQogewogICAg
IG1fcHJldiA9IHByZXY7CkBAIC0yODQsMTMgKzE5MCw2IEBAIGlubGluZSBIYW5kbGVIZWFwOjpO
b2RlKiBIYW5kbGVIZWFwOjpOb2QKICAgICByZXR1cm4gbV9uZXh0OwogfQogCi0vLyBTZW50aW5l
bCB0byBpbmRpY2F0ZSB0aGF0IGEgbm9kZSBpcyB3ZWFrLCBidXQgaXRzIG93bmVyIGhhcyBubyBt
ZWFuaW5nZnVsCi0vLyBjYWxsYmFja3MuIFRoaXMgYWxsb3dzIHVzIHRvIG9wdGltaXplIGJ5IHNr
aXBwaW5nIHN1Y2ggbm9kZXMuCi1pbmxpbmUgV2Vha0hhbmRsZU93bmVyKiBIYW5kbGVIZWFwOjpO
b2RlOjplbXB0eVdlYWtPd25lcigpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vh
a0hhbmRsZU93bmVyKj4oLTEpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lk
IEhhbmRsZUhlYXA6OmZvckVhY2hTdHJvbmdIYW5kbGUoRnVuY3RvciYgZnVuY3RvciwgY29uc3Qg
SGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4mIHNraXBTZXQpCiB7CiAgICAgTm9kZSogZW5kID0gbV9z
dHJvbmdMaXN0LmVuZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJl
dmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTMsMTggKzMxMywxNyBAQCBIZWFwOjpIZWFwKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgSGVhCiAgICAgOiBtX2hlYXBTaXplKGhlYXBTaXplKQogICAgICwgbV9t
aW5CeXRlc1BlckN5Y2xlKGhlYXBTaXplRm9ySGludChoZWFwU2l6ZSkpCiAgICAgLCBtX2xhc3RG
dWxsR0NTaXplKDApCi0gICAgLCBtX3dhdGVyTWFyaygwKQogICAgICwgbV9oaWdoV2F0ZXJNYXJr
KG1fbWluQnl0ZXNQZXJDeWNsZSkKICAgICAsIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyhOb09wZXJh
dGlvbikKICAgICAsIG1fb2JqZWN0U3BhY2UodGhpcykKICAgICAsIG1fc3RvcmFnZVNwYWNlKHRo
aXMpCiAgICAgLCBtX2Jsb2NrRnJlZWluZ1RocmVhZFNob3VsZFF1aXQoZmFsc2UpCi0gICAgLCBt
X2V4dHJhQ29zdCgwKQogICAgICwgbV9tYXJrTGlzdFNldCgwKQogICAgICwgbV9hY3Rpdml0eUNh
bGxiYWNrKERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1f
bWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1fc2hhcmVkRGF0YShnbG9iYWxEYXRhKQogICAg
ICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEpCisgICAgLCBtX3dlYWtIZWFwKHRoaXMpCiAg
ICAgLCBtX2hhbmRsZUhlYXAoZ2xvYmFsRGF0YSkKICAgICAsIG1faXNTYWZlVG9Db2xsZWN0KGZh
bHNlKQogICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCkBAIC0zNzYsNyArMzc1LDcgQEAg
dm9pZCBIZWFwOjpkZXN0cm95KCkKICAgICBjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7
CiAgICAgY2xlYXJNYXJrcygpOwogCi0gICAgbV9oYW5kbGVIZWFwLmZpbmFsaXplV2Vha0hhbmRs
ZXMoKTsKKyAgICBtX3dlYWtIZWFwLmZpbmFsaXplQWxsKCk7CiAgICAgbV9nbG9iYWxEYXRhLT5z
bWFsbFN0cmluZ3MuZmluYWxpemVTbWFsbFN0cmluZ3MoKTsKICAgICBzaHJpbmsoKTsKICAgICBt
X3N0b3JhZ2VTcGFjZS5kZXN0cm95KCk7CkBAIC00NjYsOSArNDY1LDcgQEAgdm9pZCBIZWFwOjpy
ZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZQogICAgIC8vIGlmIGEgbGFyZ2UgdmFsdWUgc3Vy
dml2ZXMgb25lIGdhcmJhZ2UgY29sbGVjdGlvbiwgdGhlcmUgaXMgbm90IG11Y2ggcG9pbnQgdG8K
ICAgICAvLyBjb2xsZWN0aW5nIG1vcmUgZnJlcXVlbnRseSBhcyBsb25nIGFzIGl0IHN0YXlzIGFs
aXZlLgogCi0gICAgaWYgKG1fZXh0cmFDb3N0ID4gbWF4RXh0cmFDb3N0ICYmIG1fZXh0cmFDb3N0
ID4gaGlnaFdhdGVyTWFyaygpIC8gMikKLSAgICAgICAgY29sbGVjdEFsbEdhcmJhZ2UoKTsKLSAg
ICBtX2V4dHJhQ29zdCArPSBjb3N0OworICAgIGFkZFRvV2F0ZXJNYXJrKGNvc3QpOwogfQogCiB2
b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQpAQCAtNjg3LDEyICs2ODQsMTIgQEAgdm9pZCBI
ZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAjZW5kaWYKICAgICB9CiAKLSAgICAvLyBXZWFr
IGhhbmRsZXMgbXVzdCBiZSBtYXJrZWQgbGFzdCwgYmVjYXVzZSB0aGVpciBvd25lcnMgdXNlIHRo
ZSBzZXQgb2YKLSAgICAvLyBvcGFxdWUgcm9vdHMgdG8gZGV0ZXJtaW5lIHJlYWNoYWJpbGl0eS4K
KyAgICAvLyBXZWFrIHJlZmVyZW5jZXMgbXVzdCBiZSBtYXJrZWQgbGFzdCBiZWNhdXNlIHRoZWly
IGxpdmVuZXNzIGRlcGVuZHMgb24KKyAgICAvLyB0aGUgbGl2ZW5lc3Mgb2YgdGhlIHJlc3Qgb2Yg
dGhlIG9iamVjdCBncmFwaC4KICAgICB7Ci0gICAgICAgIEdDUEhBU0UoVmlzaXRpbmdXZWFrSGFu
ZGxlcyk7CisgICAgICAgIEdDUEhBU0UoVmlzaXRpbmdMaXZlV2Vha0hhbmRsZXMpOwogICAgICAg
ICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgbV9oYW5kbGVIZWFwLnZpc2l0V2Vha0hhbmRs
ZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIG1fd2Vha0hlYXAudmlzaXRMaXZlV2Vh
a0ltcGxzKGhlYXBSb290VmlzaXRvcik7CiAgICAgICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5j
ZXMoKTsKICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTcwNSw2ICs3MDIsMjAgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBm
dWxsR0MpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisKKyAgICB7CisgICAgICAg
IEdDUEhBU0UoVmlzaXRpbmdEZWFkV2Vha0hhbmRsZXMpOworICAgICAgICBtX3dlYWtIZWFwLnZp
c2l0RGVhZFdlYWtJbXBscyhoZWFwUm9vdFZpc2l0b3IpOworCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcih2aXNpdG9yKTsKKyAgICAgICAgICAgIHZp
c2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgICAg
ICAgICB2aXNpdG9yLmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOwor
I2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKICAgICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291
bnQsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKIAogICAgIHZpc2l0b3IuZG9uZUNvcHlpbmcoKTsK
QEAgLTgwNSw3ICs4MTYsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBU
b2dnCiAgICAgICAgIAogICAgIHsKICAgICAgICAgR0NQSEFTRShGaW5hbGl6ZVdlYWtIYW5kbGVz
KTsKLSAgICAgICAgbV9oYW5kbGVIZWFwLmZpbmFsaXplV2Vha0hhbmRsZXMoKTsKKyAgICAgICAg
bV93ZWFrSGVhcC5zd2VlcCgpOwogICAgICAgICBtX2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5m
aW5hbGl6ZVNtYWxsU3RyaW5ncygpOwogICAgIH0KICAgICAKQEAgLTgzNiw3ICs4NDcsNyBAQCB2
b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgc2l6ZV90IHByb3Bv
cnRpb25hbEJ5dGVzID0gMiAqIG5ld1NpemU7CiAgICAgaWYgKGZ1bGxHQykgewogICAgICAgICBt
X2xhc3RGdWxsR0NTaXplID0gbmV3U2l6ZTsKLSAgICAgICAgc2V0SGlnaFdhdGVyTWFyayhtYXgo
cHJvcG9ydGlvbmFsQnl0ZXMsIG1fbWluQnl0ZXNQZXJDeWNsZSkpOworICAgICAgICBtX2hpZ2hX
YXRlck1hcmsgPSBtYXgocHJvcG9ydGlvbmFsQnl0ZXMsIG1fbWluQnl0ZXNQZXJDeWNsZSk7CiAg
ICAgfQogICAgIGRvdWJsZSBsYXN0R0NFbmRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwogICAg
IG1fbGFzdEdDTGVuZ3RoID0gbGFzdEdDRW5kVGltZSAtIGxhc3RHQ1N0YXJ0VGltZTsKQEAgLTg1
Miw4ICs4NjMsOCBAQCB2b2lkIEhlYXA6OmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoCiAK
IHZvaWQgSGVhcDo6cmVzZXRBbGxvY2F0b3JzKCkKIHsKLSAgICBtX2V4dHJhQ29zdCA9IDA7CiAg
ICAgbV9vYmplY3RTcGFjZS5yZXNldEFsbG9jYXRvcnMoKTsKKyAgICBtX3dlYWtIZWFwLnJlc2V0
QWxsb2NhdG9yKCk7CiB9CiAKIHZvaWQgSGVhcDo6c2V0QWN0aXZpdHlDYWxsYmFjayhQYXNzT3du
UHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gYWN0aXZpdHlDYWxsYmFjaykKQEAgLTkxNCwxNSArOTI1
LDE1IEBAIHZvaWQgSGVhcDo6cmVsZWFzZUZyZWVCbG9ja3MoKQogCiB2b2lkIEhlYXA6OmFkZEZp
bmFsaXplcihKU0NlbGwqIGNlbGwsIEZpbmFsaXplciBmaW5hbGl6ZXIpCiB7Ci0gICAgV2VhazxK
U0NlbGw+IHdlYWsoKmdsb2JhbERhdGEoKSwgY2VsbCwgJm1fZmluYWxpemVyT3duZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpbmFsaXplcikpOwotICAgIHdlYWsubGVha0hhbmRsZSgpOyAv
LyBCYWxhbmNlZCBieSBGaW5hbGl6ZXJPd25lcjo6ZmluYWxpemUoKS4KKyAgICB3ZWFrSGVhcCgp
LT5hbGxvY2F0ZShjZWxsLCAmbV9maW5hbGl6ZXJPd25lciwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oZmluYWxpemVyKSk7IC8vIEJhbGFuY2VkIGJ5IEZpbmFsaXplck93bmVyOjpmaW5hbGl6ZSgp
LgogfQogCiB2b2lkIEhlYXA6OkZpbmFsaXplck93bmVyOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQogewotICAgIFdlYWs8SlNDZWxsPiB3ZWFrKFdlYWs8
SlNDZWxsPjo6QWRvcHQsIGhhbmRsZSk7CisgICAgSGFuZGxlU2xvdCBzbG90ID0gaGFuZGxlLnNs
b3QoKTsKICAgICBGaW5hbGl6ZXIgZmluYWxpemVyID0gcmVpbnRlcnByZXRfY2FzdDxGaW5hbGl6
ZXI+KGNvbnRleHQpOwotICAgIGZpbmFsaXplcih3ZWFrLmdldCgpKTsKKyAgICBmaW5hbGl6ZXIo
c2xvdC0+YXNDZWxsKCkpOworICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKFdlYWtJbXBsOjphc1dl
YWtJbXBsKHNsb3QpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRl
ICJNYXJrZWRCbG9ja1NldC5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAi
U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKKyNpbmNsdWRlICJX
ZWFrSGVhcC5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllclN1cHBvcnQuaCIKICNpbmNsdWRlIDx3
dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMzMs
MTEgKzEzNSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVkQ2Vs
bChGdW5jdG9yJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHR5cGVuYW1l
IEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaFByb3RlY3RlZENlbGwoKTsKIAorICAgICAgICBX
ZWFrSGVhcCogd2Vha0hlYXAoKSB7IHJldHVybiAmbV93ZWFrSGVhcDsgfQogICAgICAgICBIYW5k
bGVIZWFwKiBoYW5kbGVIZWFwKCkgeyByZXR1cm4gJm1faGFuZGxlSGVhcDsgfQogICAgICAgICBI
YW5kbGVTdGFjayogaGFuZGxlU3RhY2soKSB7IHJldHVybiAmbV9oYW5kbGVTdGFjazsgfQogCiAg
ICAgICAgIHZvaWQgZ2V0Q29uc2VydmF0aXZlUmVnaXN0ZXJSb290cyhIYXNoU2V0PEpTQ2VsbCo+
JiByb290cyk7CiAKKyAgICAgICAgdm9pZCBhZGRUb1dhdGVyTWFyayhzaXplX3QpOworCiAgICAg
ICAgIGRvdWJsZSBsYXN0R0NMZW5ndGgoKSB7IHJldHVybiBtX2xhc3RHQ0xlbmd0aDsgfQogCiAg
ICAgcHJpdmF0ZToKQEAgLTE1NSw3ICsxNjAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBzaXplX3Qgd2F0ZXJNYXJrKCk7CiAgICAgICAgIHNpemVfdCBoaWdoV2F0ZXJNYXJrKCk7Ci0g
ICAgICAgIHZvaWQgc2V0SGlnaFdhdGVyTWFyayhzaXplX3QpOwogICAgICAgICBib29sIHNob3Vs
ZENvbGxlY3QoKTsKIAogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1pbkV4dHJhQ29zdCA9
IDI1NjsKQEAgLTE5OSw3ICsyMDMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3Qg
SGVhcFNpemUgbV9oZWFwU2l6ZTsKICAgICAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJD
eWNsZTsKICAgICAgICAgc2l6ZV90IG1fbGFzdEZ1bGxHQ1NpemU7Ci0gICAgICAgIHNpemVfdCBt
X3dhdGVyTWFyazsKICAgICAgICAgc2l6ZV90IG1faGlnaFdhdGVyTWFyazsKICAgICAgICAgCiAg
ICAgICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3MgbV9vcGVyYXRpb25JblByb2dyZXNzOwpAQCAtMjE4
LDggKzIyMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWVGFibGVTcGVjdHJ1bSBtX2Rl
c3Ryb3llZFR5cGVDb3VudHM7CiAjZW5kaWYKIAotICAgICAgICBzaXplX3QgbV9leHRyYUNvc3Q7
Ci0KICAgICAgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOwogICAgICAgICBW
ZWN0b3I8VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qID4gbV90ZW1wU29ydGluZ1ZlY3RvcnM7CiAg
ICAgICAgIEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPiogbV9tYXJrTGlzdFNldDsKQEAg
LTIzMSw2ICsyMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFya1N0YWNrVGhyZWFk
U2hhcmVkRGF0YSBtX3NoYXJlZERhdGE7CiAgICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0
b3I7CiAKKyAgICAgICAgV2Vha0hlYXAgbV93ZWFrSGVhcDsKICAgICAgICAgSGFuZGxlSGVhcCBt
X2hhbmRsZUhlYXA7CiAgICAgICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgICAg
IERGR0NvZGVCbG9ja3MgbV9kZmdDb2RlQmxvY2tzOwpAQCAtMjkzLDkgKzI5NSwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1faGlnaFdhdGVyTWFyazsKICAgICB9CiAKLSAg
ICBpbmxpbmUgdm9pZCBIZWFwOjpzZXRIaWdoV2F0ZXJNYXJrKHNpemVfdCBuZXdIaWdoV2F0ZXJN
YXJrKQorICAgIGlubGluZSB2b2lkIEhlYXA6OmFkZFRvV2F0ZXJNYXJrKHNpemVfdCBzaXplKQog
ICAgIHsKLSAgICAgICAgbV9oaWdoV2F0ZXJNYXJrID0gbmV3SGlnaFdhdGVyTWFyazsKKyAgICAg
ICAgbV9vYmplY3RTcGFjZS5hZGRUb1dhdGVyTWFyayhzaXplKTsKKyAgICAgICAgaWYgKHdhdGVy
TWFyaygpID4gaGlnaFdhdGVyTWFyaygpKQorICAgICAgICAgICAgY29sbGVjdChEb05vdFN3ZWVw
KTsKICAgICB9CiAKICNpZiBFTkFCTEUoR0dDKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw2IEBAIGNsYXNzIFN0cnVjdHVyZTsKIAogTWFya2VkU3BhY2U6Ok1hcmtlZFNwYWNlKEhlYXAq
IGhlYXApCiAgICAgOiBtX3dhdGVyTWFyaygwKQotICAgICwgbV9udXJzZXJ5V2F0ZXJNYXJrKDAp
CiAgICAgLCBtX2hlYXAoaGVhcCkKIHsKICAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNp
c2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3Rl
cCkgewpAQCAtNDksNyArNDgsNiBAQCBNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UoSGVhcCogaGVh
cCkKIHZvaWQgTWFya2VkU3BhY2U6OnJlc2V0QWxsb2NhdG9ycygpCiB7CiAgICAgbV93YXRlck1h
cmsgPSAwOwotICAgIG1fbnVyc2VyeVdhdGVyTWFyayA9IDA7CiAKICAgICBmb3IgKHNpemVfdCBj
ZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6
ZSArPSBwcmVjaXNlU3RlcCkgewogICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlz
aW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2Fub25p
Y2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpOwogCiAgICAgc2l6ZV90IHdhdGVyTWFyaygpOwotICAg
IHNpemVfdCBudXJzZXJ5V2F0ZXJNYXJrKCk7CisgICAgdm9pZCBhZGRUb1dhdGVyTWFyayhzaXpl
X3QpOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PE1hcmtlZEJsb2NrKj46Oml0ZXJhdG9yIEJsb2Nr
SXRlcmF0b3I7CiAgICAgCkBAIC03Nyw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lk
IHNocmluaygpOwogICAgIHZvaWQgZnJlZUJsb2NrcyhNYXJrZWRCbG9jayogaGVhZCk7CisKICAg
ICB2b2lkIGRpZEFkZEJsb2NrKE1hcmtlZEJsb2NrKik7CiAgICAgdm9pZCBkaWRDb25zdW1lRnJl
ZUxpc3QoTWFya2VkQmxvY2sqKTsKIApAQCAtMTAyLDcgKzEwMyw2IEBAIHByaXZhdGU6CiAgICAg
U3Vic3BhY2UgbV9ub3JtYWxTcGFjZTsKIAogICAgIHNpemVfdCBtX3dhdGVyTWFyazsKLSAgICBz
aXplX3QgbV9udXJzZXJ5V2F0ZXJNYXJrOwogICAgIEhlYXAqIG1faGVhcDsKICAgICBNYXJrZWRC
bG9ja1NldCBtX2Jsb2NrczsKIH07CkBAIC0xMTIsOSArMTEyLDkgQEAgaW5saW5lIHNpemVfdCBN
YXJrZWRTcGFjZTo6d2F0ZXJNYXJrKCkKICAgICByZXR1cm4gbV93YXRlck1hcms7CiB9CiAKLWlu
bGluZSBzaXplX3QgTWFya2VkU3BhY2U6Om51cnNlcnlXYXRlck1hcmsoKQoraW5saW5lIHZvaWQg
TWFya2VkU3BhY2U6OmFkZFRvV2F0ZXJNYXJrKHNpemVfdCBzaXplKQogewotICAgIHJldHVybiBt
X251cnNlcnlXYXRlck1hcms7CisgICAgbV93YXRlck1hcmsgKz0gc2l6ZTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUg
TWFya2VkU3BhY2U6OmZvckVhY2hDZWxsKEZ1bmN0b3ImIGZ1bmN0b3IpCkBAIC0xOTksNyArMTk5
LDYgQEAgaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmRpZEFkZEJsb2NrKE1hcgogCiBpbmxpbmUg
dm9pZCBNYXJrZWRTcGFjZTo6ZGlkQ29uc3VtZUZyZWVMaXN0KE1hcmtlZEJsb2NrKiBibG9jaykK
IHsKLSAgICBtX251cnNlcnlXYXRlck1hcmsgKz0gYmxvY2stPmNhcGFjaXR5KCkgLSBibG9jay0+
c2l6ZSgpOwogICAgIG1fd2F0ZXJNYXJrICs9IGJsb2NrLT5jYXBhY2l0eSgpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QYXNzV2Vhay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NXZWFrLmgJKHJldmlzaW9uIDExMjU3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NXZWFrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDggKzI2LDggQEAKICNpZm5kZWYgUGFzc1dlYWtfaAogI2RlZmluZSBQYXNzV2Vha19oCiAK
KyNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1
ZGUgIkhhbmRsZS5oIgogI2luY2x1ZGUgPHd0Zi9OdWxsUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1R5
cGVUcmFpdHMuaD4KIApAQCAtMzUsNjEgKzM1LDE2NCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNz
IFBhc3NXZWFrOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1dlYWs8VD4gYWRvcHRXZWFrKEhh
bmRsZVNsb3QpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1dlYWs8VD4gYWRvcHRXZWFrKFdl
YWtJbXBsKik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NXZWFrIDogcHVibGlj
IEhhbmRsZTxUPiB7Ci0gICAgdXNpbmcgSGFuZGxlPFQ+OjpzbG90OwotICAgIHVzaW5nIEhhbmRs
ZTxUPjo6c2V0U2xvdDsKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGNsYXNz
IFdlYWtJbXBsQWNjZXNzb3IgeworcHVibGljOgorICAgIHR5cGVkZWYgVCogR2V0VHlwZTsKKwor
ICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdDsKKyAgICBUJiBvcGVyYXRvciooKSBjb25zdDsKKyAg
ICBHZXRUeXBlIGdldCgpIGNvbnN0OworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wg
d2FzKEdldFR5cGUpIGNvbnN0OworI2VuZGlmCit9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNl
PiBjbGFzcyBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25vd24+IHsKIHB1YmxpYzoKLSAgICB0
eXBlZGVmIHR5cGVuYW1lIEhhbmRsZTxUPjo6RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKKyAg
ICB0eXBlZGVmIEpTVmFsdWUgR2V0VHlwZTsKIAotICAgIFBhc3NXZWFrKCkgOiBIYW5kbGU8VD4o
KSB7IH0KLSAgICBQYXNzV2VhayhzdGQ6Om51bGxwdHJfdCkgOiBIYW5kbGU8VD4oKSB7IH0KKyAg
ICBjb25zdCBKU1ZhbHVlKiBvcGVyYXRvci0+KCkgY29uc3Q7CisgICAgY29uc3QgSlNWYWx1ZSYg
b3BlcmF0b3IqKCkgY29uc3Q7CisgICAgR2V0VHlwZSBnZXQoKSBjb25zdDsKK307CiAKLSAgICBQ
YXNzV2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4dGVybmFsVHlwZSBleHRlcm5hbFR5
cGUgPSBFeHRlcm5hbFR5cGUoKSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIgPSAwLCB2b2lk
KiBjb250ZXh0ID0gMCkKLSAgICAgICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0YS5oZWFwLmhhbmRs
ZUhlYXAoKS0+YWxsb2NhdGUoKSkKLSAgICB7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Io
c2xvdCgpKS0+bWFrZVdlYWsoc2xvdCgpLCB3ZWFrT3duZXIsIGNvbnRleHQpOwotICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gSGFuZGxlVHlwZXM8VD46OnRvSlNWYWx1ZShleHRlcm5hbFR5cGUpOwot
ICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QoKSktPndyaXRlQmFycmllcihzbG90KCks
IHZhbHVlKTsKLSAgICAgICAgKnNsb3QoKSA9IHZhbHVlOwotICAgIH0KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNsYXNzIFBhc3NXZWFrIDogcHVibGljIFdlYWtJbXBsQWNjZXNzb3I8UGFzc1dlYWs8
VD4sIFQ+IHsKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgV2Vha0ltcGxBY2Nlc3NvcjxQYXNz
V2VhazxUPiwgVD47CisgICAgdHlwZWRlZiB0eXBlbmFtZSBXZWFrSW1wbEFjY2Vzc29yPFBhc3NX
ZWFrPFQ+LCBUPjo6R2V0VHlwZSBHZXRUeXBlOworCisgICAgUGFzc1dlYWsoKTsKKyAgICBQYXNz
V2VhayhzdGQ6Om51bGxwdHJfdCk7CisgICAgUGFzc1dlYWsoSlNHbG9iYWxEYXRhJiwgR2V0VHlw
ZSA9IEdldFR5cGUoKSwgV2Vha0hhbmRsZU93bmVyKiA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKTsK
IAogICAgIC8vIEl0IHNvbWV3aGF0IGJyZWFrcyB0aGUgdHlwZSBzeXN0ZW0gdG8gYWxsb3cgdHJh
bnNmZXIgb2Ygb3duZXJzaGlwIG91dCBvZgogICAgIC8vIGEgY29uc3QgUGFzc1dlYWsuIEhvd2V2
ZXIsIGl0IG1ha2VzIGl0IG11Y2ggZWFzaWVyIHRvIHdvcmsgd2l0aCBQYXNzV2VhawogICAgIC8v
IHRlbXBvcmFyaWVzLCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIG5lZWQgdG8gdXNlIHJlYWwgY29uc3Qg
UGFzc1dlYWtzIGFueXdheS4KLSAgICBQYXNzV2Vhayhjb25zdCBQYXNzV2VhayYgbykgOiBIYW5k
bGU8VD4oby5sZWFrSGFuZGxlKCkpIHsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NX
ZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvKSA6IEhhbmRsZTxUPihvLmxlYWtIYW5kbGUoKSkgeyB9
CisgICAgUGFzc1dlYWsoY29uc3QgUGFzc1dlYWsmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBQYXNzV2Vhayhjb25zdCBQYXNzV2VhazxVPiYpOworCisgICAgflBhc3NXZWFrKCk7CiAKLSAg
ICB+UGFzc1dlYWsoKQotICAgIHsKLSAgICAgICAgaWYgKCFzbG90KCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+ZGVhbGxvY2F0ZShz
bG90KCkpOwotICAgICAgICBzZXRTbG90KDApOwotICAgIH0KKyAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0OwogCi0gICAgRXh0ZXJuYWxUeXBlIGdldCgpIGNvbnN0IHsgcmV0dXJuICBIYW5kbGVU
eXBlczxUPjo6Z2V0RnJvbVNsb3Qoc2xvdCgpKTsgfQorICAgIC8vIFRoaXMgY29udmVyc2lvbiBv
cGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3Ro
ZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVmIEpTVmFsdWUgKFBhc3NXZWFrOjoqVW5zcGVj
aWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25z
dDsKIAotICAgIEhhbmRsZVNsb3QgbGVha0hhbmRsZSgpIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVS
TjsKKyAgICBXZWFrSW1wbCogbGVha0ltcGwoKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47CiAK
IHByaXZhdGU6Ci0gICAgZnJpZW5kIFBhc3NXZWFrIGFkb3B0V2VhazxUPihIYW5kbGVTbG90KTsK
KyAgICBmcmllbmQgUGFzc1dlYWsgYWRvcHRXZWFrPFQ+KFdlYWtJbXBsKik7CisgICAgZXhwbGlj
aXQgUGFzc1dlYWsoV2Vha0ltcGwqKTsKIAotICAgIGV4cGxpY2l0IFBhc3NXZWFrKEhhbmRsZVNs
b3Qgc2xvdCkgOiBIYW5kbGU8VD4oc2xvdCkgeyB9CisgICAgV2Vha0ltcGwqIG1faW1wbDsKIH07
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBIYW5kbGVTbG90IFBhc3NXZWFrPFQ+Ojps
ZWFrSGFuZGxlKCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGlu
bGluZSBUKiBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+OjpvcGVyYXRvci0+KCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwgJiYgc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6
OkxpdmUpOworICAgIHJldHVybiBqc0Nhc3Q8VCo+KHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0
aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBCYXNlLCB0eXBlbmFtZSBUPiBpbmxpbmUgVCYgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6
b3BlcmF0b3IqKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+
KHRoaXMpLT5tX2ltcGwgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwt
PnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpOworICAgIHJldHVybiAqanNDYXN0PFQqPihzdGF0
aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzZSwgdHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1l
IFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVD46OkdldFR5cGUgV2Vha0ltcGxBY2Nlc3NvcjxCYXNl
LCBUPjo6Z2V0KCkgY29uc3QKK3sKKyAgICBpZiAoIXN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0
aGlzKS0+bV9pbXBsIHx8IHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5z
dGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlKQorICAgICAgICByZXR1cm4gR2V0VHlwZSgpOworICAg
IHJldHVybiBqc0Nhc3Q8VCo+KHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBs
LT5qc1ZhbHVlKCkuYXNDZWxsKCkpOworfQorCisjaWYgIUFTU0VSVF9ESVNBQkxFRAordGVtcGxh
dGU8dHlwZW5hbWUgQmFzZSwgdHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgV2Vha0ltcGxBY2Nlc3Nv
cjxCYXNlLCBUPjo6d2FzKHR5cGVuYW1lIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVD46OkdldFR5
cGUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGljX2Nhc3Q8Y29u
c3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSkgPT0gb3RoZXI7Cit9
CisjZW5kaWYKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzZT4gaW5saW5lIGNvbnN0IEpTVmFsdWUq
IFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93bj46Om9wZXJhdG9yLT4oKSBjb25zdAorewor
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0
aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6
TGl2ZSk7CisgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1w
bC0+anNWYWx1ZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBpbmxpbmUgY29uc3Qg
SlNWYWx1ZSYgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBVbmtub3duPjo6b3BlcmF0b3IqKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwg
JiYgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgPT0gV2Vh
a0ltcGw6OkxpdmUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcykt
Pm1faW1wbC0+anNWYWx1ZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBpbmxpbmUg
dHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBVbmtub3duPjo6R2V0VHlwZSBXZWFrSW1w
bEFjY2Vzc29yPEJhc2UsIFVua25vd24+OjpnZXQoKSBjb25zdAoreworICAgIGlmICghc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwgfHwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
ZSo+KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgIHJl
dHVybiBHZXRUeXBlKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlz
KS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQ
YXNzV2VhazxUPjo6UGFzc1dlYWsoKQorICAgIDogbV9pbXBsKDApCit7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxUPjo6UGFzc1dlYWsoc3RkOjpudWxscHRyX3Qp
CisgICAgOiBtX2ltcGwoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBh
c3NXZWFrPFQ+OjpQYXNzV2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHR5cGVuYW1lIFBh
c3NXZWFrPFQ+OjpHZXRUeXBlIGdldFR5cGUsIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyLCB2
b2lkKiBjb250ZXh0KQorICAgIDogbV9pbXBsKGdsb2JhbERhdGEuaGVhcC53ZWFrSGVhcCgpLT5h
bGxvY2F0ZShnZXRUeXBlLCB3ZWFrT3duZXIsIGNvbnRleHQpKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrJiBv
KQorICAgIDogbV9pbXBsKG8ubGVha0ltcGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2Vhayhjb25z
dCBQYXNzV2VhazxVPiYgbykKKyAgICA6IG1faW1wbChvLmxlYWtJbXBsKCkpCit7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxUPjo6flBhc3NXZWFrKCkKK3sKKyAg
ICBpZiAoIW1faW1wbCkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRl
KG1faW1wbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIFBhc3NXZWFr
PFQ+OjpvcGVyYXRvciEoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pbXBsIHx8IG1faW1wbC0+
c3RhdGUoKSAhPSBXZWFrSW1wbDo6TGl2ZSB8fCAhbV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxUPjo6b3BlcmF0b3IgVW5zcGVjaWZp
ZWRCb29sVHlwZSooKSBjb25zdAoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFVuc3Bl
Y2lmaWVkQm9vbFR5cGUqPighISp0aGlzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2VhayhXZWFrSW1wbCogaW1wbCkKKzogbV9pbXBsKGltcGwp
Cit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrSW1wbCogUGFzc1dlYWs8
VD46OmxlYWtJbXBsKCkgY29uc3QKIHsKLSAgICBIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90
KCk7Ci0gICAgY29uc3RfY2FzdDxQYXNzV2VhazxUPio+KHRoaXMpLT5zZXRTbG90KDApOwotICAg
IHJldHVybiBzbG90OworICAgIFdlYWtJbXBsKiB0bXAgPSAwOworICAgIHN0ZDo6c3dhcCh0bXAs
IGNvbnN0X2Nhc3Q8V2Vha0ltcGwqJj4obV9pbXBsKSk7CisgICAgcmV0dXJuIHRtcDsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1dlYWs8VD4gYWRvcHRXZWFrKEhhbmRsZVNsb3Qgc2xv
dCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFBhc3NXZWFrPFQ+IGlubGluZSBhZG9wdFdlYWsoV2Vh
a0ltcGwqIGltcGwpCiB7Ci0gICAgcmV0dXJuIFBhc3NXZWFrPFQ+KHNsb3QpOworICAgIHJldHVy
biBQYXNzV2VhazxUPihpbXBsKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYXNzV2VhazxUPiYgYSwgY29uc3QgUGFz
c1dlYWs8VT4mIGIpIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nLmgJKHJldmlz
aW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSwxMSArODEsMTkgQEAgcHVibGljOgogICAgICAgICBjbGVhcigpOwog
ICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIXNsb3QoKSB8fCAh
KnNsb3QoKTsgfQorCisgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBs
aWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgor
ICAgIHR5cGVkZWYgSlNWYWx1ZSAoSGFuZGxlQmFzZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwor
ICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gISEqdGhp
cyA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsgfQorCiAg
ICAgdm9pZCBzd2FwKFN0cm9uZyYgb3RoZXIpCiAgICAgewogICAgICAgICBIYW5kbGU8VD46OnN3
YXAob3RoZXIpOwogICAgIH0KIAorICAgIEV4dGVybmFsVHlwZSBnZXQoKSBjb25zdCB7IHJldHVy
biBIYW5kbGVUeXBlczxUPjo6Z2V0RnJvbVNsb3QodGhpcy0+c2xvdCgpKTsgfQorCiAgICAgdm9p
ZCBzZXQoSlNHbG9iYWxEYXRhJiwgRXh0ZXJuYWxUeXBlKTsKIAogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBVPiBTdHJvbmcmIG9wZXJhdG9yPShjb25zdCBTdHJvbmc8VT4mIG90aGVyKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMDkgKzI3LDEy
OSBAQAogI2RlZmluZSBXZWFrX2gKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5j
bHVkZSAiSGFuZGxlLmgiCi0jaW5jbHVkZSAiSGFuZGxlSGVhcC5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsRGF0YS5oIgogI2luY2x1ZGUgIlBhc3NXZWFrLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi0v
LyBBIHdlYWtseSByZWZlcmVuY2VkIGhhbmRsZSB0aGF0IGJlY29tZXMgMCB3aGVuIHRoZSB2YWx1
ZSBpdCBwb2ludHMgdG8gaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gY2xhc3MgV2VhayA6IHB1YmxpYyBIYW5kbGU8VD4gewordGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y2xhc3MgV2VhayA6IHB1YmxpYyBXZWFrSW1wbEFjY2Vzc29yPFdlYWs8VD4sIFQ+IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXZWFrKTsKLQotICAgIHVzaW5nIEhhbmRsZTxUPjo6c2xvdDsK
LSAgICB1c2luZyBIYW5kbGU8VD46OnNldFNsb3Q7Ci0KIHB1YmxpYzoKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIEhhbmRsZTxUPjo6RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKKyAgICBmcmllbmQg
Y2xhc3MgV2Vha0ltcGxBY2Nlc3NvcjxXZWFrPFQ+LCBUPjsKKyAgICB0eXBlZGVmIHR5cGVuYW1l
IFdlYWtJbXBsQWNjZXNzb3I8V2VhazxUPiwgVD46OkdldFR5cGUgR2V0VHlwZTsKIAotICAgIFdl
YWsoKQotICAgICAgICA6IEhhbmRsZTxUPigpCi0gICAgewotICAgIH0KLQotICAgIFdlYWsoc3Rk
OjpudWxscHRyX3QpCi0gICAgICAgIDogSGFuZGxlPFQ+KCkKLSAgICB7Ci0gICAgfQotCi0gICAg
V2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4dGVybmFsVHlwZSBleHRlcm5hbFR5cGUg
PSBFeHRlcm5hbFR5cGUoKSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIgPSAwLCB2b2lkKiBj
b250ZXh0ID0gMCkKLSAgICAgICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhl
YXAoKS0+YWxsb2NhdGUoKSkKLSAgICB7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xv
dCgpKS0+bWFrZVdlYWsoc2xvdCgpLCB3ZWFrT3duZXIsIGNvbnRleHQpOwotICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gSGFuZGxlVHlwZXM8VD46OnRvSlNWYWx1ZShleHRlcm5hbFR5cGUpOwotICAg
ICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QoKSktPndyaXRlQmFycmllcihzbG90KCksIHZh
bHVlKTsKLSAgICAgICAgKnNsb3QoKSA9IHZhbHVlOwotICAgIH0KLQotICAgIGVudW0gQWRvcHRU
YWcgeyBBZG9wdCB9OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFdlYWsoQWRvcHRUYWcsIEhh
bmRsZTxVPiBoYW5kbGUpCi0gICAgICAgIDogSGFuZGxlPFQ+KGhhbmRsZS5zbG90KCkpCi0gICAg
ewotICAgICAgICB2YWxpZGF0ZUNlbGwoZ2V0KCkpOwotICAgIH0KKyAgICBXZWFrKCk7CisgICAg
V2VhayhzdGQ6Om51bGxwdHJfdCk7CisgICAgV2VhayhKU0dsb2JhbERhdGEmLCBHZXRUeXBlID0g
R2V0VHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqID0gMCwgdm9pZCogY29udGV4dCA9IDApOwogCiAg
ICAgZW51bSBIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcgeyBIYXNoVGFibGVEZWxldGVkVmFsdWUg
fTsKLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc2xv
dCgpID09IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9Ci0gICAgV2VhayhIYXNoVGFibGVEZWxl
dGVkVmFsdWVUYWcpCi0gICAgICAgIDogSGFuZGxlPFQ+KGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
KQotICAgIHsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBXZWFrKGNvbnN0IFBh
c3NXZWFrPFU+JiBvdGhlcikKLSAgICAgICAgOiBIYW5kbGU8VD4ob3RoZXIubGVha0hhbmRsZSgp
KQotICAgIHsKLSAgICB9Ci0KLSAgICB+V2VhaygpCi0gICAgewotICAgICAgICBjbGVhcigpOwot
ICAgIH0KLQotICAgIHZvaWQgc3dhcChXZWFrJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEhhbmRs
ZTxUPjo6c3dhcChvdGhlcik7Ci0gICAgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKSBjb25zdDsKKyAgICBXZWFrKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZyk7CiAKLSAgICBX
ZWFrJiBvcGVyYXRvcj0oY29uc3QgUGFzc1dlYWs8VD4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBXZWFrKGNvbnN0IFBhc3NXZWFrPFU+Jik7CiAKLSAgICBFeHRlcm5hbFR5cGUgZ2V0KCkg
Y29uc3QgeyByZXR1cm4gIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdChzbG90KCkpOyB9Ci0g
ICAgCi0gICAgUGFzc1dlYWs8VD4gcmVsZWFzZSgpIHsgUGFzc1dlYWs8VD4gdG1wID0gYWRvcHRX
ZWFrPFQ+KHNsb3QoKSk7IHNldFNsb3QoMCk7IHJldHVybiB0bXA7IH0KKyAgICB+V2VhaygpOwog
Ci0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBpZiAoIXNsb3QoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5kZWFsbG9j
YXRlKHNsb3QoKSk7Ci0gICAgICAgIHNldFNsb3QoMCk7Ci0gICAgfQorICAgIHZvaWQgc3dhcChX
ZWFrJik7CisgICAgV2VhayYgb3BlcmF0b3I9KGNvbnN0IFBhc3NXZWFrPFQ+Jik7CiAgICAgCi0g
ICAgSGFuZGxlU2xvdCBsZWFrSGFuZGxlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChIYW5kbGVI
ZWFwOjpoZWFwRm9yKHNsb3QoKSktPmhhc0ZpbmFsaXplcihzbG90KCkpKTsKLSAgICAgICAgSGFu
ZGxlU2xvdCByZXN1bHQgPSBzbG90KCk7Ci0gICAgICAgIHNldFNsb3QoMCk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CisKKyAgICAv
LyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8g
Ym9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBKU1ZhbHVl
IChIYW5kbGVCYXNlOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVj
aWZpZWRCb29sVHlwZSooKSBjb25zdDsKIAorICAgIFBhc3NXZWFrPFQ+IHJlbGVhc2UoKTsKKyAg
ICB2b2lkIGNsZWFyKCk7CisgICAgCiBwcml2YXRlOgotICAgIHN0YXRpYyBIYW5kbGVTbG90IGhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SGFuZGxlU2xv
dD4oLTEpOyB9CisgICAgc3RhdGljIFdlYWtJbXBsKiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsK
KworICAgIFdlYWtJbXBsKiBtX2ltcGw7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgV2VhazxUPjo6V2VhaygpCisgICAgOiBtX2ltcGwoMCkKK3sKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWsoc3RkOjpudWxscHRyX3QpCisgICAgOiBtX2lt
cGwoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWso
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB0eXBlbmFtZSBXZWFrPFQ+OjpHZXRUeXBlIGdldFR5
cGUsIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyLCB2b2lkKiBjb250ZXh0KQorICAgIDogbV9p
bXBsKGdsb2JhbERhdGEuaGVhcC53ZWFrSGVhcCgpLT5hbGxvY2F0ZShnZXRUeXBlLCB3ZWFrT3du
ZXIsIGNvbnRleHQpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBX
ZWFrPFQ+Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
aW1wbCA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIFdlYWs8VD46OldlYWsodHlwZW5hbWUgV2VhazxUPjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVGFnKQorICAgIDogbV9pbXBsKGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiAgaW5saW5lIFdlYWs8
VD46OldlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG90aGVyKQorICAgIDogbV9pbXBsKG90aGVyLmxl
YWtJbXBsKCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+Ojp+
V2VhaygpCit7CisgICAgY2xlYXIoKTsKK30KKwogdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZv
aWQgc3dhcChXZWFrPFQ+JiBhLCBXZWFrPFQ+JiBiKQogewogICAgIGEuc3dhcChiKTsKIH0KIAor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgV2VhazxUPjo6c3dhcChXZWFrJiBvdGhl
cikKK3sKKyAgICBzdGQ6OnN3YXAobV9pbXBsLCBvdGhlci5tX2ltcGwpOworfQorCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPiYgV2VhazxUPjo6b3BlcmF0b3I9KGNvbnN0IFBh
c3NXZWFrPFQ+JiBvKQogewogICAgIGNsZWFyKCk7Ci0gICAgc2V0U2xvdChvLmxlYWtIYW5kbGUo
KSk7CisgICAgbV9pbXBsID0gby5sZWFrSW1wbCgpOwogICAgIHJldHVybiAqdGhpczsKIH0KIAor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgV2VhazxUPjo6b3BlcmF0b3IhKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1faW1wbCB8fCAhbV9pbXBsLT5qc1ZhbHVlKCkgfHwgbV9pbXBs
LT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgV2VhazxUPjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdAorewor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPighISp0aGlz
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+IFdlYWs8VD46
OnJlbGVhc2UoKQoreworICAgIFBhc3NXZWFrPFQ+IHRtcCA9IGFkb3B0V2VhazxUPihtX2ltcGwp
OworICAgIG1faW1wbCA9IDA7CisgICAgcmV0dXJuIHRtcDsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHZvaWQgV2VhazxUPjo6Y2xlYXIoKQoreworICAgIGlmICghbV9pbXBsKQor
ICAgICAgICByZXR1cm47CisgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUobV9pbXBsKTsKKyAgICBt
X2ltcGwgPSAwOworfQorICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWtJbXBs
KiBXZWFrPFQ+OjpoYXNoVGFibGVEZWxldGVkVmFsdWUoKQoreworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PFdlYWtJbXBsKj4oLTEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFt
ZXNwYWNlIFdURiB7CkBAIC0xNTEsNyArMTcxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhhc2hUcmFpdHM8SgogICAgIHN0YXRpYyBQYXNzT3V0VHlwZSBwYXNzT3V0KFN0b3JhZ2VU
eXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUucmVsZWFzZSgpOyB9CiAgICAgc3RhdGljIFBhc3NP
dXRUeXBlIHBhc3NPdXQoRW1wdHlWYWx1ZVR5cGUpIHsgcmV0dXJuIFBhc3NPdXRUeXBlKCk7IH0K
IAotICAgIHR5cGVkZWYgdHlwZW5hbWUgU3RvcmFnZVR5cGU6OkV4dGVybmFsVHlwZSBQZWVrVHlw
ZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFN0b3JhZ2VUeXBlOjpHZXRUeXBlIFBlZWtUeXBlOwog
ICAgIHN0YXRpYyBQZWVrVHlwZSBwZWVrKGNvbnN0IFN0b3JhZ2VUeXBlJiB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUuZ2V0KCk7IH0KICAgICBzdGF0aWMgUGVla1R5cGUgcGVlayhFbXB0eVZhbHVlVHlw
ZSkgeyByZXR1cm4gUGVla1R5cGUoKTsgfQogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYWtCbG9jay5oIgorCisj
aW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkhlYXBSb290VmlzaXRvci5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworV2Vha0Jsb2NrKiBXZWFrQmxvY2s6
OmNyZWF0ZSgpCit7CisgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9jYXRpb24gPSBQYWdl
QWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKGJsb2NrU2l6ZSwgYmxvY2tTaXplLCBPU0FsbG9j
YXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0
aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gbmV3IChOb3ROdWxsLCBhbGxvY2F0
aW9uLmJhc2UoKSkgV2Vha0Jsb2NrKGFsbG9jYXRpb24pOworfQorCit2b2lkIFdlYWtCbG9jazo6
ZGVzdHJveShXZWFrQmxvY2sqIGJsb2NrKQoreworICAgIGJsb2NrLT5tX2FsbG9jYXRpb24uZGVh
bGxvY2F0ZSgpOworfQorCitXZWFrQmxvY2s6OldlYWtCbG9jayhQYWdlQWxsb2NhdGlvbkFsaWdu
ZWQmIGFsbG9jYXRpb24pCisgICAgOiBIZWFwQmxvY2soYWxsb2NhdGlvbikKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHdlYWtJbXBsQ291bnQoKTsgKytpKSB7CisgICAgICAgIFdlYWtJ
bXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsKKyAgICAgICAgbmV3IChOb3ROdWxsLCB3
ZWFrSW1wbCkgV2Vha0ltcGw7CisgICAgICAgIGFkZFRvRnJlZUxpc3QoJm1fc3dlZXBSZXN1bHQu
ZnJlZUxpc3QsIHdlYWtJbXBsKTsKKyAgICB9CisKKyAgICBBU1NFUlQoIW1fc3dlZXBSZXN1bHQu
aXNOdWxsKCkgJiYgbV9zd2VlcFJlc3VsdC5ibG9ja0lzRnJlZSk7Cit9CisKK3ZvaWQgV2Vha0Js
b2NrOjpmaW5hbGl6ZUFsbCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWFrSW1w
bENvdW50KCk7ICsraSkgeworICAgICAgICBXZWFrSW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxz
KClbaV07CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA+PSBXZWFrSW1wbDo6RmluYWxp
emVkKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHdlYWtJbXBsLT5zZXRTdGF0ZShX
ZWFrSW1wbDo6RGVhZCk7CisgICAgICAgIGZpbmFsaXplKHdlYWtJbXBsKTsKKyAgICB9Cit9CisK
K3ZvaWQgV2Vha0Jsb2NrOjpzd2VlcCgpCit7CisgICAgaWYgKCFtX3N3ZWVwUmVzdWx0LmlzTnVs
bCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTd2VlcFJlc3VsdCBzd2VlcFJlc3VsdDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYWtJbXBsQ291bnQoKTsgKytpKSB7CisgICAgICAg
IFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsKKyAgICAgICAgaWYgKHdlYWtJ
bXBsLT5zdGF0ZSgpID09IFdlYWtJbXBsOjpEZWFkKQorICAgICAgICAgICAgZmluYWxpemUod2Vh
a0ltcGwpOworICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkRlYWxs
b2NhdGVkKQorICAgICAgICAgICAgYWRkVG9GcmVlTGlzdCgmc3dlZXBSZXN1bHQuZnJlZUxpc3Qs
IHdlYWtJbXBsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3dlZXBSZXN1bHQuYmxvY2tJ
c0ZyZWUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtX3N3ZWVwUmVzdWx0ID0gc3dlZXBSZXN1bHQ7
CisgICAgQVNTRVJUKCFtX3N3ZWVwUmVzdWx0LmlzTnVsbCgpKTsKK30KKwordm9pZCBXZWFrQmxv
Y2s6OnZpc2l0TGl2ZVdlYWtJbXBscyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikK
K3sKKyAgICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBsZXRlbHkgZW1wdHksIGEgdmlzaXQgd29uJ3Qg
aGF2ZSBhbnkgZWZmZWN0LgorICAgIGlmICghbV9zd2VlcFJlc3VsdC5pc051bGwoKSAmJiBtX3N3
ZWVwUmVzdWx0LmJsb2NrSXNGcmVlKQorICAgICAgICByZXR1cm47CisKKyAgICBTbG90VmlzaXRv
ciYgdmlzaXRvciA9IGhlYXBSb290VmlzaXRvci52aXNpdG9yKCk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHdlYWtJbXBsQ291bnQoKTsgKytpKSB7CisgICAgICAgIFdlYWtJbXBsKiB3
ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsKKyAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgp
ICE9IFdlYWtJbXBsOjpMaXZlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29u
c3QgSlNWYWx1ZSYganNWYWx1ZSA9IHdlYWtJbXBsLT5qc1ZhbHVlKCk7CisgICAgICAgIGlmICgh
anNWYWx1ZSB8fCAhanNWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIEpTQ2VsbCoganNDZWxsID0ganNWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKEhl
YXA6OmlzTWFya2VkKGpzQ2VsbCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBX
ZWFrSGFuZGxlT3duZXIqIHdlYWtIYW5kbGVPd25lciA9IHdlYWtJbXBsLT53ZWFrSGFuZGxlT3du
ZXIoKTsKKyAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXIpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4oanNW
YWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmY29uc3RfY2FzdDxKU1ZhbHVl
Jj4oanNWYWx1ZSkpOworICAgIH0KK30KKwordm9pZCBXZWFrQmxvY2s6OnZpc2l0RGVhZFdlYWtJ
bXBscyhIZWFwUm9vdFZpc2l0b3ImKQoreworICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVs
eSBlbXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCisgICAgaWYgKCFtX3N3ZWVw
UmVzdWx0LmlzTnVsbCgpICYmIG1fc3dlZXBSZXN1bHQuYmxvY2tJc0ZyZWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kp
IHsKKyAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAg
ICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPiBXZWFrSW1wbDo6RGVhZCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGNvbnN0IEpTVmFsdWUmIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNW
YWx1ZSgpOworICAgICAgICBpZiAoIWpzVmFsdWUgfHwgIWpzVmFsdWUuaXNDZWxsKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IGpzVmFsdWUuYXND
ZWxsKCk7CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChqc0NlbGwpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgd2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsK
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV2Vha0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYWtCbG9ja19oCisjZGVmaW5lIFdlYWtCbG9ja19oCisKKyNpbmNsdWRl
ICJIZWFwQmxvY2suaCIKKyNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKKyNpbmNsdWRlICJX
ZWFrSW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8
d3RmL1BhZ2VBbGxvY2F0aW9uQWxpZ25lZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEhlYXBSb290VmlzaXRvcjsKK2NsYXNzIEpT
VmFsdWU7CitjbGFzcyBXZWFrSGFuZGxlT3duZXI7CisKK2NsYXNzIFdlYWtCbG9jayA6IHB1Ymxp
YyBIZWFwQmxvY2sgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tTaXpl
ID0gNCAqIEtCOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tNYXNrID0gfihibG9ja1Np
emUgLSAxKTsKKworICAgIHN0cnVjdCBGcmVlQ2VsbCB7CisgICAgICAgIEZyZWVDZWxsKiBuZXh0
OworICAgIH07CisKKyAgICBzdHJ1Y3QgU3dlZXBSZXN1bHQgeworICAgICAgICBTd2VlcFJlc3Vs
dCgpOworICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0OworCisgICAgICAgIGJvb2wgYmxvY2tJ
c0ZyZWU7CisgICAgICAgIEZyZWVDZWxsKiBmcmVlTGlzdDsKKyAgICB9OworCisgICAgc3RhdGlj
IFdlYWtCbG9jayogY3JlYXRlKCk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShXZWFrQmxvY2sq
KTsKKworICAgIHN0YXRpYyBXZWFrQmxvY2sqIGJsb2NrRm9yKFdlYWtJbXBsKik7CisgICAgc3Rh
dGljIFdlYWtJbXBsKiBhc1dlYWtJbXBsKEZyZWVDZWxsKik7CisKKyAgICB2b2lkIHN3ZWVwKCk7
CisgICAgY29uc3QgU3dlZXBSZXN1bHQmIHN3ZWVwUmVzdWx0KCk7CisgICAgU3dlZXBSZXN1bHQg
dGFrZVN3ZWVwUmVzdWx0KCk7CisKKyAgICB2b2lkIGRlYWxsb2NhdGUoV2Vha0ltcGwqKTsKKwor
ICAgIHZvaWQgdmlzaXRMaXZlV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQg
dmlzaXREZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpOworCisgICAgdm9pZCBmaW5hbGl6
ZUFsbCgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBGcmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFr
SW1wbCopOworCisgICAgV2Vha0Jsb2NrKFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYpOworICAgIFdl
YWtJbXBsKiBmaXJzdFdlYWtJbXBsKCk7CisgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOwor
ICAgIFdlYWtJbXBsKiB3ZWFrSW1wbHMoKTsKKyAgICBzaXplX3Qgd2Vha0ltcGxDb3VudCgpOwor
ICAgIHZvaWQgYWRkVG9GcmVlTGlzdChGcmVlQ2VsbCoqLCBXZWFrSW1wbCopOworCisgICAgU3dl
ZXBSZXN1bHQgbV9zd2VlcFJlc3VsdDsKK307CisKK2lubGluZSBXZWFrQmxvY2s6OlN3ZWVwUmVz
dWx0OjpTd2VlcFJlc3VsdCgpCisgICAgOiBibG9ja0lzRnJlZSh0cnVlKQorICAgICwgZnJlZUxp
c3QoMCkKK3sKKyAgICBBU1NFUlQoaXNOdWxsKCkpOworfQorCitpbmxpbmUgYm9vbCBXZWFrQmxv
Y2s6OlN3ZWVwUmVzdWx0Ojppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiBibG9ja0lzRnJl
ZSAmJiAhZnJlZUxpc3Q7IC8vIFRoaXMgc3RhdGUgaXMgaW1wb3NzaWJsZSwgc28gd2UgY2FuIHVz
ZSBpdCB0byBtZWFuIG51bGwuCit9CisKK2lubGluZSBXZWFrQmxvY2sqIFdlYWtCbG9jazo6Ymxv
Y2tGb3IoV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFdlYWtCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih3ZWFrSW1wbCkgJiBibG9j
a01hc2spOworfQorCitpbmxpbmUgV2Vha0ltcGwqIFdlYWtCbG9jazo6YXNXZWFrSW1wbChGcmVl
Q2VsbCogZnJlZUNlbGwpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0ltcGwq
PihmcmVlQ2VsbCk7Cit9CisKK2lubGluZSBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0IFdlYWtCbG9j
azo6dGFrZVN3ZWVwUmVzdWx0KCkKK3sKKyAgICBTd2VlcFJlc3VsdCB0bXA7CisgICAgc3RkOjpz
d2FwKHRtcCwgbV9zd2VlcFJlc3VsdCk7CisgICAgQVNTRVJUKG1fc3dlZXBSZXN1bHQuaXNOdWxs
KCkpOworICAgIHJldHVybiB0bXA7Cit9CisKK2lubGluZSBjb25zdCBXZWFrQmxvY2s6OlN3ZWVw
UmVzdWx0JiBXZWFrQmxvY2s6OnN3ZWVwUmVzdWx0KCkKK3sKKyAgICByZXR1cm4gbV9zd2VlcFJl
c3VsdDsKK30KKworaW5saW5lIFdlYWtCbG9jazo6RnJlZUNlbGwqIFdlYWtCbG9jazo6YXNGcmVl
Q2VsbChXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
RnJlZUNlbGwqPih3ZWFrSW1wbCk7Cit9CisKK2lubGluZSB2b2lkIFdlYWtCbG9jazo6ZGVhbGxv
Y2F0ZShXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgd2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJ
bXBsOjpEZWFsbG9jYXRlZCk7Cit9CisKK2lubGluZSB2b2lkIFdlYWtCbG9jazo6ZmluYWxpemUo
V2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIEFTU0VSVCh3ZWFrSW1wbC0+c3RhdGUoKSA9PSBX
ZWFrSW1wbDo6RGVhZCk7CisgICAgd2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJbXBsOjpGaW5hbGl6
ZWQpOworICAgIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyID0gd2Vha0ltcGwtPndl
YWtIYW5kbGVPd25lcigpOworICAgIGlmICghd2Vha0hhbmRsZU93bmVyKQorICAgICAgICByZXR1
cm47CisgICAgd2Vha0hhbmRsZU93bmVyLT5maW5hbGl6ZShIYW5kbGU8VW5rbm93bj46OndyYXBT
bG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPih3ZWFrSW1wbC0+anNWYWx1ZSgpKSksIHdlYWtJbXBs
LT5jb250ZXh0KCkpOworfQorCitpbmxpbmUgV2Vha0ltcGwqIFdlYWtCbG9jazo6d2Vha0ltcGxz
KCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXZWFrSW1wbCo+KHRoaXMpICsgKChz
aXplb2YoV2Vha0Jsb2NrKSArIHNpemVvZihXZWFrSW1wbCkgLSAxKSAvIHNpemVvZihXZWFrSW1w
bCkpOworfQorCitpbmxpbmUgc2l6ZV90IFdlYWtCbG9jazo6d2Vha0ltcGxDb3VudCgpCit7Cisg
ICAgcmV0dXJuIChibG9ja1NpemUgLyBzaXplb2YoV2Vha0ltcGwpKSAtICgoc2l6ZW9mKFdlYWtC
bG9jaykgKyBzaXplb2YoV2Vha0ltcGwpIC0gMSkgLyBzaXplb2YoV2Vha0ltcGwpKTsKK30KKwor
aW5saW5lIHZvaWQgV2Vha0Jsb2NrOjphZGRUb0ZyZWVMaXN0KEZyZWVDZWxsKiogZnJlZUxpc3Qs
IFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICBBU1NFUlQod2Vha0ltcGwtPnN0YXRlKCkgPT0g
V2Vha0ltcGw6OkRlYWxsb2NhdGVkKTsKKyAgICBGcmVlQ2VsbCogZnJlZUNlbGwgPSBhc0ZyZWVD
ZWxsKHdlYWtJbXBsKTsKKyAgICBBU1NFUlQoISpmcmVlTGlzdCB8fCAoKGNoYXIqKSpmcmVlTGlz
dCA+IChjaGFyKil0aGlzICYmIChjaGFyKikqZnJlZUxpc3QgPCAoY2hhciopdGhpcyArIGJsb2Nr
U2l6ZSkpOworICAgIEFTU0VSVCgoY2hhciopZnJlZUNlbGwgPiAoY2hhciopdGhpcyAmJiAoY2hh
ciopZnJlZUNlbGwgPCAoY2hhciopdGhpcyArIGJsb2NrU2l6ZSk7CisgICAgZnJlZUNlbGwtPm5l
eHQgPSAqZnJlZUxpc3Q7CisgICAgKmZyZWVMaXN0ID0gZnJlZUNlbGw7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gV2Vha0Jsb2NrX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2Vha0hhbmRsZU93bmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBTbG90
VmlzaXRvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEhhbmRsZTsKKworV2Vha0hhbmRs
ZU93bmVyOjp+V2Vha0hhbmRsZU93bmVyKCkKK3sKK30KKworYm9vbCBXZWFrSGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIFNsb3RW
aXNpdG9yJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2Vha0hhbmRsZU93bmVy
OjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqKQoreworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25l
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRs
ZU93bmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdlYWtIYW5kbGVPd25lcl9oCisjZGVmaW5lIFdlYWtIYW5kbGVPd25lcl9oCisKKyNpbmNs
dWRlICJIYW5kbGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNsb3RWaXNpdG9yOwor
CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFrSGFuZGxlT3duZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNp
dG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCog
Y29udGV4dCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFdlYWtIYW5k
bGVPd25lcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hlYXAuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hlYXAuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWFrSGVhcC5oIgorCisjaW5jbHVkZSAiSGVhcC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworV2Vha0hlYXA6On5XZWFrSGVhcCgpCit7CisgICAgV2Vha0Jsb2NrKiBu
ZXh0ID0gMDsKKyAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxv
Y2sqPihtX2Jsb2Nrcy5oZWFkKCkpOyBibG9jazsgYmxvY2sgPSBuZXh0KSB7CisgICAgICAgIG5l
eHQgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihibG9jay0+bmV4dCgpKTsKKyAgICAgICAgV2Vh
a0Jsb2NrOjpkZXN0cm95KGJsb2NrKTsKKyAgICB9CisgICAgbV9ibG9ja3MuY2xlYXIoKTsKK30K
Kwordm9pZCBXZWFrSGVhcDo6ZmluYWxpemVBbGwoKQoreworICAgIGZvciAoV2Vha0Jsb2NrKiBi
bG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7IGJsb2NrOyBi
bG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpKQorICAgICAgICBi
bG9jay0+ZmluYWxpemVBbGwoKTsKK30KKwordm9pZCBXZWFrSGVhcDo6dmlzaXRMaXZlV2Vha0lt
cGxzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKFdlYWtCbG9jayogYmxv
Y2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihtX2Jsb2Nrcy5oZWFkKCkpOyBibG9jazsgYmxv
Y2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihibG9jay0+bmV4dCgpKSkKKyAgICAgICAgYmxv
Y2stPnZpc2l0TGl2ZVdlYWtJbXBscyh2aXNpdG9yKTsKK30KKwordm9pZCBXZWFrSGVhcDo6dmlz
aXREZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKFdl
YWtCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihtX2Jsb2Nrcy5oZWFkKCkp
OyBibG9jazsgYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihibG9jay0+bmV4dCgpKSkK
KyAgICAgICAgYmxvY2stPnZpc2l0RGVhZFdlYWtJbXBscyh2aXNpdG9yKTsKK30KKwordm9pZCBX
ZWFrSGVhcDo6c3dlZXAoKQoreworICAgIFdlYWtCbG9jayogbmV4dDsKKyAgICBmb3IgKFdlYWtC
bG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPihtX2Jsb2Nrcy5oZWFkKCkpOyBi
bG9jazsgYmxvY2sgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBzdGF0aWNfY2FzdDxXZWFrQmxv
Y2sqPihibG9jay0+bmV4dCgpKTsKKworICAgICAgICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBsZXRl
bHkgZW1wdHksIGEgbmV3IHN3ZWVwIHdvbid0IGhhdmUgYW55IGVmZmVjdC4KKyAgICAgICAgaWYg
KCFibG9jay0+c3dlZXBSZXN1bHQoKS5pc051bGwoKSAmJiBibG9jay0+c3dlZXBSZXN1bHQoKS5i
bG9ja0lzRnJlZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJsb2NrLT50YWtl
U3dlZXBSZXN1bHQoKTsgLy8gRm9yY2UgYSBuZXcgc3dlZXAgYnkgZGlzY2FyZGluZyB0aGUgbGFz
dCBzd2VlcC4KKyAgICAgICAgYmxvY2stPnN3ZWVwKCk7CisgICAgfQorfQorCit2b2lkIFdlYWtI
ZWFwOjpyZXNldEFsbG9jYXRvcigpCit7CisgICAgbV9hbGxvY2F0b3IgPSAwOworICAgIG1fbmV4
dEFsbG9jYXRvciA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7Cit9
CisKK1dlYWtCbG9jazo6RnJlZUNlbGwqIFdlYWtIZWFwOjpmaW5kQWxsb2NhdG9yKCkKK3sKKyAg
ICBpZiAoV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWxsb2NhdG9yID0gdHJ5RmluZEFsbG9jYXRvcigp
KQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yOworCisgICAgbV9oZWFwLT5hZGRUb1dhdGVyTWFy
ayhXZWFrQmxvY2s6OmJsb2NrU2l6ZSk7CisKKyAgICAvLyBhZGRUb1dhdGVyTWFyaygpIG1heSBj
YXVzZSBhIEdDLCBzbyB0cnkgYWdhaW4uCisgICAgaWYgKFdlYWtCbG9jazo6RnJlZUNlbGwqIGFs
bG9jYXRvciA9IHRyeUZpbmRBbGxvY2F0b3IoKSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsK
KworICAgIHJldHVybiBhZGRBbGxvY2F0b3IoKTsKK30KKworV2Vha0Jsb2NrOjpGcmVlQ2VsbCog
V2Vha0hlYXA6OnRyeUZpbmRBbGxvY2F0b3IoKQoreworICAgIHdoaWxlIChtX25leHRBbGxvY2F0
b3IpIHsKKyAgICAgICAgV2Vha0Jsb2NrKiBibG9jayA9IG1fbmV4dEFsbG9jYXRvcjsKKyAgICAg
ICAgbV9uZXh0QWxsb2NhdG9yID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9uZXh0QWxsb2Nh
dG9yLT5uZXh0KCkpOworCisgICAgICAgIGJsb2NrLT5zd2VlcCgpOworICAgICAgICBXZWFrQmxv
Y2s6OlN3ZWVwUmVzdWx0IHN3ZWVwUmVzdWx0ID0gYmxvY2stPnRha2VTd2VlcFJlc3VsdCgpOwor
ICAgICAgICBpZiAoc3dlZXBSZXN1bHQuZnJlZUxpc3QpCisgICAgICAgICAgICByZXR1cm4gc3dl
ZXBSZXN1bHQuZnJlZUxpc3Q7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1dlYWtCbG9j
azo6RnJlZUNlbGwqIFdlYWtIZWFwOjphZGRBbGxvY2F0b3IoKQoreworICAgIFdlYWtCbG9jayog
YmxvY2sgPSBXZWFrQmxvY2s6OmNyZWF0ZSgpOworICAgIG1fYmxvY2tzLmFwcGVuZChibG9jayk7
CisgICAgV2Vha0Jsb2NrOjpTd2VlcFJlc3VsdCBzd2VlcFJlc3VsdCA9IGJsb2NrLT50YWtlU3dl
ZXBSZXN1bHQoKTsKKyAgICBBU1NFUlQoIXN3ZWVwUmVzdWx0LmlzTnVsbCgpICYmIHN3ZWVwUmVz
dWx0LmZyZWVMaXN0KTsKKyAgICByZXR1cm4gc3dlZXBSZXN1bHQuZnJlZUxpc3Q7Cit9CisKK3Zv
aWQgV2Vha0hlYXA6OnJlbW92ZUFsbG9jYXRvcihXZWFrQmxvY2sqIGJsb2NrKQoreworICAgIG1f
YmxvY2tzLnJlbW92ZShibG9jayk7CisgICAgV2Vha0Jsb2NrOjpkZXN0cm95KGJsb2NrKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9X
ZWFrSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtI
ZWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGVh
cC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWFrSGVhcF9oCisjZGVmaW5lIFdlYWtIZWFwX2gKKworI2luY2x1ZGUgIldlYWtCbG9jay5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcDsKK2NsYXNzIFdlYWtJbXBsOworCitjbGFz
cyBXZWFrSGVhcCB7CitwdWJsaWM6CisgICAgV2Vha0hlYXAoSGVhcCopOworICAgIHZvaWQgZmlu
YWxpemVBbGwoKTsKKyAgICB+V2Vha0hlYXAoKTsKKworICAgIFdlYWtJbXBsKiBhbGxvY2F0ZShK
U1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqID0gMCwgdm9pZCogY29udGV4dCA9IDApOworICAgIHN0
YXRpYyB2b2lkIGRlYWxsb2NhdGUoV2Vha0ltcGwqKTsKKworICAgIHZvaWQgdmlzaXRMaXZlV2Vh
a0ltcGxzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXREZWFkV2Vha0ltcGxzKEhl
YXBSb290VmlzaXRvciYpOworCisgICAgdm9pZCBzd2VlcCgpOworICAgIHZvaWQgcmVzZXRBbGxv
Y2F0b3IoKTsKKworcHJpdmF0ZToKKyAgICBKU19FWFBPUlRfUFJJVkFURSBXZWFrQmxvY2s6OkZy
ZWVDZWxsKiBmaW5kQWxsb2NhdG9yKCk7CisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogdHJ5Rmlu
ZEFsbG9jYXRvcigpOworICAgIFdlYWtCbG9jazo6RnJlZUNlbGwqIGFkZEFsbG9jYXRvcigpOwor
ICAgIHZvaWQgcmVtb3ZlQWxsb2NhdG9yKFdlYWtCbG9jayopOworCisgICAgV2Vha0Jsb2NrOjpG
cmVlQ2VsbCogbV9hbGxvY2F0b3I7CisgICAgV2Vha0Jsb2NrKiBtX25leHRBbGxvY2F0b3I7Cisg
ICAgRG91Ymx5TGlua2VkTGlzdDxIZWFwQmxvY2s+IG1fYmxvY2tzOworICAgIEhlYXAqIG1faGVh
cDsKK307CisKK2lubGluZSBXZWFrSGVhcDo6V2Vha0hlYXAoSGVhcCogaGVhcCkKKyAgICA6IG1f
YWxsb2NhdG9yKDApCisgICAgLCBtX25leHRBbGxvY2F0b3IoMCkKKyAgICAsIG1faGVhcChoZWFw
KQoreworfQorCitpbmxpbmUgV2Vha0ltcGwqIFdlYWtIZWFwOjphbGxvY2F0ZShKU1ZhbHVlIGpz
VmFsdWUsIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyLCB2b2lkKiBjb250ZXh0KQor
eworICAgIFdlYWtCbG9jazo6RnJlZUNlbGwqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yOworICAg
IGlmICghYWxsb2NhdG9yKQorICAgICAgICBhbGxvY2F0b3IgPSBmaW5kQWxsb2NhdG9yKCk7Cisg
ICAgbV9hbGxvY2F0b3IgPSBhbGxvY2F0b3ItPm5leHQ7CisKKyAgICBXZWFrSW1wbCogd2Vha0lt
cGwgPSBXZWFrQmxvY2s6OmFzV2Vha0ltcGwoYWxsb2NhdG9yKTsKKyAgICByZXR1cm4gbmV3IChO
b3ROdWxsLCB3ZWFrSW1wbCkgV2Vha0ltcGwoanNWYWx1ZSwgd2Vha0hhbmRsZU93bmVyLCBjb250
ZXh0KTsKK30KKworaW5saW5lIHZvaWQgV2Vha0hlYXA6OmRlYWxsb2NhdGUoV2Vha0ltcGwqIHdl
YWtJbXBsKQoreworICAgIFdlYWtCbG9jazo6YmxvY2tGb3Iod2Vha0ltcGwpLT5kZWFsbG9jYXRl
KHdlYWtJbXBsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBXZWFrSGVh
cF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBsLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW1wbC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vha0ltcGxfaAorI2RlZmlu
ZSBXZWFrSW1wbF9oCisKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBXZWFrSGFuZGxlT3duZXI7CisKK2NsYXNzIFdlYWtJbXBsIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIFN0YXRlIHsKKyAgICAgICAgTGl2ZSAgICAgICAgPSAweDAsCisgICAgICAgIERlYWQg
ICAgICAgID0gMHgxLAorICAgICAgICBGaW5hbGl6ZWQgICA9IDB4MiwKKyAgICAgICAgRGVhbGxv
Y2F0ZWQgPSAweDMKKyAgICB9OworCisgICAgZW51bSB7CisgICAgICAgIFN0YXRlTWFzayAgID0g
MHgzCisgICAgfTsKKworICAgIFdlYWtJbXBsKCk7CisgICAgV2Vha0ltcGwoSlNWYWx1ZSwgV2Vh
a0hhbmRsZU93bmVyKiwgdm9pZCogY29udGV4dCk7CisKKyAgICBTdGF0ZSBzdGF0ZSgpOworICAg
IHZvaWQgc2V0U3RhdGUoU3RhdGUpOworCisgICAgY29uc3QgSlNWYWx1ZSYganNWYWx1ZSgpOwor
ICAgIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyKCk7CisgICAgdm9pZCogY29udGV4
dCgpOworCisgICAgc3RhdGljIFdlYWtJbXBsKiBhc1dlYWtJbXBsKEpTVmFsdWUqKTsKKworcHJp
dmF0ZToKKyAgICBjb25zdCBKU1ZhbHVlIG1fanNWYWx1ZTsKKyAgICBXZWFrSGFuZGxlT3duZXIq
IG1fd2Vha0hhbmRsZU93bmVyOworICAgIHZvaWQqIG1fY29udGV4dDsKK307CisKK2lubGluZSBX
ZWFrSW1wbDo6V2Vha0ltcGwoKQorICAgIDogbV93ZWFrSGFuZGxlT3duZXIoMCkKKyAgICAsIG1f
Y29udGV4dCgwKQoreworICAgIHNldFN0YXRlKERlYWxsb2NhdGVkKTsKK30KKworaW5saW5lIFdl
YWtJbXBsOjpXZWFrSW1wbChKU1ZhbHVlIGpzVmFsdWUsIFdlYWtIYW5kbGVPd25lciogd2Vha0hh
bmRsZU93bmVyLCB2b2lkKiBjb250ZXh0KQorICAgIDogbV9qc1ZhbHVlKGpzVmFsdWUpCisgICAg
LCBtX3dlYWtIYW5kbGVPd25lcih3ZWFrSGFuZGxlT3duZXIpCisgICAgLCBtX2NvbnRleHQoY29u
dGV4dCkKK3sKKyAgICBBU1NFUlQoc3RhdGUoKSA9PSBMaXZlKTsKK30KKworaW5saW5lIFdlYWtJ
bXBsOjpTdGF0ZSBXZWFrSW1wbDo6c3RhdGUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
dGF0ZT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fd2Vha0hhbmRsZU93bmVyKSAmIFN0
YXRlTWFzayk7Cit9CisKK2lubGluZSB2b2lkIFdlYWtJbXBsOjpzZXRTdGF0ZShXZWFrSW1wbDo6
U3RhdGUgc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlID49IHRoaXMtPnN0YXRlKCkpOworICAg
IG1fd2Vha0hhbmRsZU93bmVyID0gcmVpbnRlcnByZXRfY2FzdDxXZWFrSGFuZGxlT3duZXIqPigo
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fd2Vha0hhbmRsZU93bmVyKSAmIH5TdGF0ZU1h
c2spIHwgc3RhdGUpOworfQorCitpbmxpbmUgY29uc3QgSlNWYWx1ZSYgV2Vha0ltcGw6OmpzVmFs
dWUoKQoreworICAgIHJldHVybiBtX2pzVmFsdWU7Cit9CisKK2lubGluZSBXZWFrSGFuZGxlT3du
ZXIqIFdlYWtJbXBsOjp3ZWFrSGFuZGxlT3duZXIoKQoreworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PFdlYWtIYW5kbGVPd25lcio+KChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93
ZWFrSGFuZGxlT3duZXIpICYgflN0YXRlTWFzaykpOworfQorCitpbmxpbmUgdm9pZCogV2Vha0lt
cGw6OmNvbnRleHQoKQoreworICAgIHJldHVybiBtX2NvbnRleHQ7Cit9CisKK2lubGluZSBXZWFr
SW1wbCogV2Vha0ltcGw6OmFzV2Vha0ltcGwoSlNWYWx1ZSogc2xvdCkKK3sKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxXZWFrSW1wbCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNsb3Qp
ICsgT0JKRUNUX09GRlNFVE9GKFdlYWtJbXBsLCBtX2pzVmFsdWUpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBXZWFrSW1wbF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NzUsNyArMzU3NSw3
IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KIE5hdGl2ZUV4ZWN1
dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIElu
dHJpbnNpYyBpbnRyaW5zaWMpCiB7CiAgICAgSG9zdEZ1bmN0aW9uU3R1Yk1hcDo6QWRkUmVzdWx0
IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFBhc3NXZWFrPE5h
dGl2ZUV4ZWN1dGFibGU+KCkpOwotICAgIGlmICghKmVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQpIHsK
KyAgICBpZiAoIWVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQpIHsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNvZGU7CiAgICAgICAgIGlmIChnZW5lcmF0b3IpIHsKICAgICAgICAgICAgIGlm
IChnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDcgKzM1MSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgogICAg
IGlubGluZSBUbyBqc0Nhc3QoRnJvbSogZnJvbSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChmcm9t
LT5pbmhlcml0cygmV1RGOjpSZW1vdmVQb2ludGVyPFRvPjo6VHlwZTo6c19pbmZvKSk7CisgICAg
ICAgIEFTU0VSVCghZnJvbSB8fCBmcm9tLT5pbmhlcml0cygmV1RGOjpSZW1vdmVQb2ludGVyPFRv
Pjo6VHlwZTo6c19pbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUbz4oZnJvbSk7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBpbmxpbmUg
dm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkCiAgICAgICAgIC8vIFRoZXJlIGFscmVh
ZHkgaXMgYW4gZW50cnkhIC0gd2Ugc2hvdWxkIG9ubHkgaGl0IHRoaXMgd2hlbiBkZXNwZWNpZnlp
bmcuCiAgICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3IuZ2V0KCkuc2Vjb25kLT5tX3NwZWNp
ZmljVmFsdWVJblByZXZpb3VzKTsKICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm1fc3BlY2lm
aWNWYWx1ZUluUHJldmlvdXMpOwotICAgICAgICBtYXAoKS0+c2V0KHJlc3VsdC5pdGVyYXRvciwg
c3RydWN0dXJlKTsKKyAgICAgICAgbWFwKCktPnNldChnbG9iYWxEYXRhLCByZXN1bHQuaXRlcmF0
b3IuZ2V0KCkuZmlyc3QsIHN0cnVjdHVyZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTQ2VsbDsKIGNsYXNzIFN0cnVjdHVyZTsK
IAogY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKQEAgLTgzLDEwICs4NCwxMCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBIYW5kbGVT
bG90IHNsb3QgPSB0aGlzLT5zbG90KCk7Ci0gICAgICAgIGlmICghc2xvdCkKKyAgICAgICAgV2Vh
a0ltcGwqIGltcGwgPSB0aGlzLT53ZWFrSW1wbCgpOworICAgICAgICBpZiAoIWltcGwpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxs
b2NhdGUoc2xvdCk7CisgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgIH0K
IAogICAgIGlubGluZSB2b2lkIGFkZChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKQEAgLTEw
NSwxOCArMTA2LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFRyYW5zaXRpb25NYXAqPihtX2RhdGEpOwogICAgIH0KIAotICAgIEhhbmRsZVNsb3Qgc2xvdCgp
IGNvbnN0CisgICAgV2Vha0ltcGwqIHdlYWtJbXBsKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8SGFuZGxlU2xvdD4obV9kYXRhICYgflVzaW5nU2luZ2xlU2xvdEZsYWcpOworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXZWFrSW1wbCo+KG1fZGF0YSAmIH5Vc2luZ1NpbmdsZVNs
b3RGbGFnKTsKICAgICB9CiAKICAgICB2b2lkIHNldE1hcChUcmFuc2l0aW9uTWFwKiBtYXApCiAg
ICAgewogICAgICAgICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7CiAgICAgICAgIAotICAg
ICAgICBpZiAoSGFuZGxlU2xvdCBzbG90ID0gdGhpcy0+c2xvdCgpKQotICAgICAgICAgICAgSGFu
ZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShzbG90KTsKKyAgICAgICAgaWYgKFdl
YWtJbXBsKiBpbXBsID0gdGhpcy0+d2Vha0ltcGwoKSkKKyAgICAgICAgICAgIFdlYWtIZWFwOjpk
ZWFsbG9jYXRlKGltcGwpOwogCiAgICAgICAgIC8vIFRoaXMgaW1wbGljaXRseSBjbGVhcnMgdGhl
IGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2UncmUgdXNpbmcgYSBzaW5nbGUgdHJhbnNpdGlvbgogICAg
ICAgICBtX2RhdGEgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtYXApOwpAQCAtMTI3LDkg
KzEyOCw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlKiBzaW5nbGVUcmFuc2l0aW9uKCkgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKLSAgICAgICAg
aWYgKEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKSkgewotICAgICAgICAgICAgaWYgKCpz
bG90KQotICAgICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+
KHNsb3QtPmFzQ2VsbCgpKTsKKyAgICAgICAgaWYgKFdlYWtJbXBsKiBpbXBsID0gdGhpcy0+d2Vh
a0ltcGwoKSkgeworICAgICAgICAgICAgaWYgKGltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6Okxp
dmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4o
aW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CkBAIC0xMzcsMTQgKzEzOCwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0U2luZ2xl
VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwotICAgICAgICBI
YW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCk7Ci0gICAgICAgIGlmICghc2xvdCkgewotICAg
ICAgICAgICAgc2xvdCA9IGdsb2JhbERhdGEuaGVhcC5oYW5kbGVIZWFwKCktPmFsbG9jYXRlKCk7
Ci0gICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5tYWtlV2VhayhzbG90LCAw
LCAwKTsKLSAgICAgICAgICAgIG1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHNs
b3QpIHwgVXNpbmdTaW5nbGVTbG90RmxhZzsKLSAgICAgICAgfQotICAgICAgICBIYW5kbGVIZWFw
OjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgcmVpbnRlcnByZXRfY2FzdDxKU0Nl
bGwqPihzdHJ1Y3R1cmUpKTsKLSAgICAgICAgKnNsb3QgPSByZWludGVycHJldF9jYXN0PEpTQ2Vs
bCo+KHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChXZWFrSW1wbCogaW1wbCA9IHRoaXMtPndlYWtJ
bXBsKCkpCisgICAgICAgICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShpbXBsKTsKKyAgICAgICAg
V2Vha0ltcGwqIGltcGwgPSBnbG9iYWxEYXRhLmhlYXAud2Vha0hlYXAoKS0+YWxsb2NhdGUocmVp
bnRlcnByZXRfY2FzdDxKU0NlbGwqPihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgbV9kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW1wbCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwogICAg
IH0KIAogICAgIGludHB0cl90IG1fZGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtHQ01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtHQ01hcC5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QCBjbGFzcyBXZWFrR0NNYXAgOiBwcml2YXRlIFdlYWtIYW5kbGVPd25lCiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2Vha0dDTWFwKTsKIAot
ICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlUeXBlLCBIYW5kbGVTbG90LCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmc+IE1hcFR5cGU7CisgICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5cGUsIFdlYWtJbXBsKiwg
SGFzaEFyZywgS2V5VHJhaXRzQXJnPiBNYXBUeXBlOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFu
ZGxlVHlwZXM8TWFwcGVkVHlwZT46OkV4dGVybmFsVHlwZSBFeHRlcm5hbFR5cGU7CiAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBtYXBfaXRlcmF0b3I7CiAKQEAgLTY0LDgg
KzY0LDcgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5cGU+IGdldCgpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0LCBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6
Z2V0RnJvbVNsb3QobV9pdGVyYXRvci0+c2Vjb25kKSk7IH0KLSAgICAgICAgc3RkOjpwYWlyPEtl
eVR5cGUsIEhhbmRsZVNsb3Q+IGdldFNsb3QoKSBjb25zdCB7IHJldHVybiAqbV9pdGVyYXRvcjsg
fQorICAgICAgICBzdGQ6OnBhaXI8S2V5VHlwZSwgRXh0ZXJuYWxUeXBlPiBnZXQoKSBjb25zdCB7
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihtX2l0ZXJhdG9yLT5maXJzdCwgSGFuZGxlVHlwZXM8TWFw
cGVkVHlwZT46OmdldEZyb21TbG90KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KCZtX2l0ZXJhdG9yLT5z
ZWNvbmQtPmpzVmFsdWUoKSkpKTsgfQogICAgICAgICAKICAgICAgICAgaXRlcmF0b3ImIG9wZXJh
dG9yKysoKSB7ICsrbV9pdGVyYXRvcjsgcmV0dXJuICp0aGlzOyB9CiAgICAgICAgIApAQCAtOTAs
NyArODksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtYXBfaXRlcmF0b3IgZW5kID0gbV9t
YXAuZW5kKCk7CiAgICAgICAgIGZvciAobWFwX2l0ZXJhdG9yIHB0ciA9IG1fbWFwLmJlZ2luKCk7
IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihwdHIt
PnNlY29uZCktPmRlYWxsb2NhdGUocHRyLT5zZWNvbmQpOworICAgICAgICAgICAgV2Vha0hlYXA6
OmRlYWxsb2NhdGUocHRyLT5zZWNvbmQpOwogICAgICAgICBtX21hcC5jbGVhcigpOwogICAgIH0K
IApAQCAtMTA3LDY0ICsxMDYsNDIgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9y
IGl0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQoaXRlci5tX2l0ZXJhdG9yICE9IG1fbWFwLmVu
ZCgpKTsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNvbmQ7
Ci0gICAgICAgIEFTU0VSVChzbG90KTsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90
KS0+ZGVhbGxvY2F0ZShzbG90KTsKKyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSBpdGVyLm1faXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgQVNTRVJUKGltcGwpOworICAgICAgICBXZWFrSGVhcDo6
ZGVhbGxvY2F0ZShpbXBsKTsKICAgICAgICAgbV9tYXAucmVtb3ZlKGl0ZXIubV9pdGVyYXRvcik7
CiAgICAgfQogCiAgICAgRXh0ZXJuYWxUeXBlIGdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21T
bG90KG1fbWFwLmdldChrZXkpKTsKLSAgICB9Ci0KLSAgICBIYW5kbGVTbG90IGdldFNsb3QoY29u
c3QgS2V5VHlwZSYga2V5KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbWFwLmdldChr
ZXkpOworICAgICAgICByZXR1cm4gSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21TbG90
KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KCZtX21hcC5nZXQoa2V5KS0+anNWYWx1ZSgpKSk7CiAgICAg
fQogCiAgICAgQWRkUmVzdWx0IGFkZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEtl
eVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIHsKICAgICAgICAgdHlwZW5hbWUg
TWFwVHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChrZXksIDApOwotICAgICAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGds
b2JhbERhdGEuaGVhcC5oYW5kbGVIZWFwKCktPmFsbG9jYXRlKCk7Ci0gICAgICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IHNsb3Q7Ci0gICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFw
Rm9yKHNsb3QpLT5tYWtlV2VhayhzbG90LCB0aGlzLCBGaW5hbGl6ZXJDYWxsYmFjazo6ZmluYWxp
emVyQ29udGV4dEZvcihrZXkpKTsKLSAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xv
dCktPndyaXRlQmFycmllcihzbG90LCB2YWx1ZSk7Ci0gICAgICAgICAgICAqc2xvdCA9IHZhbHVl
OwotICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gZ2xvYmFsRGF0YS5oZWFwLndlYWtIZWFwKCktPmFs
bG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZv
cihrZXkpKTsKKwogICAgICAgICAvLyBXZWFrR0NNYXAgZXhwb3NlcyBhIGRpZmZlcmVudCBpdGVy
YXRvciwgc28gd2UgbmVlZCB0byB3cmFwIGl0IGFuZCBjcmVhdGUgb3VyIG93biBBZGRSZXN1bHQu
CiAgICAgICAgIHJldHVybiBBZGRSZXN1bHQoaXRlcmF0b3IocmVzdWx0Lml0ZXJhdG9yKSwgcmVz
dWx0LmlzTmV3RW50cnkpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChpdGVyYXRvciBpdGVy
LCBFeHRlcm5hbFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSBp
dGVyLm1faXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgQVNTRVJUKHNsb3QpOwotICAgICAgICBI
YW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwotICAg
ICAgICAqc2xvdCA9IHZhbHVlOwotICAgIH0KIAogICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAg
ewogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRk
KGtleSwgMCk7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOwotICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgIHNsb3Qg
PSBnbG9iYWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpOwotICAgICAgICAgICAg
SGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgdGhpcywga2V5KTsKLSAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gc2xvdDsKLSAgICAgICAgfQotICAg
ICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUp
OwotICAgICAgICAqc2xvdCA9IHZhbHVlOworICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQorICAgICAgICAgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGdsb2JhbERhdGEuaGVhcC53
ZWFrSGVhcCgpLT5hbGxvY2F0ZSh2YWx1ZSwgdGhpcywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFs
aXplckNvbnRleHRGb3Ioa2V5KSk7CiAgICAgfQogCiAgICAgRXh0ZXJuYWxUeXBlIHRha2UoY29u
c3QgS2V5VHlwZSYga2V5KQogICAgIHsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gbV9tYXAu
dGFrZShrZXkpOwotICAgICAgICBpZiAoIXNsb3QpCisgICAgICAgIFdlYWtJbXBsKiBpbXBsID0g
bV9tYXAudGFrZShrZXkpOworICAgICAgICBpZiAoIWltcGwpCiAgICAgICAgICAgICByZXR1cm4g
SGFzaFRyYWl0czxFeHRlcm5hbFR5cGU+OjplbXB0eVZhbHVlKCk7Ci0gICAgICAgIEV4dGVybmFs
VHlwZSByZXN1bHQgPSBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3Qoc2xvdCk7
Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7Cisg
ICAgICAgIEV4dGVybmFsVHlwZSByZXN1bHQgPSBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0
RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJmltcGwtPmpzVmFsdWUoKSkpOworICAgICAg
ICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShpbXBsKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKQEAgLTE4MSw5ICsxNTgsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQogICAg
IHsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gbV9tYXAudGFrZShGaW5hbGl6ZXJDYWxsYmFj
azo6a2V5Rm9yRmluYWxpemVyKGNvbnRleHQsIEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRG
cm9tU2xvdChoYW5kbGUuc2xvdCgpKSkpOwotICAgICAgICBBU1NFUlQoc2xvdCk7Ci0gICAgICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgICAgIFdl
YWtJbXBsKiBpbXBsID0gbV9tYXAudGFrZShGaW5hbGl6ZXJDYWxsYmFjazo6a2V5Rm9yRmluYWxp
emVyKGNvbnRleHQsIEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9tU2xvdChoYW5kbGUu
c2xvdCgpKSkpOworICAgICAgICBBU1NFUlQoaW1wbCk7CisgICAgICAgIFdlYWtIZWFwOjpkZWFs
bG9jYXRlKGltcGwpOwogICAgIH0KIAogICAgIE1hcFR5cGUgbV9tYXA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMTI1ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2Fy
ZW5AYXBwbGUuY29tPgorCisgICAgICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdl
YWs8VD4gZmluYWxpemF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MjY3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVwZGF0ZWQgV2ViQ29yZSBmb3IgV2VhazxUPiBBUEkgY2hhbmdlcy4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1N0cmluZ093bmVyOjpmaW5hbGl6ZSk6IFdlJ3JlIG5vdCBhbGxvd2VkIHRvIGdldCgpIGEg
ZGVhZCBXZWFrPFQ+CisgICAgICAgIGFueW1vcmUsIHNvIHVzZSB0aGUgZGVidWctb25seSB3YXMo
KSBoZWxwZXIgZnVuY3Rpb24gaW5zdGVhZC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6dW5jYWNoZVdyYXBwZXIpOiBEaXR0by4KKwor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SW5saW5lQ2FjaGVkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpjbGVhcklubGluZUNh
Y2hlZFdyYXBwZXIpOiBXZSdyZSBub3QgYWxsb3dlZCB0byBnZXQoKSBhIGRlYWQKKyAgICAgICAg
V2VhazxUPiwgc28gSSBoYWQgdG8gcHVzaCBkb3duIHRoZXNlIEFTU0VSVHMgaW50byBTY3JpcHRX
cmFwcGFibGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2Rl
KTogVXBkYXRlZCBmb3Igbm9uLUhhbmRsZS1uZXNzCisgICAgICAgIG9mIFdlYWs8VD4uCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdFdyYXBwYWJsZTo6c2V0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRX
cmFwcGFibGU6OmNsZWFyV3JhcHBlcik6IFVzZSB3YXMoKSwgYXMgYWJvdmUuCisKIDIwMTItMDMt
MjkgIEJlYXIgVHJhdmlzICA8YmV0cmF2aXNAYWRvYmUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBD
U1MgRXhjbHVzaW9uIHdyYXAtZmxvdyB2YWx1ZXMgbGVmdCAmIHJpZ2h0IHRvIHN0YXJ0ICYgZW5k
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5j
cHAJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdy
YXBwZXJXb3JsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgdm9pZCBKU1N0
cmluZ093bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZQogewogICAgIEpTU3RyaW5nKiBqc1N0cmlu
ZyA9IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICBT
dHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGNvbnRleHQp
OwotICAgIEFTU0VSVF9VTlVTRUQoanNTdHJpbmcsIG1fd29ybGQtPm1fc3RyaW5nQ2FjaGUuZmlu
ZChzdHJpbmdJbXBsKS0+c2Vjb25kLmdldCgpID09IGpzU3RyaW5nKTsKKyAgICBBU1NFUlRfVU5V
U0VEKGpzU3RyaW5nLCBtX3dvcmxkLT5tX3N0cmluZ0NhY2hlLmZpbmQoc3RyaW5nSW1wbCktPnNl
Y29uZC53YXMoanNTdHJpbmcpKTsKICAgICBtX3dvcmxkLT5tX3N0cmluZ0NhY2hlLnJlbW92ZShz
dHJpbmdJbXBsKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgZW51bSBQ
YXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsKICAgICB7CiAgICAgICAgIGlmIChjbGVhcklubGluZUNh
Y2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIEFTU0VSVCh3b3JsZC0+bV93cmFwcGVycy5maW5kKGRvbU9iamVjdCktPnNl
Y29uZC5nZXQoKSA9PSB3cmFwcGVyKTsKKyAgICAgICAgQVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJz
LmZpbmQoZG9tT2JqZWN0KS0+c2Vjb25kLndhcyh3cmFwcGVyKSk7CiAgICAgICAgIHdvcmxkLT5t
X3dyYXBwZXJzLnJlbW92ZShkb21PYmplY3QpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsNiBAQCBpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
CiB7CiAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIEFTU0VSVCghbm9kZS0+d3JhcHBlcigpKTsKICAgICBub2RlLT5zZXRXcmFwcGVyKCp3b3Js
ZC0+Z2xvYmFsRGF0YSgpLCB3cmFwcGVyLCB3cmFwcGVyT3duZXIod29ybGQsIG5vZGUpLCB3cmFw
cGVyQ29udGV4dCh3b3JsZCwgbm9kZSkpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTEsOCAr
NTAsNyBAQCBpbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NCiB7CiAgICAg
aWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VS
VF9VTlVTRUQod3JhcHBlciwgbm9kZS0+d3JhcHBlcigpID09IHdyYXBwZXIpOwotICAgIG5vZGUt
PmNsZWFyV3JhcHBlcigpOworICAgIG5vZGUtPmNsZWFyV3JhcHBlcih3cmFwcGVyKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
RmlsdGVyQ29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNj
ZXB0Tm9kZSgKIHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCi0g
ICAgaWYgKCFtX2ZpbHRlci5pc09iamVjdCgpKQorICAgIGlmICghbV9maWx0ZXIgfHwgIW1fZmls
dGVyLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQ
VDsKIAogICAgLy8gVGhlIGV4ZWMgYXJndW1lbnQgaGVyZSBzaG91bGQgb25seSBiZSBudWxsIGlm
IHRoaXMgd2FzIGNhbGxlZCBmcm9tIGEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdFdyYXBwYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFdyYXBwYWJsZS5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTEg
KzQ1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0V3JhcHBlcihKU0M6OkpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNET01XcmFwcGVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25l
ciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQogICAgIHsKKyAgICAgICAgQVNTRVJUKCFt
X3dyYXBwZXIpOwogICAgICAgICBtX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFrPEpTRE9NV3JhcHBl
cj4oZ2xvYmFsRGF0YSwgd3JhcHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKICAgICB9CiAK
LSAgICB2b2lkIGNsZWFyV3JhcHBlcigpCisgICAgdm9pZCBjbGVhcldyYXBwZXIoSlNET01XcmFw
cGVyKiB3cmFwcGVyKQogICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCh3cmFwcGVyLCBtX3dy
YXBwZXIud2FzKHdyYXBwZXIpKTsKICAgICAgICAgbV93cmFwcGVyLmNsZWFyKCk7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTI1ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0yOSAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIEZpcnN0IHN0ZXAgdG93YXJk
IGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgZm9yIEFQSSBjaGFuZ2UuCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpmaW5hbGl6ZSk6CisKIDIwMTIt
MDMtMjkgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTI1NTMuCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBS
dW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6Zmlu
YWxpemUoSlNDOjpICiB7CiAgICAgSGFzaE1hcDxOUE9iamVjdCosIEpTQzo6V2VhazxKU05QT2Jq
ZWN0PiA+OjppdGVyYXRvciBmb3VuZCA9IG1fanNOUE9iamVjdHMuZmluZChzdGF0aWNfY2FzdDxO
UE9iamVjdCo+KGNvbnRleHQpKTsKICAgICBBU1NFUlQoZm91bmQgIT0gbV9qc05QT2JqZWN0cy5l
bmQoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGFzT2JqZWN0KGhhbmRsZS5nZXQoKSkg
PT0gZm91bmQtPnNlY29uZCk7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGFzT2JqZWN0KGhh
bmRsZS5nZXQoKSkgPT0gZm91bmQtPnNlY29uZC5nZXQoKSk7CiAgICAgSlNOUE9iamVjdCogb2Jq
ZWN0ID0gZm91bmQtPnNlY29uZC5nZXQoKTsKICAgICBtX2pzTlBPYmplY3RzLnJlbW92ZShmb3Vu
ZCk7CiAgICAgYWRkVG9JbnZhbGlkYXRpb25RdWV1ZShvYmplY3QtPmxlYWtOUE9iamVjdCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134896</attachid>
            <date>2012-03-30 15:10:13 -0700</date>
            <delta_ts>2012-03-31 18:18:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82670-20120330151011.patch</filename>
            <type>text/plain</type>
            <size>103181</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MiBA
QAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyBhIFdlYWs8VD4gaGVhcCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBpbmNyZW1l
bnRhbAorICAgICAgICBmaW5hbGl6YXRpb24sIHdoaWxlIG1ha2luZyBhcyBmZXcgYmVoYXZpb3Ig
Y2hhbmdlcyBhcyBwb3NzaWJsZS4gVGhlIGJlaGF2aW9yCisgICAgICAgIGNoYW5nZXMgaXQgbWFr
ZXMgYXJlOgorCisgICAgICAgICgqKSBXZWFrPFQ+J3MgcmF3IEpTVmFsdWUgbm8gbG9uZ2VyIHJl
dmVydHMgdG8gSlNWYWx1ZSgpIGF1dG9tYXRpY2FsbHkgLS0KKyAgICAgICAgaW5zdGVhZCwgYSBz
ZXBhcmF0ZSBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBKU1ZhbHVlIGlzIG5vIGxvbmdlciB2YWxp
ZC4KKyAgICAgICAgKFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgSlNWYWx1ZSBjYW4gYmUg
cHJlc2VydmVkIGZvciBsYXRlciBmaW5hbGl6YXRpb24uKQorICAgICAgICBPYmplY3RzIGRlYWxp
bmcgd2l0aCBXZWFrSW1wbHMgZGlyZWN0bHkgbXVzdCBjaGFuZ2UgdG8gY2hlY2sgdGhlIGZsYWcu
CisKKyAgICAgICAgKCopIFdlYWs8VD4gaXMgbm8gbG9uZ2VyIGEgc3ViY2xhc3Mgb2YgSGFuZGxl
PFQ+LgorCisgICAgICAgICgqKSBET00gR0MgcGVyZm9ybWFuY2UgaXMgZGlmZmVyZW50IC0tIDkl
IGZhc3RlciBpbiB0aGUgZ2VvbWV0cmljIG1lYW4sCisgICAgICAgIGJ1dCAxNSUgc2xvd2VyIGlu
IG9uZSBzcGVjaWZpYyBjYXNlOgorICAgICAgICAgICAgICAgIGdjLWRvbTEuaHRtbDogNiUgIGZh
c3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTIuaHRtbDogMjMlIGZhc3RlcgorICAgICAgICAg
ICAgICAgIGdjLWRvbTMuaHRtbDogMTclIGZhc3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTQu
aHRtbDogMTUlICpzbG93ZXIqCisKKyAgICAgICAgVGhlIGtleSBmZWF0dXJlcyBvZiB0aGlzIG5l
dyBoZWFwIGFyZToKKworICAgICAgICAoKikgRWFjaCBibG9jayBrbm93cyBpdHMgb3duIHN0YXRl
LCBpbmRlcGVuZGVudCBvZiBhbnkgb3RoZXIgYmxvY2tzLgorCisgICAgICAgICgqKSBFYWNoIGJs
b2NrIGNhY2hlcyBpdHMgb3duIHN3ZWVwIHJlc3VsdC4KKworICAgICAgICAoKikgVGhlIGhlYXAg
dmlzaXRzIGRlYWQgV2VhazxUPnMgYXQgdGhlIGVuZCBvZiBHQy4gKEl0IGRvZXNuJ3QKKyAgICAg
ICAgbWFyayB0aGVtIHlldCwgc2luY2UgdGhhdCB3b3VsZCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4p
CisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tPYmplY3REYXRhOjpmaW5hbGl6ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Ojppbml0KTogVXBkYXRlZCB0byB1c2Ug
dGhlIG5ldyBXZWFrSGVhcCBBUEkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6IFBhaWQgdGhlIGJ1aWxkIHN5c3RlbSB0
YXggc2luY2UgSSBhZGRlZCBzb21lIG5ldyBmaWxlcy4KKworICAgICAgICAqIGhlYXAvSGFuZGxl
Lmg6IE1hZGUgV2Vha0Jsb2NrIGEgZnJpZW5kIGFuZCBleHBvc2VkIHNsb3QoKSBhcyBwdWJsaWMs
CisgICAgICAgIHNvIHdlIGNhbiBrZWVwIHBhc3NpbmcgYSBIYW5kbGU8VD4gdG8gZmluYWxpemVy
cywgdG8gYXZvaWQgbW9yZSBzdXJmYWNlCisgICAgICAgIGFyZWEgY2hhbmdlIGluIHRoaXMgcGF0
Y2guIEEgZm9sbG93LXVwIHBhdGNoIHNob3VsZCBjaGFuZ2UgdGhlIHR5cGUgd2UKKyAgICAgICAg
cGFzcyB0byBmaW5hbGl6ZXJzLgorCisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmNwcDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OndyaXRlQmFycmllcik6Cisg
ICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUpOgorICAgICAgICAqIGhlYXAvSGFu
ZGxlSGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZUhlYXApOgorICAgICAg
ICAoTm9kZSk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUpOiBSZW1vdmVk
IGFsbCBjb2RlIHJlbGF0ZWQgdG8gV2VhazxUPiwgc2luY2UKKyAgICAgICAgd2UgaGF2ZSBhIHNl
cGFyYXRlIFdlYWtIZWFwIG5vdy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OkhlYXApOiBSZW1vdmVkIG1fZXh0cmFDb3N0IGJlY2F1c2UgZXh0cmEgY29z
dCBpcyBhY2NvdW50ZWQKKyAgICAgICAgZm9yIHRocm91Z2ggb3VyIHdhdGVybWFyayBub3cuIFJl
bW92ZWQgbV93YXRlck1hcmsgYmVjYXVzZSBpdCB3YXMgdW51c2VkLgorCisgICAgICAgIChKU0M6
OkhlYXA6OmRlc3Ryb3kpOiBVcGRhdGVkIGZvciBhZGRpdGlvbiBvZiBXZWFrSGVhcC4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZSk6IENoYW5nZWQg
ZnJvbSB1c2luZyBpdHMgb3duCisgICAgICAgIHZhcmlhYmxlIHRvIHBhcnRpY2lwYXRpbmcgaW4g
dGhlIHdhdGVybWFyayBzdHJhdGVneS4gSSB3YW50ZWQgdG8gc3RhbmRhcmRpemUKKyAgICAgICAg
V2Vha0hlYXAgYW5kIGFsbCBvdGhlciBIZWFwIGNsaWVudHMgb24gdGhpcyBzdHJhdGVneSwgdG8g
bWFrZSBzdXJlIGl0J3MKKyAgICAgICAgYWNjdXJhdGUuCisgCisgICAgICAgIChKU0M6OkhlYXA6
Om1hcmtSb290cyk6IFVwZGF0ZWQgZm9yIGFkZGl0aW9uIG9mIFdlYWtIZWFwLiBBZGRlZCBXZWFr
SGVhcAorICAgICAgICBkZWFkIHZpc2l0IHBhc3MsIGFzIGV4cGxhaW5lZCBhYm92ZS4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVzZXRBbGxv
Y2F0b3JzKTogVXBkYXRlZCBmb3IgYWRkaXRpb24gb2YgV2Vha0hlYXAuCisKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6RmluYWxpemVyT3du
ZXI6OmZpbmFsaXplKTogVXBkYXRlZCBmb3IgbmV3IFdlYWs8VD4gQVBJLgorCisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndlYWtIZWFwKToKKyAgICAgICAgKEhl
YXApOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1dhdGVyTWFyayk6IEFkZGVkIGEgd2F5IHRv
IHBhcnRpY2lwYXRlIGluIHRoZSB3YXRlcm1hcmtpbmcKKyAgICAgICAgc3RyYXRlZ3ksIHNpbmNl
IHRoaXMgaXMgdGhlIGJlc3Qgd2F5IGZvciBXZWFrSGVhcCB0byByZXBvcnQgaXRzIG1lbW9yeQor
ICAgICAgICBjb3N0LiAoSSBwbGFuIHRvIHVwZGF0ZSB0aGlzIGluIGEgZm9sbG93LXVwIHBhdGNo
IHRvIG1ha2UgaXQgbW9yZSBhY2N1cmF0ZSwKKyAgICAgICAgYnV0IGZvciBub3cgaXQgaXMgbm90
IGxlc3MgYWNjdXJhdGUgdGhhbiBpdCB1c2VkIHRvIGJlLikKKworICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjphZGRUb1dhdGVyTWFyayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpkaWRDb25zdW1lRnJlZUxpc3QpOiBSZW1vdmVkIG1fbnVyc2VyeVdhdGVyTWFyayBiZWNhdXNl
CisgICAgICAgIGl0IHdhcyB1bnVzZWQsIGFuZCBJIGRpZG4ndCB3YW50IHRvIHVwZGF0ZSBXZWFr
SGVhcCB0byBrZWVwIGFuIHVzdXNlZAorICAgICAgICB2YXJpYWJsZSB3b3JraW5nLiBBZGRlZCBB
UEkgZm9yIGFib3ZlLgorCisgICAgICAgICogaGVhcC9QYXNzV2Vhay5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKFdlYWtJbXBsQWNjZXNzb3IpOgorICAgICAgICAoUGFzc1dlYWspOgorICAg
ICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6OjpnZXQpOgorICAgICAgICAo
SlNDOjo6Ondhcyk6CisgICAgICAgIChKU0M6Ojo6UGFzc1dlYWspOgorICAgICAgICAoSlNDOjo6
On5QYXNzV2Vhayk6CisgICAgICAgIChKU0M6OlVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAg
ICAoSlNDOjo6OmxlYWtJbXBsKToKKyAgICAgICAgKEpTQzo6YWRvcHRXZWFrKToKKyAgICAgICAg
KiBoZWFwL1N0cm9uZy5oOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yISk6CisgICAg
ICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKToKKyAgICAgICAgKEpTQzo6U3Ryb25nOjpnZXQpOgorICAgICAgICAqIGhlYXAv
V2Vhay5oOgorICAgICAgICAoV2Vhayk6CisgICAgICAgIChKU0M6Ojo6V2Vhayk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjo6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6Ojp+V2Vhayk6CisgICAgICAgIChKU0M6Ojo6c3dhcCk6CisgICAgICAgIChKU0M6
Oj0pOgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6VW5zcGVjaWZp
ZWRCb29sVHlwZSk6CisgICAgICAgIChKU0M6Ojo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6Ojo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjo6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IExvdHMgb2Yg
Y29kZSBjaGFuZ2VzIGhlcmUsIGJ1dCB0aGV5IGJvaWwKKyAgICAgICAgZG93biB0byB0d28gdGhp
bmdzOgorCisgICAgICAgICgqKSBBbGxvY2F0ZSBXZWFrSW1wbHMgZnJvbSB0aGUgV2Vha0hlYXAg
aW5zdGVhZCBvZiBIYW5kbGVzIGZyb20gdGhlIEhhbmRsZUhlYXAuCisKKyAgICAgICAgKCopIEV4
cGxpY2l0bHkgY2hlY2sgV2Vha0ltcGw6OnN0YXRlKCkgZm9yIG5vbi1saXZlbmVzcyBiZWZvcmUg
cmV0dXJuaW5nCisgICAgICAgIGEgdmFsdWUgKGV4cGxhaW5lZCBhYm92ZSkuCisKKyAgICAgICAg
VGhlc2UgZmlsZXMgaW1wbGVtZW50IHRoZSBuZXcgV2VhazxUPiBoZWFwIGJlaGF2aW9yIGRlc2Ny
aWJlZCBhYm92ZToKKworICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDogQWRkZWQuCisgICAg
ICAgICogaGVhcC9XZWFrQmxvY2suaDogQWRkZWQuCisgICAgICAgICogaGVhcC9XZWFrSGFuZGxl
T3duZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIYW5kbGVPd25lci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIZWFwLmNwcDogQWRkZWQuCisgICAgICAgICogaGVhcC9X
ZWFrSGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtJbXBsLmg6IEFkZGVkLgorCisg
ICAgICAgIE9uZSBpbnRlcmVzdGluZyBkaWZmZXJlbmNlIGZyb20gdGhlIG9sZCBoZWFwIGlzIHRo
YXQgd2UgZG9uJ3QgYWxsb3cKKyAgICAgICAgY2xpZW50cyB0byBvdmVyd3JpdGUgYSBXZWFrSW1w
bCBhZnRlciBhbGxvY2F0aW5nIGl0LCBhbmQgd2UgZG9uJ3QgcmVjeWNsZQorICAgICAgICBXZWFr
SW1wbHMgcHJpb3IgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBs
YXp5IGZpbmFsaXphdGlvbiwKKyAgICAgICAgYnV0IGl0IHdpbGwgYWxzbyBoZWxwIHVzIGVzYWJs
aXNoIGEgdXNlZnVsIGludmFyaWFudCBpbiB0aGUgZnV0dXJlOiBhbGxvY2F0aW5nCisgICAgICAg
IGEgV2Vha0ltcGwgd2lsbCBiZSBhIGJpbmRpbmcgY29udHJhY3QgdG8gcnVuIGEgZmluYWxpemVy
IGF0IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgIGZ1dHVyZSwgZXZlbiBpZiB0aGUgV2Vha0lt
cGwgaXMgbGF0ZXIgZGVhbGxvY2F0ZWQuCisKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOiBDaGVjayB0aGUgV2Vh
azxUPiBmb3IgISBpbnN0ZWFkIG9mCisgICAgICAgIGl0cyBKU1ZhbHVlLCBzaW5jZSB0aGF0J3Mg
b3VyIEFQSSBjb250cmFjdCBub3csIGFuZCB0aGUgSlNWYWx1ZSBtaWdodAorICAgICAgICBiZSBz
dGFsZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OmpzQ2Fz
dCk6IEFsbG93IGNhc3RpbmcgTlVMTCBwb2ludGVycyBiZWNhdXNlIGl0J3MgdXNlZnVsIGFuZCBo
YXJtbGVzcy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOiBJIGNhbid0IHJlbWVtYmVyIHdoeSBJ
IGRpZCB0aGlzLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOiBJIGhhZCB0byB1cGRhdGUgdGhlc2Ug
Y2xhc3NlcyBiZWNhdXNlIHRoZXkgYWxsb2NhdGUKKyAgICAgICAgYW5kIGRlYWxsb2NhdGUgd2Vh
ayBwb2ludGVycyBtYW51YWxseS4gVGhleSBzaG91bGQgcHJvYmFibHkgc3RvcCBkb2luZyB0aGF0
LgorCiAyMDEyLTAzLTI5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeCBwMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDE5IEBAIFNF
VChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwCisgICAgaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCi0gICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSGVhcC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAg
ICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcAogICAg
IGhlYXAvTWFya2VkU3BhY2UuY3BwCi0gICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAg
ICBoZWFwL01hcmtTdGFjay5jcHAKKyAgICBoZWFwL1dlYWtIZWFwLmNwcAorICAgIGhlYXAvV2Vh
a0hhbmRsZU93bmVyLmNwcAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogCiAgICAgZGVidWdnZXIv
RGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAsNiArMjUwLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFwLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDYgKzIxNyw5IEBACiAgICAgICAgICAgICAnYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAnLAogICAgICAgICAgICAgJ2J5dGVjb21waWxlci9SZWdpc3RlcklELmgnLAogICAgICAgICAg
ICAgJ2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwJywKKyAgICAgICAgICAgICdoZWFwL1dlYWtI
ZWFwLmNwcCcsCisgICAgICAgICAgICAnaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwJywKKyAgICAg
ICAgICAgICdoZWFwL1dlYWtCbG9jay5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlSGVh
cC5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlU3RhY2suY3BwJywKICAgICAgICAgICAg
ICdoZWFwL0hlYXAuY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0NvcGllZFNwYWNl
LmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAogICAgIGhlYXAvREZHQ29k
ZUJsb2Nrcy5jcHAgXAorICAgIGhlYXAvV2Vha0hlYXAuY3BwIFwKKyAgICBoZWFwL1dlYWtIYW5k
bGVPd25lci5jcHAgXAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVI
ZWFwLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw3IEBAIHZvaWQgSlND
YWxsYmFja09iamVjdERhdGE6OmZpbmFsaXplKEhhbmQKICAgICBmb3IgKDsganNDbGFzczsganND
bGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKQogICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6
ZUNhbGxiYWNrIGZpbmFsaXplID0ganNDbGFzcy0+ZmluYWxpemUpCiAgICAgICAgICAgICBmaW5h
bGl6ZSh0aGlzUmVmKTsKLSAgICBIYW5kbGVTbG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwotICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgV2Vha0hl
YXA6OmRlYWxsb2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQog
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTEyNTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNCArMTAyLDExIEBAIHZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojppbml0KEV4ZWMKICAgICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwg
dG9SZWYodGhpcykpOwogICAgIH0KIAotICAgIGJvb2wgbmVlZHNGaW5hbGl6ZXIgPSBmYWxzZTsK
LSAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHIg
JiYgIW5lZWRzRmluYWxpemVyOyBqc0NsYXNzUHRyID0ganNDbGFzc1B0ci0+cGFyZW50Q2xhc3Mp
Ci0gICAgICAgIG5lZWRzRmluYWxpemVyID0ganNDbGFzc1B0ci0+ZmluYWxpemU7Ci0gICAgaWYg
KG5lZWRzRmluYWxpemVyKSB7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGV4ZWMtPmdsb2Jh
bERhdGEoKS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0
KCksIGNsYXNzUmVmKCkpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0
ZUJhcnJpZXIoc2xvdCwgdGhpcyk7Ci0gICAgICAgICpzbG90ID0gdGhpczsKKyAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHI7IGpzQ2xhc3NQdHIg
PSBqc0NsYXNzUHRyLT5wYXJlbnRDbGFzcykgeworICAgICAgICBpZiAoanNDbGFzc1B0ci0+Zmlu
YWxpemUpIHsKKyAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLndlYWtIZWFwKCkt
PmFsbG9jYXRlKHRoaXMsIG1fY2FsbGJhY2tPYmplY3REYXRhLmdldCgpLCBjbGFzc1JlZigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2
aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0Jh
c2UueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJD
b21waWxlclZlcnNpb24ueGNjb25maWciCiAKIENPTVBJTEVSX1NQRUNJRklDX1dBUk5JTkdfQ0ZM
QUdTID0gJChDT01QSUxFUl9TUEVDSUZJQ19XQVJOSU5HX0NGTEFHU18kKFRBUkdFVF9HQ0NfVkVS
U0lPTikpOwotQ09NUElMRVJfU1BFQ0lGSUNfV0FSTklOR19DRkxBR1NfTExWTV9DT01QSUxFUiA9
IC1XZ2xvYmFsLWNvbnN0cnVjdG9ycyAtV2V4aXQtdGltZS1kZXN0cnVjdG9yczsKIAogQ0xBTkdf
V0FSTl9DWFgwWF9FWFRFTlNJT05TID0gTk87CiBERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBk
d2FyZjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgko
d29ya2luZyBjb3B5KQpAQCAtNSw5ICs1LDkgQEAgRVhQT1JUUwogICAgID8/JHN0cnRvZEAkMEFA
JDAwQFdURkBAWUFOUEJEUEFQQURAWgogICAgID8/JHN0cnRvZEAkMEFAJDBBQEBXVEZAQFlBTlBC
RFBBUEFEQFoKICAgICA/PzBBcnJheUJ1ZmZlclZpZXdAV1RGQEBJQUVAVj8kUGFzc1JlZlB0ckBW
QXJyYXlCdWZmZXJAV1RGQEBAMUBJQFoKKyAgICA/PzBDb2xsYXRvckBXVEZAQFFBRUBQQkRAWgog
ICAgID8/MENTdHJpbmdAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBC
RElAWgotICAgID8/MENvbGxhdG9yQFdURkBAUUFFQFBCREBaCiAgICAgPz8wRGF0ZUluc3RhbmNl
QEpTQ0BASUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wRGVmYXVs
dEdDQWN0aXZpdHlDYWxsYmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoKICAgICA/PzBEcm9wQWxs
TG9ja3NASlNMb2NrQEpTQ0BAUUFFQFc0SlNMb2NrQmVoYXZpb3JAMkBAWgpAQCAtMjUsMTAgKzI1
LDEwIEBAIEVYUE9SVFMKICAgICA/PzBTdHJpbmdPYmplY3RASlNDQEBJQUVAQUFWSlNHbG9iYWxE
YXRhQDFAUEFWU3RydWN0dXJlQDFAQFoKICAgICA/PzBTdHJ1Y3R1cmVASlNDQEBBQUVAQUFWSlNH
bG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBWSlNWYWx1ZUAxQEFCVlR5cGVJbmZvQDFA
UEJVQ2xhc3NJbmZvQDFAQFoKICAgICA/PzBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVAWFoKLSAg
ICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCREBaCi0gICAgPz8wVVN0cmluZ0BKU0NAQFFBRUBQQkRJ
QFoKICAgICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCX1dAWgogICAgID8/MFVTdHJpbmdASlNDQEBR
QUVAUEJfV0lAWgorICAgID8/MFVTdHJpbmdASlNDQEBRQUVAUEJEQFoKKyAgICA/PzBVU3RyaW5n
QEpTQ0BAUUFFQFBCRElAWgogICAgID8/MFdURlRocmVhZERhdGFAV1RGQEBRQUVAWFoKICAgICA/
PzBZYXJyUGF0dGVybkBZYXJyQEpTQ0BAUUFFQEFCVlVTdHJpbmdAMkBfTjFQQVBCREBaCiAgICAg
Pz8xQXJyYXlCdWZmZXJWaWV3QFdURkBAVUFFQFhaCkBAIC00MiwxNSArNDIsMTAgQEAgRVhQT1JU
UwogICAgID8/MVJlZkNvdW50ZWRMZWFrQ291bnRlckBXVEZAQFFBRUBYWgogICAgID8/MVNvdXJj
ZVByb3ZpZGVyQ2FjaGVASlNDQEBRQUVAWFoKICAgICA/PzFUaHJlYWRDb25kaXRpb25AV1RGQEBR
QUVAWFoKLSAgICA/PzFXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCiAgICAgPz8xV2Vha0hhbmRs
ZU93bmVyQEpTQ0BAVUFFQFhaCisgICAgPz8xV1RGVGhyZWFkRGF0YUBXVEZAQFFBRUBYWgogICAg
ID8/OEpTQ0BAWUFfTkFCVlVTdHJpbmdAMEAwQFoKICAgICA/PzhXVEZAQFlBX05BQlZDU3RyaW5n
QDBAMEBaCi0gICAgP0VjbWFTY3JpcHRDb252ZXJ0ZXJARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJA
ZG91YmxlX2NvbnZlcnNpb25AV1RGQEBTQUFCVjEyM0BYWgotICAgID9Ub0V4cG9uZW50aWFsQERv
dWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0
cmluZ0J1aWxkZXJAMjNAQFoKLSAgICA/VG9GaXhlZEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBk
b3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCi0gICAg
P1RvUHJlY2lzaW9uQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdU
RkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKLSAgICA/VG9TaG9ydGVzdEBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTlBBVlN0cmluZ0J1
aWxkZXJAMjNAQFoKICAgICA/YWJzb2x1dGVUaW1lVG9XYWl0VGltZW91dEludGVydmFsQFdURkBA
WUFLTkBaCiAgICAgP2FjdGl2aXR5Q2FsbGJhY2tASGVhcEBKU0NAQFFBRVBBVkdDQWN0aXZpdHlD
YWxsYmFja0AyQFhaCiAgICAgP2FkZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0
ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCREBaCkBAIC02OSw4ICs2NCw4IEBAIEVYUE9SVFMKICAg
ICA/YWRkU3RhdGljR2xvYmFsc0BKU0dsb2JhbE9iamVjdEBKU0NAQElBRVhQQVVHbG9iYWxQcm9w
ZXJ0eUluZm9AMTJASEBaCiAgICAgP2FsbG9jYXRlUHJvcGVydHlTdG9yYWdlQEpTT2JqZWN0QEpT
Q0BAUUFFWEFBVkpTR2xvYmFsRGF0YUAyQElJQFoKICAgICA/YWxsb2NhdGVTbG93Q2FzZUBNYXJr
ZWRBbGxvY2F0b3JASlNDQEBBQUVQQVhYWgotICAgID9hcHBlbmRAU3RyaW5nQnVpbGRlckBXVEZA
QFFBRVhQQkVJQFoKICAgICA/YXBwZW5kQFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYUEJfV0lAWgor
ICAgID9hcHBlbmRAU3RyaW5nQnVpbGRlckBXVEZAQFFBRVhQQkVJQFoKICAgICA/YXNjaWlAVVN0
cmluZ0BKU0NAQFFCRT9BVkNTdHJpbmdAV1RGQEBYWgogICAgID9hdHRhY2hARGVidWdnZXJASlND
QEBRQUVYUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID9icm9hZGNhc3RAVGhyZWFkQ29uZGl0
aW9uQFdURkBAUUFFWFhaCkBAIC03OCwxMCArNzMsMTAgQEAgRVhQT1JUUwogICAgID9idWZmZXJM
ZW5ndGhGb3JTdHJpbmdFeHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVhaCiAgICAg
P2J5dGVDb21waWxlQFlhcnJASlNDQEBZQT9BVj8kUGFzc093blB0ckBVQnl0ZWNvZGVQYXR0ZXJu
QFlhcnJASlNDQEBAV1RGQEBBQVVZYXJyUGF0dGVybkAxMkBQQVZCdW1wUG9pbnRlckFsbG9jYXRv
ckA0QEBaCiAgICAgP2J5dGVTaXplQFNvdXJjZVByb3ZpZGVyQ2FjaGVASlNDQEBRQkVJWFoKKyAg
ICA/Y2FsY3VsYXRlZEZ1bmN0aW9uTmFtZUBEZWJ1Z2dlckNhbGxGcmFtZUBKU0NAQFFCRT9BVlVT
dHJpbmdAMkBYWgogICAgID9jYWxjdWxhdGVEU1RPZmZzZXRAV1RGQEBZQU5OTkBaCiAgICAgP2Nh
bGN1bGF0ZVN0cmluZ0hhc2hBbmRMZW5ndGhGcm9tVVRGOEBVbmljb2RlQFdURkBAWUFJUEJEMEFB
STFAWgogICAgID9jYWxjdWxhdGVVVENPZmZzZXRAV1RGQEBZQUhYWgotICAgID9jYWxjdWxhdGVk
RnVuY3Rpb25OYW1lQERlYnVnZ2VyQ2FsbEZyYW1lQEpTQ0BAUUJFP0FWVVN0cmluZ0AyQFhaCiAg
ICAgP2NhbGxASlNDQEBZQT9BVkpTVmFsdWVAMUBQQVZFeGVjU3RhdGVAMUBWMjFAVzRDYWxsVHlw
ZUAxQEFCVENhbGxEYXRhQDFAMUFCVkFyZ0xpc3RAMUBAWgogICAgID9jYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvckBKU0NAQFlJX0pQQVZFeGVjU3RhdGVAMUBAWgogICAgID9jYWxsT25NYWlu
VGhyZWFkQFdURkBAWUFYUDZBWFBBWEBaMEBaCkBAIC05MSw4ICs4Niw4IEBAIEVYUE9SVFMKICAg
ICA/Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpT
R2xvYmFsRGF0YUAyQFBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/Y2hlY2tDdXJyZW50SWRlbnRp
ZmllclRhYmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZFeGVjU3RhdGVAMkBAWgogICAgID9jaGVj
a0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkpTR2xvYmFsRGF0
YUAyQEBaCi0gICAgP2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0ZUAxQEFCVlNvdXJj
ZUNvZGVAMUBQQVZKU1ZhbHVlQDFAQFoKICAgICA/Y2hlY2tzdW1ATUQ1QFdURkBAUUFFWEFBVj8k
VmVjdG9yQEUkMEJBQEAyQEBaCisgICAgP2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0
ZUAxQEFCVlNvdXJjZUNvZGVAMUBQQVZKU1ZhbHVlQDFAQFoKICAgICA/Y2xhc3NOYW1lQEpTT2Jq
ZWN0QEpTQ0BAU0E/QVZVU3RyaW5nQDJAUEJWMTJAQFoKICAgICA/Y2xlYXJAU291cmNlUHJvdmlk
ZXJDYWNoZUBKU0NAQFFBRVhYWgogICAgID9jbGVhckJ1aWx0aW5TdHJ1Y3R1cmVzQEpTR2xvYmFs
RGF0YUBKU0NAQFFBRVhYWgpAQCAtMTY0LDYgKzE1OSw3IEBAIEVYUE9SVFMKICAgICA/ZGlzcGxh
eU5hbWVASlNGdW5jdGlvbkBKU0NAQFFBRT9CVlVTdHJpbmdAMkBQQVZFeGVjU3RhdGVAMkBAWgog
ICAgID9kdG9hQFdURkBAWUFYUUFETkFBX05BQUhBQUlAWgogICAgID9kdW1wU2FtcGxlRGF0YUBK
U0dsb2JhbERhdGFASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJAQFoKKyAgICA/RWNtYVNjcmlwdENv
bnZlcnRlckBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNB
QUJWMTIzQFhaCiAgICAgP2VtcHR5QFN0cmluZ0ltcGxAV1RGQEBTQVBBVjEyQFhaCiAgICAgP2Vu
dW1lcmFibGVAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUJFX05YWgogICAgID9lcXVhbFVURjE2
V2l0aFVURjhAVW5pY29kZUBXVEZAQFlBX05QQl9XMFBCRDFAWgpAQCAtMTgzLDYgKzE3OSw3IEBA
IEVYUE9SVFMKICAgICA/ZmFzdFplcm9lZE1hbGxvY0BXVEZAQFlBUEFYSUBaCiAgICAgP2ZpbGxH
ZXR0ZXJQcm9wZXJ0eVNsb3RASlNPYmplY3RASlNDQEBBQUVYQUFWUHJvcGVydHlTbG90QDJAUEFW
PyRXcml0ZUJhcnJpZXJCYXNlQFc0VW5rbm93bkBKU0NAQEAyQEBaCiAgICAgP2ZpbmFsaXplQFdl
YWtIYW5kbGVPd25lckBKU0NAQFVBRVhWPyRIYW5kbGVAVzRVbmtub3duQEpTQ0BAQDJAUEFYQFoK
KyAgICA/ZmluZEFsbG9jYXRvckBXZWFrSGVhcEBKU0NAQEFBRVBBVUZyZWVDZWxsQFdlYWtCbG9j
a0AyQFhaCiAgICAgP2ZpbmlzaENyZWF0aW9uQERhdGVJbnN0YW5jZUBKU0NAQElBRVhBQVZKU0ds
b2JhbERhdGFAMkBOQFoKICAgICA/ZmluaXNoQ3JlYXRpb25ASW50ZXJuYWxGdW5jdGlvbkBKU0NA
QElBRVhBQVZKU0dsb2JhbERhdGFAMkBBQlZJZGVudGlmaWVyQDJAQFoKICAgICA/ZmluaXNoQ3Jl
YXRpb25ASlNBcnJheUBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBJQFoKQEAgLTIyMCwxMCAr
MjE3LDEwIEBAIEVYUE9SVFMKICAgICA/Z2xvYmFsRXhlY0BKU0dsb2JhbE9iamVjdEBKU0NAQFFB
RVBBVkV4ZWNTdGF0ZUAyQFhaCiAgICAgP2dsb2JhbE9iamVjdENvdW50QEhlYXBASlNDQEBRQUVJ
WFoKICAgICA/Z3Jvd0BIYW5kbGVIZWFwQEpTQ0BAQUFFWFhaCisgICAgP2hhc2hTbG93Q2FzZUBT
dHJpbmdJbXBsQFdURkBAQUJFSVhaCiAgICAgP2hhc0luc3RhbmNlQEpTT2JqZWN0QEpTQ0BAU0Ff
TlBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFZKU1ZhbHVlQDJAMkBaCiAgICAgP2hhc1Byb3BlcnR5QEpT
T2JqZWN0QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBBQlZJZGVudGlmaWVyQDJAQFoKICAgICA/
aGFzUHJvcGVydHlASlNPYmplY3RASlNDQEBRQkVfTlBBVkV4ZWNTdGF0ZUAyQElAWgotICAgID9o
YXNoU2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRUlYWgogICAgID9oZWFwQEhlYXBASlNDQEBT
QVBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/aW5jcmVtZW50QFJlZkNvdW50ZWRMZWFrQ291bnRl
ckBXVEZAQFFBRVhYWgogICAgID9pbml0QEF0b21pY1N0cmluZ0BXVEZAQFNBWFhaCkBAIC0zMTEs
MTAgKzMwOCwxMCBAQCBFWFBPUlRTCiAgICAgP3NldE9yZGVyTG93ZXJGaXJzdEBDb2xsYXRvckBX
VEZAQFFBRVhfTkBaCiAgICAgP3NldFByb3RvdHlwZUBKU09iamVjdEBKU0NAQFFBRVhBQVZKU0ds
b2JhbERhdGFAMkBWSlNWYWx1ZUAyQEBaCiAgICAgP3NldFNldHRlckBQcm9wZXJ0eURlc2NyaXB0
b3JASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgorICAgID9zZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9y
QEpTQ0BAUUJFP0FWSlNWYWx1ZUAyQFhaCiAgICAgP3NldFVuZGVmaW5lZEBQcm9wZXJ0eURlc2Ny
aXB0b3JASlNDQEBRQUVYWFoKICAgICA/c2V0VXBTdGF0aWNGdW5jdGlvblNsb3RASlNDQEBZQV9O
UEFWRXhlY1N0YXRlQDFAUEJWSGFzaEVudHJ5QDFAUEFWSlNPYmplY3RAMUBBQlZJZGVudGlmaWVy
QDFAQUFWUHJvcGVydHlTbG90QDFAQFoKICAgICA/c2V0V3JpdGFibGVAUHJvcGVydHlEZXNjcmlw
dG9yQEpTQ0BAUUFFWF9OQFoKLSAgICA/c2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFC
RT9BVkpTVmFsdWVAMkBYWgogICAgID9zaHJpbmtUb0ZpdEBTdHJpbmdCdWlsZGVyQFdURkBAUUFF
WFhaCiAgICAgP3NpZ25hbEBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVYWFoKICAgICA/c2luZ2xl
Q2hhcmFjdGVyU3RyaW5nUmVwQFNtYWxsU3RyaW5nc0BKU0NAQFFBRVBBVlN0cmluZ0ltcGxAV1RG
QEBFQFoKQEAgLTM0MCwxMSArMzM3LDE1IEBAIEVYUE9SVFMKICAgICA/dGxzS2V5Q291bnRAV1RG
QEBZQUFBSlhaCiAgICAgP3Rsc0tleXNAV1RGQEBZQVBBS1haCiAgICAgP3RvQm9vbGVhbkBKU1N0
cmluZ0BKU0NAQFFCRV9OUEFWRXhlY1N0YXRlQDJAQFoKKyAgICA/VG9FeHBvbmVudGlhbEBEb3Vi
bGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJp
bmdCdWlsZGVyQDIzQEBaCisgICAgP1RvRml4ZWRARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91
YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgogICAgID90
b0ludDMyQEpTQ0BAWUFITkBaCiAgICAgP3RvSW50ZWdlckBKU1ZhbHVlQEpTQ0BAUUJFTlBBVkV4
ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyU2xvd0Nhc2VASlNWYWx1ZUBKU0NAQEFCRU5QQVZF
eGVjU3RhdGVAMkBAWgogICAgID90b09iamVjdEBKU0NlbGxASlNDQEBRQkVQQVZKU09iamVjdEAy
QFBBVkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKICAgICA/dG9PYmplY3RTbG93
Q2FzZUBKU1ZhbHVlQEpTQ0BAQUJFUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0ds
b2JhbE9iamVjdEAyQEBaCisgICAgP1RvUHJlY2lzaW9uQERvdWJsZVRvU3RyaW5nQ29udmVydGVy
QGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKKyAg
ICA/VG9TaG9ydGVzdEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBX
VEZAQFFCRV9OTlBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKICAgICA/dG9TdHJpbmdASlNPYmplY3RA
SlNDQEBRQkVQQVZKU1N0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvU3RyaW5nRGVj
aW1hbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKICAgICA/dG9TdHJpbmdFeHBvbmVu
dGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjEzMCw2ICsyMTMwLDM0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0Jsb2NrLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrQmxvY2suaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFr
SGVhcC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGhlYXBcV2Vha0hlYXAuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrSW1wbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtIYW5kbGVPd25lci5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcV2Vha0hhbmRsZU93bmVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcSGFuZGxlU3RhY2suY3BwIgogCQkJCT4KIAkJCTwv
RmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzEyLDcgKzMxMiwxNCBAQAogCQkxNEM1MjQy
QjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1YnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTY1ODFBMEY0RTM2RjQwMDAxNTBGRCAvKiBKSVRTdHVi
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyRjNEODEzOUY0QkUyMDA0OTEwMzEg
LyogTWFya2VkU3BhY2UuY3BwICovOyB9OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyog
TWFya2VkU3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0RTg0RjlFMTRFRTFBQ0Mw
MEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTRFODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAg
Ki87IH07CisJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0Mw
MEQ2RDVENCAvKiBXZWFrQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFODRGOUIx
NEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCAqLzsgfTsKKwkJMTRFODRGQTExNEVFMUFD
QzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEU4NEZBMjE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlEMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTlE
MTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc1NkZDNjBFMjAzMUIy
MDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwICovOyB9OworCQkxNEY3MjU2
NTE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjcyNTYzMTRFRTI2NUUwMEIxNjUyQiAv
KiBXZWFrSGFuZGxlT3duZXIuY3BwICovOyB9OworCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIg
LyogV2Vha0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRGOTc0
NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8q
IEhlYXBSb290VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi87IH07CiAJCTQ1MTUzOUI5MTJE
Qzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NTE1MzlCODEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MjUsNyArOTMyLDE0
IEBACiAJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBY3RpdmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0REE4MThGMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBY3RpdmF0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0Ey
IC8qIEpTR2xvYmFsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTR2xvYmFsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRF
ODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWFrQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNEU4NEY5QTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxNEU4NEY5QjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0hlYXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0hlYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUQxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjI1MjU2MEQwOEREOEQwMDRFQ0ZGRiAvKiBKU1Zhcmlh
YmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFyaWFibGVP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRGNzI1NjMxNEVFMjY1RTAw
QjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWFrSGFuZGxlT3duZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtIYW5kbGVPd25lci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNEY5NzQ0NjEzOEM4NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RW
aXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBSb290VmlzaXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0MjBCQTlFOEE3MDA4MUU5
RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBW
ZXJzaW9uLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0MzBC
QTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gSmF2YVNjcmlwdENvcmUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY4LDYgKzE1ODIsMTMgQEAKIAkJCQkwRkM4MTUxMjE0MDUxMTg2
MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovLAogCQkJCTBGQzgxNTE0MTQwNTExOEQw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovLAogCQkJCTE0MkUzMTMzMTM0RkYwQTYwMEFG
QURCNSAvKiBXZWFrLmggKi8sCisJCQkJMTRFODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtC
bG9jay5jcHAgKi8sCisJCQkJMTRFODRGOUExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5o
ICovLAorCQkJCTE0RjcyNTYzMTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3Bw
ICovLAorCQkJCTE0RjcyNTY0MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCAq
LywKKwkJCQkxNEU4NEY5QjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3BwICovLAorCQkJ
CTE0RTg0RjlDMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5oICovLAorCQkJCTE0RTg0RjlE
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oICovLAogCQkJCTBGMjQyREE1MTNGM0IxQkIw
MDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8sCiAJCQkJMEZDODE1MDgxNDA0
M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICovLAogCQkJCTBGQzgxNTA5
MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8sCkBAIC0yNTA1LDYg
KzI1MjYsMTAgQEAKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQw
MEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0OTcyMDkxMTRFQjgzMTUwMEZFQjFCNyAvKiBQYXNzV2Vhay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMTRFODRGQTExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggaW4g
SGVhZGVycyAqLywKKwkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBp
biBIZWFkZXJzICovLAorCQkJCTE0RjcyNTY2MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxl
T3duZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1
QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9y
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDYwLDYgKzMwODUsOSBAQAogCQkJCTg2QjU4MjY5MTRE
Mjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
QjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRFODRGOUUxNEVFMUFDQzAwRDZENUQ0IC8qIFdl
YWtCbG9jay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQg
LyogV2Vha0hlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRGNzI1NjUxNEVFMjY1RTAwQjE2
NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0
RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
RkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTVCMTRFRjkwQUQwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNiArNTksOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNl
OjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSooKSBjb25zdCB7IHJldHVybiAobV9zbG90ICYmICptX3Nsb3QpID8gcmVpbnRlcnByZXRfY2Fz
dDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOyB9CiAKKyAgICBIYW5kbGVTbG90IHNsb3Qo
KSBjb25zdCB7IHJldHVybiBtX3Nsb3Q7IH0KKwogcHJvdGVjdGVkOgogICAgIEhhbmRsZUJhc2Uo
SGFuZGxlU2xvdCBzbG90KQogICAgICAgICA6IG1fc2xvdChzbG90KQpAQCAtNjcsNyArNjksNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdm9pZCBzd2FwKEhhbmRsZUJhc2UmIG90aGVyKSB7IHN0
ZDo6c3dhcChtX3Nsb3QsIG90aGVyLm1fc2xvdCk7IH0KIAotICAgIEhhbmRsZVNsb3Qgc2xvdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2xvdDsgfQogICAgIHZvaWQgc2V0U2xvdChIYW5kbGVTbG90IHNs
b3QpCiAgICAgewogICAgICAgICBtX3Nsb3QgPSBzbG90OwpAQCAtMTMzLDYgKzEzNCw3IEBAIHBy
b3RlY3RlZDoKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEhhbmRsZUhlYXA7Cisg
ICAgZnJpZW5kIGNsYXNzIFdlYWtCbG9jazsKIAogICAgIHN0YXRpYyBIYW5kbGU8VD4gd3JhcFNs
b3QoSGFuZGxlU2xvdCBzbG90KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZUhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZUhlYXAuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTkgKzMxLDYg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVPd25l
cigpCi17Ci19Ci0KLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFdlYWtIYW5kbGVPd25lcjo6ZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKikKLXsKLX0KLQogSGFuZGxlSGVhcDo6SGFuZGxlSGVhcChKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCiAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fbmV4
dFRvRmluYWxpemUoMCkKQEAgLTczLDYyICs2MCw2IEBAIHZvaWQgSGFuZGxlSGVhcDo6dmlzaXRT
dHJvbmdIYW5kbGVzKEhlYXAKICAgICB9CiB9CiAKLXZvaWQgSGFuZGxlSGVhcDo6dmlzaXRXZWFr
SGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKLXsKLSAgICBTbG90Vmlz
aXRvciYgdmlzaXRvciA9IGhlYXBSb290VmlzaXRvci52aXNpdG9yKCk7Ci0KLSAgICBOb2RlKiBl
bmQgPSBtX3dlYWtMaXN0LmVuZCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2Vha0xpc3Qu
YmVnaW4oKTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBub2RlLT5uZXh0KCkpIHsKLSNpZiBFTkFCTEUo
R0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFpc1ZhbGlkV2Vha05vZGUobm9kZSkpCi0gICAg
ICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IG5vZGUtPnNs
b3QoKS0+YXNDZWxsKCk7Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyID0g
bm9kZS0+d2Vha093bmVyKCk7Ci0gICAgICAgIGlmICghd2Vha093bmVyKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgaWYgKCF3ZWFrT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSwgbm9kZS0+d2Vh
a093bmVyQ29udGV4dCgpLCB2aXNpdG9yKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIGhlYXBSb290VmlzaXRvci52aXNpdChub2RlLT5zbG90KCkpOwotICAgIH0KLX0KLQotdm9p
ZCBIYW5kbGVIZWFwOjpmaW5hbGl6ZVdlYWtIYW5kbGVzKCkKLXsKLSAgICBOb2RlKiBlbmQgPSBt
X3dlYWtMaXN0LmVuZCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2Vha0xpc3QuYmVnaW4o
KTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBtX25leHRUb0ZpbmFsaXplKSB7Ci0gICAgICAgIG1fbmV4
dFRvRmluYWxpemUgPSBub2RlLT5uZXh0KCk7Ci0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0g
ICAgICAgIGlmICghaXNWYWxpZFdlYWtOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsK
LSNlbmRpZgotCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IG5vZGUtPnNsb3QoKS0+YXNDZWxsKCk7
Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGlmIChXZWFrSGFuZGxlT3duZXIqIHdlYWtPd25lciA9IG5vZGUtPndlYWtP
d25lcigpKSB7Ci0gICAgICAgICAgICB3ZWFrT3duZXItPmZpbmFsaXplKEhhbmRsZTxVbmtub3du
Pjo6d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSwgbm9kZS0+d2Vha093bmVyQ29udGV4dCgpKTsKLSAg
ICAgICAgICAgIGlmIChtX25leHRUb0ZpbmFsaXplICE9IG5vZGUtPm5leHQoKSkgLy8gT3duZXIg
ZGVhbGxvY2F0ZWQgbm9kZS4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
I2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBpZiAoIWlzTGl2ZU5vZGUobm9kZSkp
Ci0gICAgICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgICAgICpub2RlLT5zbG90KCkgPSBK
U1ZhbHVlKCk7Ci0gICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUp
OwotICAgICAgICBtX2ltbWVkaWF0ZUxpc3QucHVzaChub2RlKTsKLSAgICB9Ci0gICAgCi0gICAg
bV9uZXh0VG9GaW5hbGl6ZSA9IDA7Ci19Ci0KIHZvaWQgSGFuZGxlSGVhcDo6d3JpdGVCYXJyaWVy
KEhhbmRsZVNsb3Qgc2xvdCwgY29uc3QgSlNWYWx1ZSYgdmFsdWUpCiB7CiAgICAgLy8gRm9yYmlk
IGFzc2lnbm1lbnQgdG8gaGFuZGxlcyBkdXJpbmcgdGhlIGZpbmFsaXphdGlvbiBwaGFzZSwgc2lu
Y2UgaXQgd291bGQgdmlvbGF0ZSBtYW55IEdDIGludmFyaWFudHMuCkBAIC0xNTAsMTUgKzgxLDYg
QEAgdm9pZCBIYW5kbGVIZWFwOjp3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPmlzV2VhaygpKSB7Ci0gICAgICAgIG1fd2Vha0xp
c3QucHVzaChub2RlKTsKLSNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFp
c0xpdmVOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgbV9zdHJvbmdMaXN0LnB1c2gobm9kZSk7CiAjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCiAgICAgaWYgKCFpc0xpdmVOb2RlKG5vZGUpKQpAQCAtMTg4LDI0ICsx
MTAsNiBAQCBib29sIEhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0KLWJvb2wgSGFuZGxlSGVhcDo6aXNWYWxpZFdlYWtOb2Rl
KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFpc0xpdmVOb2RlKG5vZGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFub2RlLT5pc1dlYWsoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9ICpub2RlLT5zbG90KCk7Ci0gICAgaWYgKCF2YWx1ZSB8
fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTQ2VsbCog
Y2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgIGlmICghY2VsbCB8fCAhY2VsbC0+c3RydWN0dXJl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQogI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hh
bmRsZUhlYXAuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsNiBAQCBjbGFzcyBK
U0dsb2JhbERhdGE7CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKLWNsYXNz
IEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+V2Vha0hhbmRsZU93bmVyKCk7Ci0gICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0
KTsKLX07Ci0KIGNsYXNzIEhhbmRsZUhlYXAgewogcHVibGljOgogICAgIHN0YXRpYyBIYW5kbGVI
ZWFwKiBoZWFwRm9yKEhhbmRsZVNsb3QpOwpAQCAtNTgsMjAgKzUxLDEwIEBAIHB1YmxpYzoKICAg
ICBIYW5kbGVTbG90IGFsbG9jYXRlKCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3Qp
OwogCi0gICAgdm9pZCBtYWtlV2VhayhIYW5kbGVTbG90LCBXZWFrSGFuZGxlT3duZXIqID0gMCwg
dm9pZCogY29udGV4dCA9IDApOwotICAgIEhhbmRsZVNsb3QgY29weVdlYWsoSGFuZGxlU2xvdCk7
Ci0KICAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2
b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBmaW5hbGl6
ZVdlYWtIYW5kbGVzKCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmll
cihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7CiAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgYm9vbCBoYXNXZWFrT3duZXIoSGFuZGxlU2xvdCwgV2Vha0hhbmRsZU93bmVyKik7Ci0gICAg
Ym9vbCBoYXNGaW5hbGl6ZXIoSGFuZGxlU2xvdCk7Ci0jZW5kaWYKLQogICAgIHVuc2lnbmVkIHBy
b3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hTdHJvbmdIYW5kbGUoRnVuY3RvciYsIGNvbnN0IEhhc2hDb3VudGVk
U2V0PEpTQ2VsbCo+JiBza2lwU2V0KTsKQEAgLTg1LDEyICs2OCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIEhhbmRsZVNsb3Qgc2xvdCgpOwogICAgICAgICBIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKCk7
CiAKLSAgICAgICAgdm9pZCBtYWtlV2VhayhXZWFrSGFuZGxlT3duZXIqLCB2b2lkKiBjb250ZXh0
KTsKLSAgICAgICAgYm9vbCBpc1dlYWsoKTsKLSAgICAgICAgCi0gICAgICAgIFdlYWtIYW5kbGVP
d25lciogd2Vha093bmVyKCk7Ci0gICAgICAgIHZvaWQqIHdlYWtPd25lckNvbnRleHQoKTsKLQog
ICAgICAgICB2b2lkIHNldFByZXYoTm9kZSopOwogICAgICAgICBOb2RlKiBwcmV2KCk7CiAKQEAg
LTk4LDEyICs3NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5leHQoKTsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFdlYWtIYW5kbGVPd25lciogZW1wdHlXZWFrT3duZXIoKTsKLQogICAg
ICAgICBKU1ZhbHVlIG1fdmFsdWU7CiAgICAgICAgIEhhbmRsZUhlYXAqIG1faGFuZGxlSGVhcDsK
LSAgICAgICAgV2Vha0hhbmRsZU93bmVyKiBtX3dlYWtPd25lcjsKLSAgICAgICAgdm9pZCogbV93
ZWFrT3duZXJDb250ZXh0OwogICAgICAgICBOb2RlKiBtX3ByZXY7CiAgICAgICAgIE5vZGUqIG1f
bmV4dDsKICAgICB9OwpAQCAtMTE0LDcgKzg3LDYgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGdyb3coKTsKICAgICAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikgfHwg
IUFTU0VSVF9ESVNBQkxFRAotICAgIGJvb2wgaXNWYWxpZFdlYWtOb2RlKE5vZGUqKTsKICAgICBi
b29sIGlzTGl2ZU5vZGUoTm9kZSopOwogI2VuZGlmCiAKQEAgLTEyMiw3ICs5NCw2IEBAIHByaXZh
dGU6CiAgICAgQmxvY2tTdGFjazxOb2RlPiBtX2Jsb2NrU3RhY2s7CiAKICAgICBTZW50aW5lbExp
bmtlZExpc3Q8Tm9kZT4gbV9zdHJvbmdMaXN0OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2Rl
PiBtX3dlYWtMaXN0OwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPiBtX2ltbWVkaWF0ZUxp
c3Q7CiAgICAgU2luZ2x5TGlua2VkTGlzdDxOb2RlPiBtX2ZyZWVMaXN0OwogICAgIE5vZGUqIG1f
bmV4dFRvRmluYWxpemU7CkBAIC0xNzUsNDkgKzE0Niw4IEBAIGlubGluZSB2b2lkIEhhbmRsZUhl
YXA6OmRlYWxsb2NhdGUoSGFuZGwKICAgICBtX2ZyZWVMaXN0LnB1c2gobm9kZSk7CiB9CiAKLWlu
bGluZSBIYW5kbGVTbG90IEhhbmRsZUhlYXA6OmNvcHlXZWFrKEhhbmRsZVNsb3Qgb3RoZXIpCi17
Ci0gICAgTm9kZSogbm9kZSA9IHRvTm9kZShhbGxvY2F0ZSgpKTsKLSAgICBub2RlLT5tYWtlV2Vh
ayh0b05vZGUob3RoZXIpLT53ZWFrT3duZXIoKSwgdG9Ob2RlKG90aGVyKS0+d2Vha093bmVyQ29u
dGV4dCgpKTsKLSAgICB3cml0ZUJhcnJpZXIobm9kZS0+c2xvdCgpLCAqb3RoZXIpOwotICAgICpu
b2RlLT5zbG90KCkgPSAqb3RoZXI7Ci0gICAgcmV0dXJuIHRvSGFuZGxlKG5vZGUpOwotfQotCi1p
bmxpbmUgdm9pZCBIYW5kbGVIZWFwOjptYWtlV2VhayhIYW5kbGVTbG90IGhhbmRsZSwgV2Vha0hh
bmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgLy8gRm9yYmlkIGFz
c2lnbm1lbnQgdG8gaGFuZGxlcyBkdXJpbmcgdGhlIGZpbmFsaXphdGlvbiBwaGFzZSwgc2luY2Ug
aXQgd291bGQgdmlvbGF0ZSBtYW55IEdDIGludmFyaWFudHMuCi0gICAgLy8gRmlsZSBhIGJ1ZyB3
aXRoIHN0YWNrIHRyYWNlIGlmIHlvdSBoaXQgdGhpcy4KLSAgICBpZiAobV9uZXh0VG9GaW5hbGl6
ZSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGhhbmRsZSk7Ci0g
ICAgbm9kZS0+bWFrZVdlYWsod2Vha093bmVyLCBjb250ZXh0KTsKLQotICAgIFNlbnRpbmVsTGlu
a2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUpOwotICAgIGlmICghKmhhbmRsZSB8fCAhaGFuZGxl
LT5pc0NlbGwoKSkgewotICAgICAgICBtX2ltbWVkaWF0ZUxpc3QucHVzaChub2RlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fd2Vha0xpc3QucHVzaChub2RlKTsKLX0KLQotI2lm
ICFBU1NFUlRfRElTQUJMRUQKLWlubGluZSBib29sIEhhbmRsZUhlYXA6Omhhc1dlYWtPd25lcihI
YW5kbGVTbG90IGhhbmRsZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIpCi17Ci0gICAgcmV0
dXJuIHRvTm9kZShoYW5kbGUpLT53ZWFrT3duZXIoKSA9PSB3ZWFrT3duZXI7Ci19Ci0KLWlubGlu
ZSBib29sIEhhbmRsZUhlYXA6Omhhc0ZpbmFsaXplcihIYW5kbGVTbG90IGhhbmRsZSkKLXsKLSAg
ICByZXR1cm4gdG9Ob2RlKGhhbmRsZSktPndlYWtPd25lcigpOwotfQotI2VuZGlmCi0KIGlubGlu
ZSBIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKEhhbmRsZUhlYXAqIGhhbmRsZUhlYXApCiAgICAgOiBt
X2hhbmRsZUhlYXAoaGFuZGxlSGVhcCkKLSAgICAsIG1fd2Vha093bmVyKDApCi0gICAgLCBtX3dl
YWtPd25lckNvbnRleHQoMCkKICAgICAsIG1fcHJldigwKQogICAgICwgbV9uZXh0KDApCiB7CkBA
IC0yMjUsOCArMTU1LDYgQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVh
cAogCiBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShXVEY6OlNlbnRpbmVsVGFnKQogICAg
IDogbV9oYW5kbGVIZWFwKDApCi0gICAgLCBtX3dlYWtPd25lcigwKQotICAgICwgbV93ZWFrT3du
ZXJDb250ZXh0KDApCiAgICAgLCBtX3ByZXYoMCkKICAgICAsIG1fbmV4dCgwKQogewpAQCAtMjQy
LDI4ICsxNzAsNiBAQCBpbmxpbmUgSGFuZGxlSGVhcCogSGFuZGxlSGVhcDo6Tm9kZTo6aGFuCiAg
ICAgcmV0dXJuIG1faGFuZGxlSGVhcDsKIH0KIAotaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6Tm9k
ZTo6bWFrZVdlYWsoV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCi17
Ci0gICAgbV93ZWFrT3duZXIgPSB3ZWFrT3duZXIgPyB3ZWFrT3duZXIgOiBlbXB0eVdlYWtPd25l
cigpOwotICAgIG1fd2Vha093bmVyQ29udGV4dCA9IGNvbnRleHQ7Ci19Ci0KLWlubGluZSBib29s
IEhhbmRsZUhlYXA6Ok5vZGU6OmlzV2VhaygpCi17Ci0gICAgcmV0dXJuIG1fd2Vha093bmVyOyAv
LyBUcnVlIGZvciBlbXB0eVdlYWtPd25lcigpLgotfQotCi1pbmxpbmUgV2Vha0hhbmRsZU93bmVy
KiBIYW5kbGVIZWFwOjpOb2RlOjp3ZWFrT3duZXIoKQotewotICAgIHJldHVybiBtX3dlYWtPd25l
ciA9PSBlbXB0eVdlYWtPd25lcigpID8gMCA6IG1fd2Vha093bmVyOyAvLyAwIGZvciBlbXB0eVdl
YWtPd25lcigpLgotfQotCi1pbmxpbmUgdm9pZCogSGFuZGxlSGVhcDo6Tm9kZTo6d2Vha093bmVy
Q29udGV4dCgpCi17Ci0gICAgQVNTRVJUKHdlYWtPd25lcigpKTsKLSAgICByZXR1cm4gbV93ZWFr
T3duZXJDb250ZXh0OwotfQotCiBpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjpOb2RlOjpzZXRQcmV2
KE5vZGUqIHByZXYpCiB7CiAgICAgbV9wcmV2ID0gcHJldjsKQEAgLTI4NCwxMyArMTkwLDYgQEAg
aW5saW5lIEhhbmRsZUhlYXA6Ok5vZGUqIEhhbmRsZUhlYXA6Ok5vZAogICAgIHJldHVybiBtX25l
eHQ7CiB9CiAKLS8vIFNlbnRpbmVsIHRvIGluZGljYXRlIHRoYXQgYSBub2RlIGlzIHdlYWssIGJ1
dCBpdHMgb3duZXIgaGFzIG5vIG1lYW5pbmdmdWwKLS8vIGNhbGxiYWNrcy4gVGhpcyBhbGxvd3Mg
dXMgdG8gb3B0aW1pemUgYnkgc2tpcHBpbmcgc3VjaCBub2Rlcy4KLWlubGluZSBXZWFrSGFuZGxl
T3duZXIqIEhhbmRsZUhlYXA6Ok5vZGU6OmVtcHR5V2Vha093bmVyKCkKLXsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxXZWFrSGFuZGxlT3duZXIqPigtMSk7Ci19Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgSGFuZGxlSGVhcDo6Zm9yRWFjaFN0cm9uZ0hhbmRsZShGdW5j
dG9yJiBmdW5jdG9yLCBjb25zdCBIYXNoQ291bnRlZFNldDxKU0NlbGwqPiYgc2tpcFNldCkKIHsK
ICAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMywxOCArMzEzLDE3IEBAIEhl
YXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEKICAgICA6IG1faGVhcFNpemUo
aGVhcFNpemUpCiAgICAgLCBtX21pbkJ5dGVzUGVyQ3ljbGUoaGVhcFNpemVGb3JIaW50KGhlYXBT
aXplKSkKICAgICAsIG1fbGFzdEZ1bGxHQ1NpemUoMCkKLSAgICAsIG1fd2F0ZXJNYXJrKDApCiAg
ICAgLCBtX2hpZ2hXYXRlck1hcmsobV9taW5CeXRlc1BlckN5Y2xlKQogICAgICwgbV9vcGVyYXRp
b25JblByb2dyZXNzKE5vT3BlcmF0aW9uKQogICAgICwgbV9vYmplY3RTcGFjZSh0aGlzKQogICAg
ICwgbV9zdG9yYWdlU3BhY2UodGhpcykKICAgICAsIG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxk
UXVpdChmYWxzZSkKLSAgICAsIG1fZXh0cmFDb3N0KDApCiAgICAgLCBtX21hcmtMaXN0U2V0KDAp
CiAgICAgLCBtX2FjdGl2aXR5Q2FsbGJhY2soRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3Jl
YXRlKHRoaXMpKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQogICAgICwgbV9zaGFyZWRE
YXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX3Nsb3RWaXNpdG9yKG1fc2hhcmVkRGF0YSkKKyAgICAs
IG1fd2Vha0hlYXAodGhpcykKICAgICAsIG1faGFuZGxlSGVhcChnbG9iYWxEYXRhKQogICAgICwg
bV9pc1NhZmVUb0NvbGxlY3QoZmFsc2UpCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
QEAgLTM3Niw3ICszNzUsNyBAQCB2b2lkIEhlYXA6OmRlc3Ryb3koKQogICAgIGNhbm9uaWNhbGl6
ZUNlbGxMaXZlbmVzc0RhdGEoKTsKICAgICBjbGVhck1hcmtzKCk7CiAKLSAgICBtX2hhbmRsZUhl
YXAuZmluYWxpemVXZWFrSGFuZGxlcygpOworICAgIG1fd2Vha0hlYXAuZmluYWxpemVBbGwoKTsK
ICAgICBtX2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5maW5hbGl6ZVNtYWxsU3RyaW5ncygpOwog
ICAgIHNocmluaygpOwogICAgIG1fc3RvcmFnZVNwYWNlLmRlc3Ryb3koKTsKQEAgLTQ2Niw5ICs0
NjUsNyBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdFNsb3dDYXNlCiAgICAgLy8g
aWYgYSBsYXJnZSB2YWx1ZSBzdXJ2aXZlcyBvbmUgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGVyZSBp
cyBub3QgbXVjaCBwb2ludCB0bwogICAgIC8vIGNvbGxlY3RpbmcgbW9yZSBmcmVxdWVudGx5IGFz
IGxvbmcgYXMgaXQgc3RheXMgYWxpdmUuCiAKLSAgICBpZiAobV9leHRyYUNvc3QgPiBtYXhFeHRy
YUNvc3QgJiYgbV9leHRyYUNvc3QgPiBoaWdoV2F0ZXJNYXJrKCkgLyAyKQotICAgICAgICBjb2xs
ZWN0QWxsR2FyYmFnZSgpOwotICAgIG1fZXh0cmFDb3N0ICs9IGNvc3Q7CisgICAgYWRkVG9XYXRl
ck1hcmsoY29zdCk7CiB9CiAKIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCkBAIC02ODcs
MTIgKzY4NCwxMiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICNlbmRpZgog
ICAgIH0KIAotICAgIC8vIFdlYWsgaGFuZGxlcyBtdXN0IGJlIG1hcmtlZCBsYXN0LCBiZWNhdXNl
IHRoZWlyIG93bmVycyB1c2UgdGhlIHNldCBvZgotICAgIC8vIG9wYXF1ZSByb290cyB0byBkZXRl
cm1pbmUgcmVhY2hhYmlsaXR5LgorICAgIC8vIFdlYWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtl
ZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVwZW5kcyBvbgorICAgIC8vIHRoZSBsaXZl
bmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgogICAgIHsKLSAgICAgICAgR0NQ
SEFTRShWaXNpdGluZ1dlYWtIYW5kbGVzKTsKKyAgICAgICAgR0NQSEFTRShWaXNpdGluZ0xpdmVX
ZWFrSGFuZGxlcyk7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBtX2hhbmRs
ZUhlYXAudmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICAgICAgbV93
ZWFrSGVhcC52aXNpdExpdmVXZWFrSW1wbHMoaGVhcFJvb3RWaXNpdG9yKTsKICAgICAgICAgICAg
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzA1LDYgKzcwMiwyMCBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KKworICAgIHsKKyAgICAgICAgR0NQSEFTRShWaXNpdGluZ0RlYWRXZWFrSGFuZGxlcyk7Cisg
ICAgICAgIG1fd2Vha0hlYXAudmlzaXREZWFkV2Vha0ltcGxzKGhlYXBSb290VmlzaXRvcik7CisK
KyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKHZpc2l0
b3IpOworICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOworI2lmIEVOQUJMRShQ
QVJBTExFTF9HQykKKyAgICAgICAgICAgIHZpc2l0b3IuZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNp
dG9yOjpNYXN0ZXJEcmFpbik7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKwogICAgIEdDQ09V
TlRFUihWaXNpdGVkVmFsdWVDb3VudCwgdmlzaXRvci52aXNpdENvdW50KCkpOwogCiAgICAgdmlz
aXRvci5kb25lQ29weWluZygpOwpAQCAtODA1LDcgKzgxNiw3IEBAIHZvaWQgSGVhcDo6Y29sbGVj
dChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAgICAgCiAgICAgewogICAgICAgICBHQ1BIQVNF
KEZpbmFsaXplV2Vha0hhbmRsZXMpOwotICAgICAgICBtX2hhbmRsZUhlYXAuZmluYWxpemVXZWFr
SGFuZGxlcygpOworICAgICAgICBtX3dlYWtIZWFwLnN3ZWVwKCk7CiAgICAgICAgIG1fZ2xvYmFs
RGF0YS0+c21hbGxTdHJpbmdzLmZpbmFsaXplU21hbGxTdHJpbmdzKCk7CiAgICAgfQogICAgIApA
QCAtODM2LDcgKzg0Nyw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRv
Z2cKICAgICBzaXplX3QgcHJvcG9ydGlvbmFsQnl0ZXMgPSAyICogbmV3U2l6ZTsKICAgICBpZiAo
ZnVsbEdDKSB7CiAgICAgICAgIG1fbGFzdEZ1bGxHQ1NpemUgPSBuZXdTaXplOwotICAgICAgICBz
ZXRIaWdoV2F0ZXJNYXJrKG1heChwcm9wb3J0aW9uYWxCeXRlcywgbV9taW5CeXRlc1BlckN5Y2xl
KSk7CisgICAgICAgIG1faGlnaFdhdGVyTWFyayA9IG1heChwcm9wb3J0aW9uYWxCeXRlcywgbV9t
aW5CeXRlc1BlckN5Y2xlKTsKICAgICB9CiAgICAgZG91YmxlIGxhc3RHQ0VuZFRpbWUgPSBXVEY6
OmN1cnJlbnRUaW1lKCk7CiAgICAgbV9sYXN0R0NMZW5ndGggPSBsYXN0R0NFbmRUaW1lIC0gbGFz
dEdDU3RhcnRUaW1lOwpAQCAtODUyLDggKzg2Myw4IEBAIHZvaWQgSGVhcDo6Y2Fub25pY2FsaXpl
Q2VsbExpdmVuZXNzRGF0YSgKIAogdm9pZCBIZWFwOjpyZXNldEFsbG9jYXRvcnMoKQogewotICAg
IG1fZXh0cmFDb3N0ID0gMDsKICAgICBtX29iamVjdFNwYWNlLnJlc2V0QWxsb2NhdG9ycygpOwor
ICAgIG1fd2Vha0hlYXAucmVzZXRBbGxvY2F0b3IoKTsKIH0KIAogdm9pZCBIZWFwOjpzZXRBY3Rp
dml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxi
YWNrKQpAQCAtOTE0LDE1ICs5MjUsMTUgQEAgdm9pZCBIZWFwOjpyZWxlYXNlRnJlZUJsb2Nrcygp
CiAKIHZvaWQgSGVhcDo6YWRkRmluYWxpemVyKEpTQ2VsbCogY2VsbCwgRmluYWxpemVyIGZpbmFs
aXplcikKIHsKLSAgICBXZWFrPEpTQ2VsbD4gd2VhaygqZ2xvYmFsRGF0YSgpLCBjZWxsLCAmbV9m
aW5hbGl6ZXJPd25lciwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmluYWxpemVyKSk7Ci0gICAg
d2Vhay5sZWFrSGFuZGxlKCk7IC8vIEJhbGFuY2VkIGJ5IEZpbmFsaXplck93bmVyOjpmaW5hbGl6
ZSgpLgorICAgIHdlYWtIZWFwKCktPmFsbG9jYXRlKGNlbGwsICZtX2ZpbmFsaXplck93bmVyLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihmaW5hbGl6ZXIpKTsgLy8gQmFsYW5jZWQgYnkgRmluYWxp
emVyT3duZXI6OmZpbmFsaXplKCkuCiB9CiAKIHZvaWQgSGVhcDo6RmluYWxpemVyT3duZXI6OmZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgV2Vh
azxKU0NlbGw+IHdlYWsoV2VhazxKU0NlbGw+OjpBZG9wdCwgaGFuZGxlKTsKKyAgICBIYW5kbGVT
bG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwogICAgIEZpbmFsaXplciBmaW5hbGl6ZXIgPSByZWlu
dGVycHJldF9jYXN0PEZpbmFsaXplcj4oY29udGV4dCk7Ci0gICAgZmluYWxpemVyKHdlYWsuZ2V0
KCkpOworICAgIGZpbmFsaXplcihzbG90LT5hc0NlbGwoKSk7CisgICAgV2Vha0hlYXA6OmRlYWxs
b2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoc2xvdCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsOCBAQAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiTWFya2Vk
U3BhY2UuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIldlYWtIYW5kbGVP
d25lci5oIgorI2luY2x1ZGUgIldlYWtIZWFwLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyU3Vw
cG9ydC5oIgogI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KQEAgLTEzMywxMSArMTM1LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBl
IGZvckVhY2hQcm90ZWN0ZWRDZWxsKEZ1bmN0b3ImKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVk
Q2VsbCgpOwogCisgICAgICAgIFdlYWtIZWFwKiB3ZWFrSGVhcCgpIHsgcmV0dXJuICZtX3dlYWtI
ZWFwOyB9CiAgICAgICAgIEhhbmRsZUhlYXAqIGhhbmRsZUhlYXAoKSB7IHJldHVybiAmbV9oYW5k
bGVIZWFwOyB9CiAgICAgICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZt
X2hhbmRsZVN0YWNrOyB9CiAKICAgICAgICAgdm9pZCBnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJv
b3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKTsKIAorICAgICAgICB2b2lkIGFkZFRvV2F0ZXJN
YXJrKHNpemVfdCk7CisKICAgICAgICAgZG91YmxlIGxhc3RHQ0xlbmd0aCgpIHsgcmV0dXJuIG1f
bGFzdEdDTGVuZ3RoOyB9CiAKICAgICBwcml2YXRlOgpAQCAtMTU1LDcgKzE2MCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHNpemVfdCB3YXRlck1hcmsoKTsKICAgICAgICAgc2l6ZV90
IGhpZ2hXYXRlck1hcmsoKTsKLSAgICAgICAgdm9pZCBzZXRIaWdoV2F0ZXJNYXJrKHNpemVfdCk7
CiAgICAgICAgIGJvb2wgc2hvdWxkQ29sbGVjdCgpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbWluRXh0cmFDb3N0ID0gMjU2OwpAQCAtMTk5LDcgKzIwMyw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjb25zdCBIZWFwU2l6ZSBtX2hlYXBTaXplOwogICAgICAgICBjb25zdCBz
aXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwogICAgICAgICBzaXplX3QgbV9sYXN0RnVsbEdDU2l6
ZTsKLSAgICAgICAgc2l6ZV90IG1fd2F0ZXJNYXJrOwogICAgICAgICBzaXplX3QgbV9oaWdoV2F0
ZXJNYXJrOwogICAgICAgICAKICAgICAgICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBtX29wZXJhdGlv
bkluUHJvZ3Jlc3M7CkBAIC0yMTgsOCArMjIxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZUYWJsZVNwZWN0cnVtIG1fZGVzdHJveWVkVHlwZUNvdW50czsKICNlbmRpZgogCi0gICAgICAg
IHNpemVfdCBtX2V4dHJhQ29zdDsKLQogICAgICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0
ZWRWYWx1ZXM7CiAgICAgICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogPiBtX3Rl
bXBTb3J0aW5nVmVjdG9yczsKICAgICAgICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+
KiBtX21hcmtMaXN0U2V0OwpAQCAtMjMxLDYgKzIzMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhIG1fc2hhcmVkRGF0YTsKICAgICAgICAgU2xv
dFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKIAorICAgICAgICBXZWFrSGVhcCBtX3dlYWtIZWFwOwog
ICAgICAgICBIYW5kbGVIZWFwIG1faGFuZGxlSGVhcDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9o
YW5kbGVTdGFjazsKICAgICAgICAgREZHQ29kZUJsb2NrcyBtX2RmZ0NvZGVCbG9ja3M7CkBAIC0y
OTMsOSArMjk1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9oaWdoV2F0
ZXJNYXJrOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEhlYXA6OnNldEhpZ2hXYXRlck1hcmso
c2l6ZV90IG5ld0hpZ2hXYXRlck1hcmspCisgICAgaW5saW5lIHZvaWQgSGVhcDo6YWRkVG9XYXRl
ck1hcmsoc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICBtX2hpZ2hXYXRlck1hcmsgPSBuZXdI
aWdoV2F0ZXJNYXJrOworICAgICAgICBtX29iamVjdFNwYWNlLmFkZFRvV2F0ZXJNYXJrKHNpemUp
OworICAgICAgICBpZiAod2F0ZXJNYXJrKCkgPiBoaWdoV2F0ZXJNYXJrKCkpCisgICAgICAgICAg
ICBjb2xsZWN0KERvTm90U3dlZXApOwogICAgIH0KIAogI2lmIEVOQUJMRShHR0MpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAxMTI1
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAgY2xhc3MgU3RydWN0dXJlOwogCiBNYXJrZWRTcGFj
ZTo6TWFya2VkU3BhY2UoSGVhcCogaGVhcCkKICAgICA6IG1fd2F0ZXJNYXJrKDApCi0gICAgLCBt
X251cnNlcnlXYXRlck1hcmsoMCkKICAgICAsIG1faGVhcChoZWFwKQogewogICAgIGZvciAoc2l6
ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNl
bGxTaXplICs9IHByZWNpc2VTdGVwKSB7CkBAIC00OSw3ICs0OCw2IEBAIE1hcmtlZFNwYWNlOjpN
YXJrZWRTcGFjZShIZWFwKiBoZWFwKQogdm9pZCBNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3Jz
KCkKIHsKICAgICBtX3dhdGVyTWFyayA9IDA7Ci0gICAgbV9udXJzZXJ5V2F0ZXJNYXJrID0gMDsK
IAogICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHBy
ZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7CiAgICAgICAgIGFsbG9jYXRv
ckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CiAKICAgICBzaXpl
X3Qgd2F0ZXJNYXJrKCk7Ci0gICAgc2l6ZV90IG51cnNlcnlXYXRlck1hcmsoKTsKKyAgICB2b2lk
IGFkZFRvV2F0ZXJNYXJrKHNpemVfdCk7CiAKICAgICB0eXBlZGVmIEhhc2hTZXQ8TWFya2VkQmxv
Y2sqPjo6aXRlcmF0b3IgQmxvY2tJdGVyYXRvcjsKICAgICAKQEAgLTc3LDYgKzc3LDcgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgc2hyaW5rKCk7CiAgICAgdm9pZCBmcmVlQmxvY2tzKE1hcmtl
ZEJsb2NrKiBoZWFkKTsKKwogICAgIHZvaWQgZGlkQWRkQmxvY2soTWFya2VkQmxvY2sqKTsKICAg
ICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdChNYXJrZWRCbG9jayopOwogCkBAIC0xMDIsNyArMTAz
LDYgQEAgcHJpdmF0ZToKICAgICBTdWJzcGFjZSBtX25vcm1hbFNwYWNlOwogCiAgICAgc2l6ZV90
IG1fd2F0ZXJNYXJrOwotICAgIHNpemVfdCBtX251cnNlcnlXYXRlck1hcms7CiAgICAgSGVhcCog
bV9oZWFwOwogICAgIE1hcmtlZEJsb2NrU2V0IG1fYmxvY2tzOwogfTsKQEAgLTExMiw5ICsxMTIs
OSBAQCBpbmxpbmUgc2l6ZV90IE1hcmtlZFNwYWNlOjp3YXRlck1hcmsoKQogICAgIHJldHVybiBt
X3dhdGVyTWFyazsKIH0KIAotaW5saW5lIHNpemVfdCBNYXJrZWRTcGFjZTo6bnVyc2VyeVdhdGVy
TWFyaygpCitpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6YWRkVG9XYXRlck1hcmsoc2l6ZV90IHNp
emUpCiB7Ci0gICAgcmV0dXJuIG1fbnVyc2VyeVdhdGVyTWFyazsKKyAgICBtX3dhdGVyTWFyayAr
PSBzaXplOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUg
RnVuY3Rvcjo6UmV0dXJuVHlwZSBNYXJrZWRTcGFjZTo6Zm9yRWFjaENlbGwoRnVuY3RvciYgZnVu
Y3RvcikKQEAgLTE5OSw3ICsxOTksNiBAQCBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6ZGlkQWRk
QmxvY2soTWFyCiAKIGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpkaWRDb25zdW1lRnJlZUxpc3Qo
TWFya2VkQmxvY2sqIGJsb2NrKQogewotICAgIG1fbnVyc2VyeVdhdGVyTWFyayArPSBibG9jay0+
Y2FwYWNpdHkoKSAtIGJsb2NrLT5zaXplKCk7CiAgICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNh
cGFjaXR5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NXZWFr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFzc1dlYWsuaAko
cmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFzc1dlYWsu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBQYXNzV2Vha19oCiAj
ZGVmaW5lIFBhc3NXZWFrX2gKIAorI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW5jbHVkZSAiSGFuZGxlLmgiCiAjaW5jbHVkZSA8d3RmL051bGxQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgogCkBAIC0zNSw2MSArMzUsMTY0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1dlYWs7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNz
V2VhazxUPiBhZG9wdFdlYWsoSGFuZGxlU2xvdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNz
V2VhazxUPiBhZG9wdFdlYWsoV2Vha0ltcGwqKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgUGFzc1dlYWsgOiBwdWJsaWMgSGFuZGxlPFQ+IHsKLSAgICB1c2luZyBIYW5kbGU8VD46OnNs
b3Q7Ci0gICAgdXNpbmcgSGFuZGxlPFQ+OjpzZXRTbG90OwordGVtcGxhdGU8dHlwZW5hbWUgQmFz
ZSwgdHlwZW5hbWUgVD4gY2xhc3MgV2Vha0ltcGxBY2Nlc3NvciB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBUKiBHZXRUeXBlOworCisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0OworICAgIFQmIG9w
ZXJhdG9yKigpIGNvbnN0OworICAgIEdldFR5cGUgZ2V0KCkgY29uc3Q7CisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgYm9vbCB3YXMoR2V0VHlwZSkgY29uc3Q7CisjZW5kaWYKK307CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEJhc2U+IGNsYXNzIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93
bj4gewogcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5
cGUgRXh0ZXJuYWxUeXBlOworICAgIHR5cGVkZWYgSlNWYWx1ZSBHZXRUeXBlOwogCi0gICAgUGFz
c1dlYWsoKSA6IEhhbmRsZTxUPigpIHsgfQotICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KSA6
IEhhbmRsZTxUPigpIHsgfQorICAgIGNvbnN0IEpTVmFsdWUqIG9wZXJhdG9yLT4oKSBjb25zdDsK
KyAgICBjb25zdCBKU1ZhbHVlJiBvcGVyYXRvciooKSBjb25zdDsKKyAgICBHZXRUeXBlIGdldCgp
IGNvbnN0OworfTsKIAotICAgIFBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0
ZXJuYWxUeXBlIGV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpLCBXZWFrSGFuZGxlT3duZXIq
IHdlYWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQotICAgICAgICA6IEhhbmRsZTxUPihn
bG9iYWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpKQotICAgIHsKLSAgICAgICAg
SGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5tYWtlV2VhayhzbG90KCksIHdlYWtPd25lciwg
Y29udGV4dCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBIYW5kbGVUeXBlczxUPjo6dG9KU1Zh
bHVlKGV4dGVybmFsVHlwZSk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+
d3JpdGVCYXJyaWVyKHNsb3QoKSwgdmFsdWUpOwotICAgICAgICAqc2xvdCgpID0gdmFsdWU7Ci0g
ICAgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1dlYWsgOiBwdWJsaWMgV2Vha0lt
cGxBY2Nlc3NvcjxQYXNzV2VhazxUPiwgVD4geworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBX
ZWFrSW1wbEFjY2Vzc29yPFBhc3NXZWFrPFQ+LCBUPjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFdl
YWtJbXBsQWNjZXNzb3I8UGFzc1dlYWs8VD4sIFQ+OjpHZXRUeXBlIEdldFR5cGU7CisKKyAgICBQ
YXNzV2VhaygpOworICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBQYXNzV2VhayhK
U0dsb2JhbERhdGEmLCBHZXRUeXBlID0gR2V0VHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqID0gMCwg
dm9pZCogY29udGV4dCA9IDApOwogCiAgICAgLy8gSXQgc29tZXdoYXQgYnJlYWtzIHRoZSB0eXBl
IHN5c3RlbSB0byBhbGxvdyB0cmFuc2ZlciBvZiBvd25lcnNoaXAgb3V0IG9mCiAgICAgLy8gYSBj
b25zdCBQYXNzV2Vhay4gSG93ZXZlciwgaXQgbWFrZXMgaXQgbXVjaCBlYXNpZXIgdG8gd29yayB3
aXRoIFBhc3NXZWFrCiAgICAgLy8gdGVtcG9yYXJpZXMsIGFuZCB3ZSBkb24ndCBoYXZlIGEgbmVl
ZCB0byB1c2UgcmVhbCBjb25zdCBQYXNzV2Vha3MgYW55d2F5LgotICAgIFBhc3NXZWFrKGNvbnN0
IFBhc3NXZWFrJiBvKSA6IEhhbmRsZTxUPihvLmxlYWtIYW5kbGUoKSkgeyB9Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gUGFzc1dlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG8pIDogSGFuZGxlPFQ+
KG8ubGVha0hhbmRsZSgpKSB7IH0KKyAgICBQYXNzV2Vhayhjb25zdCBQYXNzV2VhayYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+Jik7CisKKyAg
ICB+UGFzc1dlYWsoKTsKIAotICAgIH5QYXNzV2VhaygpCi0gICAgewotICAgICAgICBpZiAoIXNs
b3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihz
bG90KCkpLT5kZWFsbG9jYXRlKHNsb3QoKSk7Ci0gICAgICAgIHNldFNsb3QoMCk7Ci0gICAgfQor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CiAKLSAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29u
c3QgeyByZXR1cm4gIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdChzbG90KCkpOyB9CisgICAg
Ly8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRv
IGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgSlNWYWx1
ZSAoUGFzc1dlYWs6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNp
ZmllZEJvb2xUeXBlKigpIGNvbnN0OwogCi0gICAgSGFuZGxlU2xvdCBsZWFrSGFuZGxlKCkgY29u
c3QgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdlYWtJbXBsKiBsZWFrSW1wbCgpIGNvbnN0IFdB
Uk5fVU5VU0VEX1JFVFVSTjsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgUGFzc1dlYWsgYWRvcHRX
ZWFrPFQ+KEhhbmRsZVNsb3QpOworICAgIGZyaWVuZCBQYXNzV2VhayBhZG9wdFdlYWs8VD4oV2Vh
a0ltcGwqKTsKKyAgICBleHBsaWNpdCBQYXNzV2VhayhXZWFrSW1wbCopOwogCi0gICAgZXhwbGlj
aXQgUGFzc1dlYWsoSGFuZGxlU2xvdCBzbG90KSA6IEhhbmRsZTxUPihzbG90KSB7IH0KKyAgICBX
ZWFrSW1wbCogbV9pbXBsOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEhhbmRs
ZVNsb3QgUGFzc1dlYWs8VD46OmxlYWtIYW5kbGUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
QmFzZSwgdHlwZW5hbWUgVD4gaW5saW5lIFQqIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVD46Om9w
ZXJhdG9yLT4oKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4o
dGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGlubGluZSBUJiBXZWFrSW1w
bEFjY2Vzc29yPEJhc2UsIFQ+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBC
YXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0
dXJuICpqc0Nhc3Q8VCo+KHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5q
c1ZhbHVlKCkuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBX
ZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+OjpnZXQoKSBjb25zdAoreworICAgIGlmICghc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwgfHwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
ZSo+KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgIHJl
dHVybiBHZXRUeXBlKCk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9CisKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBUPiBpbmxpbmUg
Ym9vbCBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+Ojp3YXModHlwZW5hbWUgV2Vha0ltcGxBY2Nl
c3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4ganNDYXN0
PFQqPihzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+anNWYWx1ZSgpLmFz
Q2VsbCgpKSA9PSBvdGhlcjsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBp
bmxpbmUgY29uc3QgSlNWYWx1ZSogV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBVbmtub3duPjo6b3Bl
cmF0b3ItPigpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0
aGlzKS0+bV9pbXBsICYmIHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5z
dGF0ZSgpID09IFdlYWtJbXBsOjpMaXZlKTsKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PGNvbnN0
IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhc2U+IGlubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25v
d24+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBC
YXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1f
aW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2U+IGlubGluZSB0eXBlbmFtZSBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25v
d24+OjpHZXRUeXBlIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93bj46OmdldCgpIGNvbnN0
Cit7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCB8fCBz
dGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1w
bDo6TGl2ZSkKKyAgICAgICAgcmV0dXJuIEdldFR5cGUoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2VhaygpCisgICAgOiBtX2ltcGwo
MCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNz
V2VhayhzdGQ6Om51bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdHlwZW5hbWUgUGFzc1dlYWs8VD46OkdldFR5cGUgZ2V0VHlwZSwgV2Vha0hhbmRs
ZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgOiBtX2ltcGwoZ2xvYmFsRGF0
YS5oZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKGdldFR5cGUsIHdlYWtPd25lciwgY29udGV4dCkp
Cit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxUPjo6UGFzc1dl
YWsoY29uc3QgUGFzc1dlYWsmIG8pCisgICAgOiBtX2ltcGwoby5sZWFrSW1wbCgpKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc1dl
YWs8VD46OlBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvKQorICAgIDogbV9pbXBsKG8ubGVh
a0ltcGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+
Ojp+UGFzc1dlYWsoKQoreworICAgIGlmICghbV9pbXBsKQorICAgICAgICByZXR1cm47CisgICAg
V2Vha0hlYXA6OmRlYWxsb2NhdGUobV9pbXBsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIGJvb2wgUGFzc1dlYWs8VD46Om9wZXJhdG9yISgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFtX2ltcGwgfHwgbV9pbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlIHx8ICFtX2ltcGwt
PmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+
OjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KCEhKnRoaXMpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKFdlYWtJbXBsKiBp
bXBsKQorOiBtX2ltcGwoaW1wbCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IFdlYWtJbXBsKiBQYXNzV2VhazxUPjo6bGVha0ltcGwoKSBjb25zdAogewotICAgIEhhbmRsZVNs
b3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICBjb25zdF9jYXN0PFBhc3NXZWFrPFQ+Kj4odGhp
cyktPnNldFNsb3QoMCk7Ci0gICAgcmV0dXJuIHNsb3Q7CisgICAgV2Vha0ltcGwqIHRtcCA9IDA7
CisgICAgc3RkOjpzd2FwKHRtcCwgY29uc3RfY2FzdDxXZWFrSW1wbComPihtX2ltcGwpKTsKKyAg
ICByZXR1cm4gdG1wOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNzV2VhazxUPiBhZG9w
dFdlYWsoSGFuZGxlU2xvdCBzbG90KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1dlYWs8VD4g
aW5saW5lIGFkb3B0V2VhayhXZWFrSW1wbCogaW1wbCkKIHsKLSAgICByZXR1cm4gUGFzc1dlYWs8
VD4oc2xvdCk7CisgICAgcmV0dXJuIFBhc3NXZWFrPFQ+KGltcGwpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NX
ZWFrPFQ+JiBhLCBjb25zdCBQYXNzV2VhazxVPiYgYikgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdHJvbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdHJvbmcuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Ryb25nLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDExICs4MSwxOSBAQCBwdWJsaWM6
CiAgICAgICAgIGNsZWFyKCk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhc2xvdCgpIHx8ICEqc2xvdCgpOyB9CisKKyAgICAvLyBUaGlzIGNvbnZlcnNpb24g
b3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90
aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNlOjoqVW5z
cGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBj
b25zdCB7IHJldHVybiAhISp0aGlzID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xU
eXBlKj4oMSkgOiAwOyB9CisKICAgICB2b2lkIHN3YXAoU3Ryb25nJiBvdGhlcikKICAgICB7CiAg
ICAgICAgIEhhbmRsZTxUPjo6c3dhcChvdGhlcik7CiAgICAgfQogCisgICAgRXh0ZXJuYWxUeXBl
IGdldCgpIGNvbnN0IHsgcmV0dXJuIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdCh0aGlzLT5z
bG90KCkpOyB9CisKICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBFeHRlcm5hbFR5cGUpOwog
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IFN0cm9uZyYgb3BlcmF0b3I9KGNvbnN0IFN0cm9u
ZzxVPiYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCShyZXZpc2lvbiAx
MTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDEwOSArMjcsMTI5IEBACiAjZGVmaW5lIFdlYWtfaAogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlICJIYW5kbGUuaCIKLSNpbmNsdWRlICJIYW5kbGVIZWFw
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiUGFzc1dlYWsuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLS8vIEEgd2Vha2x5IHJlZmVyZW5jZWQgaGFuZGxlIHRoYXQgYmVj
b21lcyAwIHdoZW4gdGhlIHZhbHVlIGl0IHBvaW50cyB0byBpcyBnYXJiYWdlIGNvbGxlY3RlZC4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIEhhbmRsZTxUPiB7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIFdlYWtJbXBsQWNjZXNzb3I8
V2VhazxUPiwgVD4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWspOwotCi0gICAgdXNp
bmcgSGFuZGxlPFQ+OjpzbG90OwotICAgIHVzaW5nIEhhbmRsZTxUPjo6c2V0U2xvdDsKLQogcHVi
bGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5cGUgRXh0ZXJu
YWxUeXBlOworICAgIGZyaWVuZCBjbGFzcyBXZWFrSW1wbEFjY2Vzc29yPFdlYWs8VD4sIFQ+Owor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxXZWFrPFQ+LCBUPjo6R2V0VHlw
ZSBHZXRUeXBlOwogCi0gICAgV2VhaygpCi0gICAgICAgIDogSGFuZGxlPFQ+KCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgV2VhayhzdGQ6Om51bGxwdHJfdCkKLSAgICAgICAgOiBIYW5kbGU8VD4oKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0ZXJu
YWxUeXBlIGV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqIHdl
YWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQotICAgICAgICA6IEhhbmRsZTxUPihnbG9i
YWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpKQotICAgIHsKLSAgICAgICAgSGFu
ZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5tYWtlV2VhayhzbG90KCksIHdlYWtPd25lciwgY29u
dGV4dCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBIYW5kbGVUeXBlczxUPjo6dG9KU1ZhbHVl
KGV4dGVybmFsVHlwZSk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+d3Jp
dGVCYXJyaWVyKHNsb3QoKSwgdmFsdWUpOwotICAgICAgICAqc2xvdCgpID0gdmFsdWU7Ci0gICAg
fQotCi0gICAgZW51bSBBZG9wdFRhZyB7IEFkb3B0IH07Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gV2VhayhBZG9wdFRhZywgSGFuZGxlPFU+IGhhbmRsZSkKLSAgICAgICAgOiBIYW5kbGU8VD4o
aGFuZGxlLnNsb3QoKSkKLSAgICB7Ci0gICAgICAgIHZhbGlkYXRlQ2VsbChnZXQoKSk7Ci0gICAg
fQorICAgIFdlYWsoKTsKKyAgICBXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBXZWFrKEpTR2xv
YmFsRGF0YSYsIEdldFR5cGUgPSBHZXRUeXBlKCksIFdlYWtIYW5kbGVPd25lciogPSAwLCB2b2lk
KiBjb250ZXh0ID0gMCk7CiAKICAgICBlbnVtIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZyB7IEhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSB9OwotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBzbG90KCkgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KLSAg
ICBXZWFrKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZykKLSAgICAgICAgOiBIYW5kbGU8VD4oaGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkpCi0gICAgewotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IFdlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG90aGVyKQotICAgICAgICA6IEhhbmRsZTxU
PihvdGhlci5sZWFrSGFuZGxlKCkpCi0gICAgewotICAgIH0KLQotICAgIH5XZWFrKCkKLSAgICB7
Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwKFdlYWsmIG90aGVyKQot
ICAgIHsKLSAgICAgICAgSGFuZGxlPFQ+Ojpzd2FwKG90aGVyKTsKLSAgICB9CisgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0OworICAgIFdlYWsoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVGFnKTsKIAotICAgIFdlYWsmIG9wZXJhdG9yPShjb25zdCBQYXNzV2VhazxUPiYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFdlYWsoY29uc3QgUGFzc1dlYWs8VT4mKTsKIAotICAg
IEV4dGVybmFsVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiAgSGFuZGxlVHlwZXM8VD46OmdldEZy
b21TbG90KHNsb3QoKSk7IH0KLSAgICAKLSAgICBQYXNzV2VhazxUPiByZWxlYXNlKCkgeyBQYXNz
V2VhazxUPiB0bXAgPSBhZG9wdFdlYWs8VD4oc2xvdCgpKTsgc2V0U2xvdCgwKTsgcmV0dXJuIHRt
cDsgfQorICAgIH5XZWFrKCk7CiAKLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIGlm
ICghc2xvdCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFw
Rm9yKHNsb3QoKSktPmRlYWxsb2NhdGUoc2xvdCgpKTsKLSAgICAgICAgc2V0U2xvdCgwKTsKLSAg
ICB9CisgICAgdm9pZCBzd2FwKFdlYWsmKTsKKyAgICBXZWFrJiBvcGVyYXRvcj0oY29uc3QgUGFz
c1dlYWs8VD4mKTsKICAgICAKLSAgICBIYW5kbGVTbG90IGxlYWtIYW5kbGUoKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+aGFzRmluYWxpemVyKHNs
b3QoKSkpOwotICAgICAgICBIYW5kbGVTbG90IHJlc3VsdCA9IHNsb3QoKTsKLSAgICAgICAgc2V0
U2xvdCgwKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdDsKKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1w
bGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4K
KyAgICB0eXBlZGVmIEpTVmFsdWUgKEhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsK
KyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0OwogCisgICAgUGFzc1dl
YWs8VD4gcmVsZWFzZSgpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKIHByaXZhdGU6Ci0gICAg
c3RhdGljIEhhbmRsZVNsb3QgaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxIYW5kbGVTbG90PigtMSk7IH0KKyAgICBzdGF0aWMgV2Vha0ltcGwqIGhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOworCisgICAgV2Vha0ltcGwqIG1faW1wbDsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpXZWFrKCkKKyAgICA6IG1faW1wbCgwKQor
eworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2VhayhzdGQ6Om51
bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgV2VhazxUPjo6V2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHR5cGVuYW1lIFdl
YWs8VD46OkdldFR5cGUgZ2V0VHlwZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQq
IGNvbnRleHQpCisgICAgOiBtX2ltcGwoZ2xvYmFsRGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9j
YXRlKGdldFR5cGUsIHdlYWtPd25lciwgY29udGV4dCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBib29sIFdlYWs8VD46OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9pbXBsID09IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2Vhayh0eXBlbmFtZSBXZWFr
PFQ+OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCisgICAgOiBtX2ltcGwoaGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVu
YW1lIFU+ICBpbmxpbmUgV2VhazxUPjo6V2Vhayhjb25zdCBQYXNzV2VhazxVPiYgb3RoZXIpCisg
ICAgOiBtX2ltcGwob3RoZXIubGVha0ltcGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIFdlYWs8VD46On5XZWFrKCkKK3sKKyAgICBjbGVhcigpOworfQorCiB0ZW1wbGF0
ZTxjbGFzcyBUPiBpbmxpbmUgdm9pZCBzd2FwKFdlYWs8VD4mIGEsIFdlYWs8VD4mIGIpCiB7CiAg
ICAgYS5zd2FwKGIpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBXZWFr
PFQ+Ojpzd2FwKFdlYWsmIG90aGVyKQoreworICAgIHN0ZDo6c3dhcChtX2ltcGwsIG90aGVyLm1f
aW1wbCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+JiBXZWFrPFQ+
OjpvcGVyYXRvcj0oY29uc3QgUGFzc1dlYWs8VD4mIG8pCiB7CiAgICAgY2xlYXIoKTsKLSAgICBz
ZXRTbG90KG8ubGVha0hhbmRsZSgpKTsKKyAgICBtX2ltcGwgPSBvLmxlYWtJbXBsKCk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFr
PFQ+OjpvcGVyYXRvciEoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pbXBsIHx8ICFtX2ltcGwt
PmpzVmFsdWUoKSB8fCBtX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmU7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZp
ZWRCb29sVHlwZSo+KCEhKnRoaXMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
UGFzc1dlYWs8VD4gV2VhazxUPjo6cmVsZWFzZSgpCit7CisgICAgUGFzc1dlYWs8VD4gdG1wID0g
YWRvcHRXZWFrPFQ+KG1faW1wbCk7CisgICAgbV9pbXBsID0gMDsKKyAgICByZXR1cm4gdG1wOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBXZWFrPFQ+OjpjbGVhcigpCit7
CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybjsKKyAgICBXZWFrSGVhcDo6ZGVhbGxv
Y2F0ZShtX2ltcGwpOworICAgIG1faW1wbCA9IDA7Cit9CisgICAgCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgV2Vha0ltcGwqIFdlYWs8VD46Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpCit7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0ltcGwqPigtMSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTE1MSw3ICsxNzEsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czxKCiAgICAgc3RhdGljIFBhc3NPdXRU
eXBlIHBhc3NPdXQoU3RvcmFnZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7
IH0KICAgICBzdGF0aWMgUGFzc091dFR5cGUgcGFzc091dChFbXB0eVZhbHVlVHlwZSkgeyByZXR1
cm4gUGFzc091dFR5cGUoKTsgfQogCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBTdG9yYWdlVHlwZTo6
RXh0ZXJuYWxUeXBlIFBlZWtUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgU3RvcmFnZVR5cGU6
OkdldFR5cGUgUGVla1R5cGU7CiAgICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoY29uc3QgU3RvcmFn
ZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5nZXQoKTsgfQogICAgIHN0YXRpYyBQZWVrVHlw
ZSBwZWVrKEVtcHR5VmFsdWVUeXBlKSB7IHJldHVybiBQZWVrVHlwZSgpOyB9CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2Vha0Jsb2NrLmgiCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSGVhcFJvb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJTY29wZUNoYWluLmgi
CisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitXZWFrQmxvY2sq
IFdlYWtCbG9jazo6Y3JlYXRlKCkKK3sKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2Nh
dGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoYmxvY2tTaXplLCBibG9ja1Np
emUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKKyAgICBpZiAoIXN0YXRpY19jYXN0PGJv
b2w+KGFsbG9jYXRpb24pKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBuZXcgKE5vdE51
bGwsIGFsbG9jYXRpb24uYmFzZSgpKSBXZWFrQmxvY2soYWxsb2NhdGlvbik7Cit9CisKK3ZvaWQg
V2Vha0Jsb2NrOjpkZXN0cm95KFdlYWtCbG9jayogYmxvY2spCit7CisgICAgYmxvY2stPm1fYWxs
b2NhdGlvbi5kZWFsbG9jYXRlKCk7Cit9CisKK1dlYWtCbG9jazo6V2Vha0Jsb2NrKFBhZ2VBbGxv
Y2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbikKKyAgICA6IEhlYXBCbG9jayhhbGxvY2F0aW9uKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAgICBuZXcg
KE5vdE51bGwsIHdlYWtJbXBsKSBXZWFrSW1wbDsKKyAgICAgICAgYWRkVG9GcmVlTGlzdCgmbV9z
d2VlcFJlc3VsdC5mcmVlTGlzdCwgd2Vha0ltcGwpOworICAgIH0KKworICAgIEFTU0VSVCghbV9z
d2VlcFJlc3VsdC5pc051bGwoKSAmJiBtX3N3ZWVwUmVzdWx0LmJsb2NrSXNGcmVlKTsKK30KKwor
dm9pZCBXZWFrQmxvY2s6OmZpbmFsaXplQWxsKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHdlYWtJbXBsQ291bnQoKTsgKytpKSB7CisgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9
ICZ3ZWFrSW1wbHMoKVtpXTsKKyAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID49IFdlYWtJ
bXBsOjpGaW5hbGl6ZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgd2Vha0ltcGwt
PnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKKyAgICAgICAgZmluYWxpemUod2Vha0ltcGwpOwor
ICAgIH0KK30KKwordm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKK3sKKyAgICBpZiAoIW1fc3dlZXBS
ZXN1bHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN3ZWVwUmVzdWx0IHN3ZWVw
UmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kp
IHsKKyAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAg
ICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkRlYWQpCisgICAgICAgICAgICBm
aW5hbGl6ZSh3ZWFrSW1wbCk7CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA9PSBXZWFr
SW1wbDo6RGVhbGxvY2F0ZWQpCisgICAgICAgICAgICBhZGRUb0ZyZWVMaXN0KCZzd2VlcFJlc3Vs
dC5mcmVlTGlzdCwgd2Vha0ltcGwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzd2VlcFJl
c3VsdC5ibG9ja0lzRnJlZSA9IGZhbHNlOworICAgIH0KKworICAgIG1fc3dlZXBSZXN1bHQgPSBz
d2VlcFJlc3VsdDsKKyAgICBBU1NFUlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOworfQorCit2
b2lkIFdlYWtCbG9jazo6dmlzaXRMaXZlV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYgaGVhcFJv
b3RWaXNpdG9yKQoreworICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSB2
aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCisgICAgaWYgKCFtX3N3ZWVwUmVzdWx0LmlzTnVs
bCgpICYmIG1fc3dlZXBSZXN1bHQuYmxvY2tJc0ZyZWUpCisgICAgICAgIHJldHVybjsKKworICAg
IFNsb3RWaXNpdG9yJiB2aXNpdG9yID0gaGVhcFJvb3RWaXNpdG9yLnZpc2l0b3IoKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
V2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAgICBpZiAod2Vha0lt
cGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBKU1ZhbHVlJiBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKKyAg
ICAgICAgaWYgKCFqc1ZhbHVlIHx8ICFqc1ZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgSlNDZWxsKiBqc0NlbGwgPSBqc1ZhbHVlLmFzQ2VsbCgpOworICAg
ICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoanNDZWxsKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyID0gd2Vha0ltcGwtPndl
YWtIYW5kbGVPd25lcigpOworICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lcikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpT
VmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZjb25zdF9j
YXN0PEpTVmFsdWUmPihqc1ZhbHVlKSk7CisgICAgfQorfQorCit2b2lkIFdlYWtCbG9jazo6dmlz
aXREZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpCit7CisgICAgLy8gSWYgYSBibG9jayBp
cyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUgYW55IGVmZmVjdC4KKyAgICBp
ZiAoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkgJiYgbV9zd2VlcFJlc3VsdC5ibG9ja0lzRnJlZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWFrSW1wbENv
dW50KCk7ICsraSkgeworICAgICAgICBXZWFrSW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxzKClb
aV07CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA+IFdlYWtJbXBsOjpEZWFkKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgSlNWYWx1ZSYganNWYWx1ZSA9IHdl
YWtJbXBsLT5qc1ZhbHVlKCk7CisgICAgICAgIGlmICghanNWYWx1ZSB8fCAhanNWYWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTQ2VsbCoganNDZWxsID0g
anNWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGpzQ2VsbCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkRlYWQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vha0Jsb2NrX2gKKyNkZWZpbmUgV2Vha0Jsb2NrX2gK
KworI2luY2x1ZGUgIkhlYXBCbG9jay5oIgorI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgor
I2luY2x1ZGUgIldlYWtJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4K
KyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcFJvb3RWaXNpdG9y
OworY2xhc3MgSlNWYWx1ZTsKK2NsYXNzIFdlYWtIYW5kbGVPd25lcjsKKworY2xhc3MgV2Vha0Js
b2NrIDogcHVibGljIEhlYXBCbG9jayB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBibG9ja1NpemUgPSA0ICogS0I7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja01hc2sg
PSB+KGJsb2NrU2l6ZSAtIDEpOworCisgICAgc3RydWN0IEZyZWVDZWxsIHsKKyAgICAgICAgRnJl
ZUNlbGwqIG5leHQ7CisgICAgfTsKKworICAgIHN0cnVjdCBTd2VlcFJlc3VsdCB7CisgICAgICAg
IFN3ZWVwUmVzdWx0KCk7CisgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBibG9ja0lzRnJlZTsKKyAgICAgICAgRnJlZUNlbGwqIGZyZWVMaXN0OworICAgIH07CisK
KyAgICBzdGF0aWMgV2Vha0Jsb2NrKiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KFdlYWtCbG9jayopOworCisgICAgc3RhdGljIFdlYWtCbG9jayogYmxvY2tGb3IoV2Vha0ltcGwq
KTsKKyAgICBzdGF0aWMgV2Vha0ltcGwqIGFzV2Vha0ltcGwoRnJlZUNlbGwqKTsKKworICAgIHZv
aWQgc3dlZXAoKTsKKyAgICBjb25zdCBTd2VlcFJlc3VsdCYgc3dlZXBSZXN1bHQoKTsKKyAgICBT
d2VlcFJlc3VsdCB0YWtlU3dlZXBSZXN1bHQoKTsKKworICAgIHZvaWQgZGVhbGxvY2F0ZShXZWFr
SW1wbCopOworCisgICAgdm9pZCB2aXNpdExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdERlYWRXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisKKyAgICB2
b2lkIGZpbmFsaXplQWxsKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEZyZWVDZWxsKiBhc0Zy
ZWVDZWxsKFdlYWtJbXBsKik7CisKKyAgICBXZWFrQmxvY2soUGFnZUFsbG9jYXRpb25BbGlnbmVk
Jik7CisgICAgV2Vha0ltcGwqIGZpcnN0V2Vha0ltcGwoKTsKKyAgICB2b2lkIGZpbmFsaXplKFdl
YWtJbXBsKik7CisgICAgV2Vha0ltcGwqIHdlYWtJbXBscygpOworICAgIHNpemVfdCB3ZWFrSW1w
bENvdW50KCk7CisgICAgdm9pZCBhZGRUb0ZyZWVMaXN0KEZyZWVDZWxsKiosIFdlYWtJbXBsKik7
CisKKyAgICBTd2VlcFJlc3VsdCBtX3N3ZWVwUmVzdWx0OworfTsKKworaW5saW5lIFdlYWtCbG9j
azo6U3dlZXBSZXN1bHQ6OlN3ZWVwUmVzdWx0KCkKKyAgICA6IGJsb2NrSXNGcmVlKHRydWUpCisg
ICAgLCBmcmVlTGlzdCgwKQoreworICAgIEFTU0VSVChpc051bGwoKSk7Cit9CisKK2lubGluZSBi
b29sIFdlYWtCbG9jazo6U3dlZXBSZXN1bHQ6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGJsb2NrSXNGcmVlICYmICFmcmVlTGlzdDsgLy8gVGhpcyBzdGF0ZSBpcyBpbXBvc3NpYmxlLCBz
byB3ZSBjYW4gdXNlIGl0IHRvIG1lYW4gbnVsbC4KK30KKworaW5saW5lIFdlYWtCbG9jayogV2Vh
a0Jsb2NrOjpibG9ja0ZvcihXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8V2Vha0Jsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHdlYWtJ
bXBsKSAmIGJsb2NrTWFzayk7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0Jsb2NrOjphc1dl
YWtJbXBsKEZyZWVDZWxsKiBmcmVlQ2VsbCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxXZWFrSW1wbCo+KGZyZWVDZWxsKTsKK30KKworaW5saW5lIFdlYWtCbG9jazo6U3dlZXBSZXN1
bHQgV2Vha0Jsb2NrOjp0YWtlU3dlZXBSZXN1bHQoKQoreworICAgIFN3ZWVwUmVzdWx0IHRtcDsK
KyAgICBzdGQ6OnN3YXAodG1wLCBtX3N3ZWVwUmVzdWx0KTsKKyAgICBBU1NFUlQobV9zd2VlcFJl
c3VsdC5pc051bGwoKSk7CisgICAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIGNvbnN0IFdlYWtC
bG9jazo6U3dlZXBSZXN1bHQmIFdlYWtCbG9jazo6c3dlZXBSZXN1bHQoKQoreworICAgIHJldHVy
biBtX3N3ZWVwUmVzdWx0OworfQorCitpbmxpbmUgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0Js
b2NrOjphc0ZyZWVDZWxsKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxGcmVlQ2VsbCo+KHdlYWtJbXBsKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Js
b2NrOjpkZWFsbG9jYXRlKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICB3ZWFrSW1wbC0+c2V0
U3RhdGUoV2Vha0ltcGw6OkRlYWxsb2NhdGVkKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Jsb2Nr
OjpmaW5hbGl6ZShXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgQVNTRVJUKHdlYWtJbXBsLT5z
dGF0ZSgpID09IFdlYWtJbXBsOjpEZWFkKTsKKyAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkZpbmFsaXplZCk7CisgICAgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIgPSB3
ZWFrSW1wbC0+d2Vha0hhbmRsZU93bmVyKCk7CisgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICB3ZWFrSGFuZGxlT3duZXItPmZpbmFsaXplKEhhbmRsZTxVbmtu
b3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KHdlYWtJbXBsLT5qc1ZhbHVlKCkp
KSwgd2Vha0ltcGwtPmNvbnRleHQoKSk7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0Jsb2Nr
Ojp3ZWFrSW1wbHMoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4o
dGhpcykgKyAoKHNpemVvZihXZWFrQmxvY2spICsgc2l6ZW9mKFdlYWtJbXBsKSAtIDEpIC8gc2l6
ZW9mKFdlYWtJbXBsKSk7Cit9CisKK2lubGluZSBzaXplX3QgV2Vha0Jsb2NrOjp3ZWFrSW1wbENv
dW50KCkKK3sKKyAgICByZXR1cm4gKGJsb2NrU2l6ZSAvIHNpemVvZihXZWFrSW1wbCkpIC0gKChz
aXplb2YoV2Vha0Jsb2NrKSArIHNpemVvZihXZWFrSW1wbCkgLSAxKSAvIHNpemVvZihXZWFrSW1w
bCkpOworfQorCitpbmxpbmUgdm9pZCBXZWFrQmxvY2s6OmFkZFRvRnJlZUxpc3QoRnJlZUNlbGwq
KiBmcmVlTGlzdCwgV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIEFTU0VSVCh3ZWFrSW1wbC0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6RGVhbGxvY2F0ZWQpOworICAgIEZyZWVDZWxsKiBmcmVlQ2Vs
bCA9IGFzRnJlZUNlbGwod2Vha0ltcGwpOworICAgIEFTU0VSVCghKmZyZWVMaXN0IHx8ICgoY2hh
ciopKmZyZWVMaXN0ID4gKGNoYXIqKXRoaXMgJiYgKGNoYXIqKSpmcmVlTGlzdCA8IChjaGFyKil0
aGlzICsgYmxvY2tTaXplKSk7CisgICAgQVNTRVJUKChjaGFyKilmcmVlQ2VsbCA+IChjaGFyKil0
aGlzICYmIChjaGFyKilmcmVlQ2VsbCA8IChjaGFyKil0aGlzICsgYmxvY2tTaXplKTsKKyAgICBm
cmVlQ2VsbC0+bmV4dCA9ICpmcmVlTGlzdDsKKyAgICAqZnJlZUxpc3QgPSBmcmVlQ2VsbDsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBXZWFrQmxvY2tfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIFNsb3RWaXNpdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgSGFuZGxlOwor
CitXZWFrSGFuZGxlT3duZXI6On5XZWFrSGFuZGxlT3duZXIoKQoreworfQorCitib29sIFdlYWtI
YW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2
b2lkKiwgU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWFr
SGFuZGxlT3duZXI6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCopCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hh
bmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrSGFuZGxlT3duZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2Vha0hhbmRsZU93bmVyX2gKKyNkZWZpbmUgV2Vha0hhbmRsZU93bmVy
X2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU2xv
dFZpc2l0b3I7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CisgICAgdmlydHVhbCBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4
dCwgU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gV2Vha0hhbmRsZU93bmVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtIZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGVhcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGVhcC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYWtIZWFwLmgiCisKKyNpbmNsdWRlICJIZWFw
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitXZWFrSGVhcDo6fldlYWtIZWFwKCkKK3sKKyAgICBX
ZWFrQmxvY2sqIG5leHQgPSAwOworICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19j
YXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsK
KyAgICAgICAgbmV4dCA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpOwor
ICAgICAgICBXZWFrQmxvY2s6OmRlc3Ryb3koYmxvY2spOworICAgIH0KKyAgICBtX2Jsb2Nrcy5j
bGVhcigpOworfQorCit2b2lkIFdlYWtIZWFwOjpmaW5hbGl6ZUFsbCgpCit7CisgICAgZm9yIChX
ZWFrQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3MuaGVhZCgp
KTsgYmxvY2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4oYmxvY2stPm5leHQoKSkp
CisgICAgICAgIGJsb2NrLT5maW5hbGl6ZUFsbCgpOworfQorCit2b2lkIFdlYWtIZWFwOjp2aXNp
dExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoV2Vh
a0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7
IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpKQor
ICAgICAgICBibG9jay0+dmlzaXRMaXZlV2Vha0ltcGxzKHZpc2l0b3IpOworfQorCit2b2lkIFdl
YWtIZWFwOjp2aXNpdERlYWRXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxv
Y2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2Nr
LT5uZXh0KCkpKQorICAgICAgICBibG9jay0+dmlzaXREZWFkV2Vha0ltcGxzKHZpc2l0b3IpOwor
fQorCit2b2lkIFdlYWtIZWFwOjpzd2VlcCgpCit7CisgICAgV2Vha0Jsb2NrKiBuZXh0OworICAg
IGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tz
LmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHN0YXRpY19j
YXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpOworCisgICAgICAgIC8vIElmIGEgYmxvY2sg
aXMgY29tcGxldGVseSBlbXB0eSwgYSBuZXcgc3dlZXAgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0Lgor
ICAgICAgICBpZiAoIWJsb2NrLT5zd2VlcFJlc3VsdCgpLmlzTnVsbCgpICYmIGJsb2NrLT5zd2Vl
cFJlc3VsdCgpLmJsb2NrSXNGcmVlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
YmxvY2stPnRha2VTd2VlcFJlc3VsdCgpOyAvLyBGb3JjZSBhIG5ldyBzd2VlcCBieSBkaXNjYXJk
aW5nIHRoZSBsYXN0IHN3ZWVwLgorICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICB9Cit9CisK
K3ZvaWQgV2Vha0hlYXA6OnJlc2V0QWxsb2NhdG9yKCkKK3sKKyAgICBtX2FsbG9jYXRvciA9IDA7
CisgICAgbV9uZXh0QWxsb2NhdG9yID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3Mu
aGVhZCgpKTsKK30KKworV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OmZpbmRBbGxvY2F0
b3IoKQoreworICAgIGlmIChXZWFrQmxvY2s6OkZyZWVDZWxsKiBhbGxvY2F0b3IgPSB0cnlGaW5k
QWxsb2NhdG9yKCkpCisgICAgICAgIHJldHVybiBhbGxvY2F0b3I7CisKKyAgICBtX2hlYXAtPmFk
ZFRvV2F0ZXJNYXJrKFdlYWtCbG9jazo6YmxvY2tTaXplKTsKKworICAgIC8vIGFkZFRvV2F0ZXJN
YXJrKCkgbWF5IGNhdXNlIGEgR0MsIHNvIHRyeSBhZ2Fpbi4KKyAgICBpZiAoV2Vha0Jsb2NrOjpG
cmVlQ2VsbCogYWxsb2NhdG9yID0gdHJ5RmluZEFsbG9jYXRvcigpKQorICAgICAgICByZXR1cm4g
YWxsb2NhdG9yOworCisgICAgcmV0dXJuIGFkZEFsbG9jYXRvcigpOworfQorCitXZWFrQmxvY2s6
OkZyZWVDZWxsKiBXZWFrSGVhcDo6dHJ5RmluZEFsbG9jYXRvcigpCit7CisgICAgd2hpbGUgKG1f
bmV4dEFsbG9jYXRvcikgeworICAgICAgICBXZWFrQmxvY2sqIGJsb2NrID0gbV9uZXh0QWxsb2Nh
dG9yOworICAgICAgICBtX25leHRBbGxvY2F0b3IgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPiht
X25leHRBbGxvY2F0b3ItPm5leHQoKSk7CisKKyAgICAgICAgYmxvY2stPnN3ZWVwKCk7CisgICAg
ICAgIFdlYWtCbG9jazo6U3dlZXBSZXN1bHQgc3dlZXBSZXN1bHQgPSBibG9jay0+dGFrZVN3ZWVw
UmVzdWx0KCk7CisgICAgICAgIGlmIChzd2VlcFJlc3VsdC5mcmVlTGlzdCkKKyAgICAgICAgICAg
IHJldHVybiBzd2VlcFJlc3VsdC5mcmVlTGlzdDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OmFkZEFsbG9jYXRvcigpCit7CisgICAg
V2Vha0Jsb2NrKiBibG9jayA9IFdlYWtCbG9jazo6Y3JlYXRlKCk7CisgICAgbV9ibG9ja3MuYXBw
ZW5kKGJsb2NrKTsKKyAgICBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0IHN3ZWVwUmVzdWx0ID0gYmxv
Y2stPnRha2VTd2VlcFJlc3VsdCgpOworICAgIEFTU0VSVCghc3dlZXBSZXN1bHQuaXNOdWxsKCkg
JiYgc3dlZXBSZXN1bHQuZnJlZUxpc3QpOworICAgIHJldHVybiBzd2VlcFJlc3VsdC5mcmVlTGlz
dDsKK30KKwordm9pZCBXZWFrSGVhcDo6cmVtb3ZlQWxsb2NhdG9yKFdlYWtCbG9jayogYmxvY2sp
Cit7CisgICAgbV9ibG9ja3MucmVtb3ZlKGJsb2NrKTsKKyAgICBXZWFrQmxvY2s6OmRlc3Ryb3ko
YmxvY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0hlYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtIZWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYWtIZWFwX2gKKyNkZWZpbmUgV2Vha0hlYXBfaAorCisjaW5jbHVkZSAiV2Vh
a0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgV2Vha0lt
cGw7CisKK2NsYXNzIFdlYWtIZWFwIHsKK3B1YmxpYzoKKyAgICBXZWFrSGVhcChIZWFwKik7Cisg
ICAgdm9pZCBmaW5hbGl6ZUFsbCgpOworICAgIH5XZWFrSGVhcCgpOworCisgICAgV2Vha0ltcGwq
IGFsbG9jYXRlKEpTVmFsdWUsIFdlYWtIYW5kbGVPd25lciogPSAwLCB2b2lkKiBjb250ZXh0ID0g
MCk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShXZWFrSW1wbCopOworCisgICAgdm9pZCB2
aXNpdExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdERlYWRX
ZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisKKyAgICB2b2lkIHN3ZWVwKCk7CisgICAgdm9p
ZCByZXNldEFsbG9jYXRvcigpOworCitwcml2YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFdl
YWtCbG9jazo6RnJlZUNlbGwqIGZpbmRBbGxvY2F0b3IoKTsKKyAgICBXZWFrQmxvY2s6OkZyZWVD
ZWxsKiB0cnlGaW5kQWxsb2NhdG9yKCk7CisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWRkQWxs
b2NhdG9yKCk7CisgICAgdm9pZCByZW1vdmVBbGxvY2F0b3IoV2Vha0Jsb2NrKik7CisKKyAgICBX
ZWFrQmxvY2s6OkZyZWVDZWxsKiBtX2FsbG9jYXRvcjsKKyAgICBXZWFrQmxvY2sqIG1fbmV4dEFs
bG9jYXRvcjsKKyAgICBEb3VibHlMaW5rZWRMaXN0PEhlYXBCbG9jaz4gbV9ibG9ja3M7CisgICAg
SGVhcCogbV9oZWFwOworfTsKKworaW5saW5lIFdlYWtIZWFwOjpXZWFrSGVhcChIZWFwKiBoZWFw
KQorICAgIDogbV9hbGxvY2F0b3IoMCkKKyAgICAsIG1fbmV4dEFsbG9jYXRvcigwKQorICAgICwg
bV9oZWFwKGhlYXApCit7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0hlYXA6OmFsbG9jYXRl
KEpTVmFsdWUganNWYWx1ZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIsIHZvaWQq
IGNvbnRleHQpCit7CisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWxsb2NhdG9yID0gbV9hbGxv
Y2F0b3I7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIGFsbG9jYXRvciA9IGZpbmRBbGxv
Y2F0b3IoKTsKKyAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvci0+bmV4dDsKKworICAgIFdlYWtJ
bXBsKiB3ZWFrSW1wbCA9IFdlYWtCbG9jazo6YXNXZWFrSW1wbChhbGxvY2F0b3IpOworICAgIHJl
dHVybiBuZXcgKE5vdE51bGwsIHdlYWtJbXBsKSBXZWFrSW1wbChqc1ZhbHVlLCB3ZWFrSGFuZGxl
T3duZXIsIGNvbnRleHQpOworfQorCitpbmxpbmUgdm9pZCBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShX
ZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgV2Vha0Jsb2NrOjpibG9ja0Zvcih3ZWFrSW1wbCkt
PmRlYWxsb2NhdGUod2Vha0ltcGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFdlYWtIZWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0ltcGwuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBsLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWFrSW1w
bF9oCisjZGVmaW5lIFdlYWtJbXBsX2gKKworI2luY2x1ZGUgIkpTVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFdlYWtIYW5kbGVPd25lcjsKKworY2xhc3MgV2Vha0ltcGwgewor
cHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBMaXZlICAgICAgICA9IDB4MCwKKyAg
ICAgICAgRGVhZCAgICAgICAgPSAweDEsCisgICAgICAgIEZpbmFsaXplZCAgID0gMHgyLAorICAg
ICAgICBEZWFsbG9jYXRlZCA9IDB4MworICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAgICAgU3Rh
dGVNYXNrICAgPSAweDMKKyAgICB9OworCisgICAgV2Vha0ltcGwoKTsKKyAgICBXZWFrSW1wbChK
U1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqLCB2b2lkKiBjb250ZXh0KTsKKworICAgIFN0YXRlIHN0
YXRlKCk7CisgICAgdm9pZCBzZXRTdGF0ZShTdGF0ZSk7CisKKyAgICBjb25zdCBKU1ZhbHVlJiBq
c1ZhbHVlKCk7CisgICAgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIoKTsKKyAgICB2
b2lkKiBjb250ZXh0KCk7CisKKyAgICBzdGF0aWMgV2Vha0ltcGwqIGFzV2Vha0ltcGwoSlNWYWx1
ZSopOworCitwcml2YXRlOgorICAgIGNvbnN0IEpTVmFsdWUgbV9qc1ZhbHVlOworICAgIFdlYWtI
YW5kbGVPd25lciogbV93ZWFrSGFuZGxlT3duZXI7CisgICAgdm9pZCogbV9jb250ZXh0OworfTsK
KworaW5saW5lIFdlYWtJbXBsOjpXZWFrSW1wbCgpCisgICAgOiBtX3dlYWtIYW5kbGVPd25lcigw
KQorICAgICwgbV9jb250ZXh0KDApCit7CisgICAgc2V0U3RhdGUoRGVhbGxvY2F0ZWQpOworfQor
CitpbmxpbmUgV2Vha0ltcGw6OldlYWtJbXBsKEpTVmFsdWUganNWYWx1ZSwgV2Vha0hhbmRsZU93
bmVyKiB3ZWFrSGFuZGxlT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgOiBtX2pzVmFsdWUoanNW
YWx1ZSkKKyAgICAsIG1fd2Vha0hhbmRsZU93bmVyKHdlYWtIYW5kbGVPd25lcikKKyAgICAsIG1f
Y29udGV4dChjb250ZXh0KQoreworICAgIEFTU0VSVChzdGF0ZSgpID09IExpdmUpOworfQorCitp
bmxpbmUgV2Vha0ltcGw6OlN0YXRlIFdlYWtJbXBsOjpzdGF0ZSgpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFN0YXRlPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxl
T3duZXIpICYgU3RhdGVNYXNrKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0ltcGw6OnNldFN0YXRl
KFdlYWtJbXBsOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUgPj0gdGhpcy0+c3Rh
dGUoKSk7CisgICAgbV93ZWFrSGFuZGxlT3duZXIgPSByZWludGVycHJldF9jYXN0PFdlYWtIYW5k
bGVPd25lcio+KChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxlT3duZXIp
ICYgflN0YXRlTWFzaykgfCBzdGF0ZSk7Cit9CisKK2lubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFr
SW1wbDo6anNWYWx1ZSgpCit7CisgICAgcmV0dXJuIG1fanNWYWx1ZTsKK30KKworaW5saW5lIFdl
YWtIYW5kbGVPd25lciogV2Vha0ltcGw6OndlYWtIYW5kbGVPd25lcigpCit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0hhbmRsZU93bmVyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihtX3dlYWtIYW5kbGVPd25lcikgJiB+U3RhdGVNYXNrKSk7Cit9CisKK2lubGluZSB2
b2lkKiBXZWFrSW1wbDo6Y29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dDsKK30KKwor
aW5saW5lIFdlYWtJbXBsKiBXZWFrSW1wbDo6YXNXZWFrSW1wbChKU1ZhbHVlKiBzbG90KQorewor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4ocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc2xvdCkgKyBPQkpFQ1RfT0ZGU0VUT0YoV2Vha0ltcGwsIG1fanNWYWx1ZSkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFdlYWtJbXBsX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU3
NSw3ICszNTc1LDcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpbwog
TmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYykKIHsKICAgICBIb3N0RnVuY3Rpb25TdHViTWFw
OjpBZGRSZXN1bHQgZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmFkZChmdW5jdGlvbiwg
UGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7Ci0gICAgaWYgKCEqZW50cnkuaXRlcmF0b3It
PnNlY29uZCkgeworICAgIGlmICghZW50cnkuaXRlcmF0b3ItPnNlY29uZCkgewogICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZTsKICAgICAgICAgaWYgKGdlbmVyYXRvcikgewogICAg
ICAgICAgICAgaWYgKGdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsNyArMzUx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1l
IEZyb20+CiAgICAgaW5saW5lIFRvIGpzQ2FzdChGcm9tKiBmcm9tKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGZyb20tPmluaGVyaXRzKCZXVEY6OlJlbW92ZVBvaW50ZXI8VG8+OjpUeXBlOjpzX2lu
Zm8pKTsKKyAgICAgICAgQVNTRVJUKCFmcm9tIHx8IGZyb20tPmluaGVyaXRzKCZXVEY6OlJlbW92
ZVBvaW50ZXI8VG8+OjpUeXBlOjpzX2luZm8pKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFRvPihmcm9tKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3
IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWQKICAgICAgICAgLy8g
VGhlcmUgYWxyZWFkeSBpcyBhbiBlbnRyeSEgLSB3ZSBzaG91bGQgb25seSBoaXQgdGhpcyB3aGVu
IGRlc3BlY2lmeWluZy4KICAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci5nZXQoKS5zZWNv
bmQtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOwogICAgICAgICBBU1NFUlQoIXN0cnVjdHVy
ZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7Ci0gICAgICAgIG1hcCgpLT5zZXQocmVzdWx0
Lml0ZXJhdG9yLCBzdHJ1Y3R1cmUpOworICAgICAgICBtYXAoKS0+c2V0KGdsb2JhbERhdGEsIHJl
c3VsdC5pdGVyYXRvci5nZXQoKS5maXJzdCwgc3RydWN0dXJlKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNDZWxsOwogY2xhc3Mg
U3RydWN0dXJlOwogCiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewpAQCAtODMsMTAg
Kzg0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICAgICAgaWYgKCFzbG90KQor
ICAgICAgICBXZWFrSW1wbCogaW1wbCA9IHRoaXMtPndlYWtJbXBsKCk7CisgICAgICAgIGlmICgh
aW1wbCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihz
bG90KS0+ZGVhbGxvY2F0ZShzbG90KTsKKyAgICAgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUoaW1w
bCk7CiAgICAgfQogCiAgICAgaW5saW5lIHZvaWQgYWRkKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSopOwpAQCAtMTA1LDE4ICsxMDYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VHJhbnNpdGlvbk1hcCo+KG1fZGF0YSk7CiAgICAgfQogCi0gICAgSGFuZGxl
U2xvdCBzbG90KCkgY29uc3QKKyAgICBXZWFrSW1wbCogd2Vha0ltcGwoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwotICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxIYW5kbGVTbG90PihtX2RhdGEgJiB+VXNpbmdTaW5nbGVTbG90RmxhZyk7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4obV9kYXRhICYgflVz
aW5nU2luZ2xlU2xvdEZsYWcpOwogICAgIH0KIAogICAgIHZvaWQgc2V0TWFwKFRyYW5zaXRpb25N
YXAqIG1hcCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCkpCi0gICAg
ICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5kZWFsbG9jYXRlKHNsb3QpOworICAg
ICAgICBpZiAoV2Vha0ltcGwqIGltcGwgPSB0aGlzLT53ZWFrSW1wbCgpKQorICAgICAgICAgICAg
V2Vha0hlYXA6OmRlYWxsb2NhdGUoaW1wbCk7CiAKICAgICAgICAgLy8gVGhpcyBpbXBsaWNpdGx5
IGNsZWFycyB0aGUgZmxhZyB0aGF0IGluZGljYXRlcyB3ZSdyZSB1c2luZyBhIHNpbmdsZSB0cmFu
c2l0aW9uCiAgICAgICAgIG1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1hcCk7
CkBAIC0xMjcsOSArMTI4LDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmUqIHNpbmdsZVRyYW5z
aXRpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkp
OwotICAgICAgICBpZiAoSGFuZGxlU2xvdCBzbG90ID0gdGhpcy0+c2xvdCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoKnNsb3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
U3RydWN0dXJlKj4oc2xvdC0+YXNDZWxsKCkpOworICAgICAgICBpZiAoV2Vha0ltcGwqIGltcGwg
PSB0aGlzLT53ZWFrSW1wbCgpKSB7CisgICAgICAgICAgICBpZiAoaW1wbC0+c3RhdGUoKSA9PSBX
ZWFrSW1wbDo6TGl2ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxT
dHJ1Y3R1cmUqPihpbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KQEAgLTEzNywxNCArMTM4LDEwIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXRTaW5nbGVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7
Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICAgICAgaWYgKCFz
bG90KSB7Ci0gICAgICAgICAgICBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+
YWxsb2NhdGUoKTsKLSAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPm1ha2VX
ZWFrKHNsb3QsIDAsIDApOwotICAgICAgICAgICAgbV9kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oc2xvdCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwotICAgICAgICB9Ci0gICAgICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihzbG90LCByZWludGVycHJl
dF9jYXN0PEpTQ2VsbCo+KHN0cnVjdHVyZSkpOwotICAgICAgICAqc2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SlNDZWxsKj4oc3RydWN0dXJlKTsKKyAgICAgICAgaWYgKFdlYWtJbXBsKiBpbXBsID0g
dGhpcy0+d2Vha0ltcGwoKSkKKyAgICAgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwp
OworICAgICAgICBXZWFrSW1wbCogaW1wbCA9IGdsb2JhbERhdGEuaGVhcC53ZWFrSGVhcCgpLT5h
bGxvY2F0ZShyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHN0cnVjdHVyZSkpOworICAgICAgICBt
X2RhdGEgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbXBsKSB8IFVzaW5nU2luZ2xlU2xv
dEZsYWc7CiAgICAgfQogCiAgICAgaW50cHRyX3QgbV9kYXRhOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIGNsYXNzIFdlYWtHQ01hcCA6IHByaXZhdGUgV2Vha0hhbmRsZU93bmUKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWFr
R0NNYXApOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5cGUsIEhhbmRsZVNsb3QsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZz4gTWFwVHlwZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSwg
V2Vha0ltcGwqLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IE1hcFR5cGU7CiAgICAgdHlwZWRlZiB0
eXBlbmFtZSBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlw
ZTsKICAgICB0eXBlZGVmIHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIG1hcF9pdGVyYXRvcjsK
IApAQCAtNjQsOCArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgc3RkOjpwYWlyPEtleVR5cGUsIEV4dGVybmFsVHlwZT4gZ2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RkOjptYWtlX3BhaXIobV9pdGVyYXRvci0+Zmlyc3QsIEhhbmRsZVR5cGVzPE1h
cHBlZFR5cGU+OjpnZXRGcm9tU2xvdChtX2l0ZXJhdG9yLT5zZWNvbmQpKTsgfQotICAgICAgICBz
dGQ6OnBhaXI8S2V5VHlwZSwgSGFuZGxlU2xvdD4gZ2V0U2xvdCgpIGNvbnN0IHsgcmV0dXJuICpt
X2l0ZXJhdG9yOyB9CisgICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5cGU+IGdl
dCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0LCBIYW5k
bGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJm1f
aXRlcmF0b3ItPnNlY29uZC0+anNWYWx1ZSgpKSkpOyB9CiAgICAgICAgIAogICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3IrKygpIHsgKyttX2l0ZXJhdG9yOyByZXR1cm4gKnRoaXM7IH0KICAgICAg
ICAgCkBAIC05MCw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1hcF9pdGVyYXRv
ciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICAgICAgZm9yIChtYXBfaXRlcmF0b3IgcHRyID0gbV9t
YXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICBIYW5kbGVIZWFwOjpo
ZWFwRm9yKHB0ci0+c2Vjb25kKS0+ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CisgICAgICAgICAg
ICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CiAgICAgICAgIG1fbWFwLmNsZWFy
KCk7CiAgICAgfQogCkBAIC0xMDcsNjQgKzEwNiw0MiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmUoaXRlcmF0b3IgaXRlcikKICAgICB7CiAgICAgICAgIEFTU0VSVChpdGVyLm1faXRlcmF0b3Ig
IT0gbV9tYXAuZW5kKCkpOwotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSBpdGVyLm1faXRlcmF0
b3ItPnNlY29uZDsKLSAgICAgICAgQVNTRVJUKHNsb3QpOwotICAgICAgICBIYW5kbGVIZWFwOjpo
ZWFwRm9yKHNsb3QpLT5kZWFsbG9jYXRlKHNsb3QpOworICAgICAgICBXZWFrSW1wbCogaW1wbCA9
IGl0ZXIubV9pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBBU1NFUlQoaW1wbCk7CisgICAgICAg
IFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgICAgICBtX21hcC5yZW1vdmUoaXRlci5t
X2l0ZXJhdG9yKTsKICAgICB9CiAKICAgICBFeHRlcm5hbFR5cGUgZ2V0KGNvbnN0IEtleVR5cGUm
IGtleSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBl
Pjo6Z2V0RnJvbVNsb3QobV9tYXAuZ2V0KGtleSkpOwotICAgIH0KLQotICAgIEhhbmRsZVNsb3Qg
Z2V0U2xvdChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9tYXAuZ2V0KGtleSk7CisgICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6
Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJm1fbWFwLmdldChrZXkpLT5qc1ZhbHVl
KCkpKTsKICAgICB9CiAKICAgICBBZGRSZXN1bHQgYWRkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAgewogICAgICAg
ICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7
Ci0gICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgSGFuZGxlU2xv
dCBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gc2xvdDsKLSAgICAgICAgICAgIEhhbmRs
ZUhlYXA6OmhlYXBGb3Ioc2xvdCktPm1ha2VXZWFrKHNsb3QsIHRoaXMsIEZpbmFsaXplckNhbGxi
YWNrOjpmaW5hbGl6ZXJDb250ZXh0Rm9yKGtleSkpOwotICAgICAgICAgICAgSGFuZGxlSGVhcDo6
aGVhcEZvcihzbG90KS0+d3JpdGVCYXJyaWVyKHNsb3QsIHZhbHVlKTsKLSAgICAgICAgICAgICpz
bG90ID0gdmFsdWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBnbG9iYWxEYXRhLmhlYXAud2Vh
a0hlYXAoKS0+YWxsb2NhdGUodmFsdWUsIHRoaXMsIEZpbmFsaXplckNhbGxiYWNrOjpmaW5hbGl6
ZXJDb250ZXh0Rm9yKGtleSkpOworCiAgICAgICAgIC8vIFdlYWtHQ01hcCBleHBvc2VzIGEgZGlm
ZmVyZW50IGl0ZXJhdG9yLCBzbyB3ZSBuZWVkIHRvIHdyYXAgaXQgYW5kIGNyZWF0ZSBvdXIgb3du
IEFkZFJlc3VsdC4KICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChpdGVyYXRvcihyZXN1bHQuaXRl
cmF0b3IpLCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0KGl0
ZXJhdG9yIGl0ZXIsIEV4dGVybmFsVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEhhbmRsZVNs
b3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+c2Vjb25kOwotICAgICAgICBBU1NFUlQoc2xvdCk7
Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihzbG90LCB2
YWx1ZSk7Ci0gICAgICAgICpzbG90ID0gdmFsdWU7Ci0gICAgfQogCiAgICAgdm9pZCBzZXQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBLZXlUeXBlJiBrZXksIEV4dGVybmFsVHlwZSB2
YWx1ZSkKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQg
PSBtX21hcC5hZGQoa2V5LCAwKTsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAg
ICAgICAgc2xvdCA9IGdsb2JhbERhdGEuaGVhcC5oYW5kbGVIZWFwKCktPmFsbG9jYXRlKCk7Ci0g
ICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5tYWtlV2VhayhzbG90LCB0aGlz
LCBrZXkpOwotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBzbG90OwotICAg
ICAgICB9Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihz
bG90LCB2YWx1ZSk7Ci0gICAgICAgICpzbG90ID0gdmFsdWU7CisgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCisgICAgICAgICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gZ2xvYmFs
RGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxs
YmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKICAgICB9CiAKICAgICBFeHRlcm5hbFR5
cGUgdGFrZShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgewotICAgICAgICBIYW5kbGVTbG90IHNs
b3QgPSBtX21hcC50YWtlKGtleSk7Ci0gICAgICAgIGlmICghc2xvdCkKKyAgICAgICAgV2Vha0lt
cGwqIGltcGwgPSBtX21hcC50YWtlKGtleSk7CisgICAgICAgIGlmICghaW1wbCkKICAgICAgICAg
ICAgIHJldHVybiBIYXNoVHJhaXRzPEV4dGVybmFsVHlwZT46OmVtcHR5VmFsdWUoKTsKLSAgICAg
ICAgRXh0ZXJuYWxUeXBlIHJlc3VsdCA9IEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9t
U2xvdChzbG90KTsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0
ZShzbG90KTsKKyAgICAgICAgRXh0ZXJuYWxUeXBlIHJlc3VsdCA9IEhhbmRsZVR5cGVzPE1hcHBl
ZFR5cGU+OjpnZXRGcm9tU2xvdChjb25zdF9jYXN0PEpTVmFsdWUqPigmaW1wbC0+anNWYWx1ZSgp
KSk7CisgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIApAQCAtMTgxLDkgKzE1OCw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNv
bnRleHQpCiAgICAgewotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSBtX21hcC50YWtlKEZpbmFs
aXplckNhbGxiYWNrOjprZXlGb3JGaW5hbGl6ZXIoY29udGV4dCwgSGFuZGxlVHlwZXM8TWFwcGVk
VHlwZT46OmdldEZyb21TbG90KGhhbmRsZS5zbG90KCkpKSk7Ci0gICAgICAgIEFTU0VSVChzbG90
KTsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShzbG90KTsK
KyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSBtX21hcC50YWtlKEZpbmFsaXplckNhbGxiYWNrOjpr
ZXlGb3JGaW5hbGl6ZXIoY29udGV4dCwgSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21T
bG90KGhhbmRsZS5zbG90KCkpKSk7CisgICAgICAgIEFTU0VSVChpbXBsKTsKKyAgICAgICAgV2Vh
a0hlYXA6OmRlYWxsb2NhdGUoaW1wbCk7CiAgICAgfQogCiAgICAgTWFwVHlwZSBtX21hcDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjU4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAzLTI5ICBHZW9mZnJleSBH
YXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmlyc3Qgc3RlcCB0b3dhcmQgaW5j
cmVtZW50YWwgV2VhazxUPiBmaW5hbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBXZWJDb3JlIGZvciBXZWFrPFQ+IEFQSSBjaGFu
Z2VzLgorCisgICAgICAgICogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU3RyaW5nT3duZXI6OmZpbmFsaXplKTogV2UncmUgbm90IGFsbG93ZWQg
dG8gZ2V0KCkgYSBkZWFkIFdlYWs8VD4KKyAgICAgICAgYW55bW9yZSwgc28gdXNlIHRoZSBkZWJ1
Zy1vbmx5IHdhcygpIGhlbHBlciBmdW5jdGlvbiBpbnN0ZWFkLgorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjp1bmNhY2hlV3JhcHBlcik6
IERpdHRvLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmg6CisgICAgICAg
IChXZWJDb3JlOjpzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
ZWFySW5saW5lQ2FjaGVkV3JhcHBlcik6IFdlJ3JlIG5vdCBhbGxvd2VkIHRvIGdldCgpIGEgZGVh
ZAorICAgICAgICBXZWFrPFQ+LCBzbyBJIGhhZCB0byBwdXNoIGRvd24gdGhlc2UgQVNTRVJUcyBp
bnRvIFNjcmlwdFdyYXBwYWJsZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVGaWx0ZXJDb25kaXRpb246
OmFjY2VwdE5vZGUpOiBVcGRhdGVkIGZvciBub24tSGFuZGxlLW5lc3MKKyAgICAgICAgb2YgV2Vh
azxUPi4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0V3JhcHBhYmxlOjpzZXRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdFdyYXBwYWJsZTo6Y2xlYXJXcmFwcGVyKTogVXNlIHdhcygpLCBhcyBhYm92ZS4K
KwogMjAxMi0wMy0yOSAgQmVhciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CiAKICAgICAg
ICAgVXBkYXRlIENTUyBFeGNsdXNpb24gd3JhcC1mbG93IHZhbHVlcyBsZWZ0ICYgcmlnaHQgdG8g
c3RhcnQgJiBlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJX
b3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3Jh
cHBlcldvcmxkLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCB2b2lkIEpTU3RyaW5nT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlCiB7CiAgICAgSlNTdHJp
bmcqIGpzU3RyaW5nID0gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihoYW5kbGUuZ2V0KCkuYXNDZWxs
KCkpOwogICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBs
Kj4oY29udGV4dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChqc1N0cmluZywgbV93b3JsZC0+bV9zdHJp
bmdDYWNoZS5maW5kKHN0cmluZ0ltcGwpLT5zZWNvbmQuZ2V0KCkgPT0ganNTdHJpbmcpOworICAg
IEFTU0VSVF9VTlVTRUQoanNTdHJpbmcsIG1fd29ybGQtPm1fc3RyaW5nQ2FjaGUuZmluZChzdHJp
bmdJbXBsKS0+c2Vjb25kLndhcyhqc1N0cmluZykpOwogICAgIG1fd29ybGQtPm1fc3RyaW5nQ2Fj
aGUucmVtb3ZlKHN0cmluZ0ltcGwpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAs
NyBAQCBlbnVtIFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgIHsKICAgICAgICAgaWYgKGNs
ZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJzLmZpbmQoZG9t
T2JqZWN0KS0+c2Vjb25kLmdldCgpID09IHdyYXBwZXIpOworICAgICAgICBBU1NFUlQod29ybGQt
Pm1fd3JhcHBlcnMuZmluZChkb21PYmplY3QpLT5zZWNvbmQud2FzKHdyYXBwZXIpKTsKICAgICAg
ICAgd29ybGQtPm1fd3JhcHBlcnMucmVtb3ZlKGRvbU9iamVjdCk7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmgJKHJldmlzaW9uIDEx
MjU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIGlubGluZSBib29sIHNldElubGluZUNhY2hlZFdy
YXBwZXIoRE9NV3IKIHsKICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgQVNTRVJUKCFub2RlLT53cmFwcGVyKCkpOwogICAgIG5vZGUtPnNldFdy
YXBwZXIoKndvcmxkLT5nbG9iYWxEYXRhKCksIHdyYXBwZXIsIHdyYXBwZXJPd25lcih3b3JsZCwg
bm9kZSksIHdyYXBwZXJDb250ZXh0KHdvcmxkLCBub2RlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC01MSw4ICs1MCw3IEBAIGlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T00KIHsKICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgQVNTRVJUX1VOVVNFRCh3cmFwcGVyLCBub2RlLT53cmFwcGVyKCkgPT0gd3JhcHBlcik7
Ci0gICAgbm9kZS0+Y2xlYXJXcmFwcGVyKCk7CisgICAgbm9kZS0+Y2xlYXJXcmFwcGVyKHdyYXBw
ZXIpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgc2hvcnQgSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uOjphY2NlcHROb2RlKAogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAKLSAgICBpZiAoIW1fZmlsdGVyLmlzT2JqZWN0KCkpCisgICAgaWYgKCFtX2ZpbHRl
ciB8fCAhbV9maWx0ZXItPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpG
SUxURVJfQUNDRVBUOwogCiAgICAvLyBUaGUgZXhlYyBhcmd1bWVudCBoZXJlIHNob3VsZCBvbmx5
IGJlIG51bGwgaWYgdGhpcyB3YXMgY2FsbGVkIGZyb20gYQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxMSArNDUsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRXcmFwcGVyKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIsIEpTQzo6V2Vh
a0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQpCiAgICAgeworICAgICAg
ICBBU1NFUlQoIW1fd3JhcHBlcik7CiAgICAgICAgIG1fd3JhcHBlciA9IEpTQzo6UGFzc1dlYWs8
SlNET01XcmFwcGVyPihnbG9iYWxEYXRhLCB3cmFwcGVyLCB3cmFwcGVyT3duZXIsIGNvbnRleHQp
OwogICAgIH0KIAotICAgIHZvaWQgY2xlYXJXcmFwcGVyKCkKKyAgICB2b2lkIGNsZWFyV3JhcHBl
cihKU0RPTVdyYXBwZXIqIHdyYXBwZXIpCiAgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHdy
YXBwZXIsIG1fd3JhcHBlci53YXMod3JhcHBlcikpOwogICAgICAgICBtX3dyYXBwZXIuY2xlYXIo
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjU4NykKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAz
LTI5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmlyc3Qg
c3RlcCB0b3dhcmQgaW5jcmVtZW50YWwgV2VhazxUPiBmaW5hbGl6YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjcwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBmb3IgQVBJIGNoYW5n
ZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmZpbmFsaXpl
KToKKwogMjAxMi0wMy0yOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjExMjU1My4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RN
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgTlBSdW50aW1lT2Jq
ZWN0TWFwOjpmaW5hbGl6ZShKU0M6OkgKIHsKICAgICBIYXNoTWFwPE5QT2JqZWN0KiwgSlNDOjpX
ZWFrPEpTTlBPYmplY3Q+ID46Oml0ZXJhdG9yIGZvdW5kID0gbV9qc05QT2JqZWN0cy5maW5kKHN0
YXRpY19jYXN0PE5QT2JqZWN0Kj4oY29udGV4dCkpOwogICAgIEFTU0VSVChmb3VuZCAhPSBtX2pz
TlBPYmplY3RzLmVuZCgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgYXNPYmplY3QoaGFu
ZGxlLmdldCgpKSA9PSBmb3VuZC0+c2Vjb25kKTsKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwg
YXNPYmplY3QoaGFuZGxlLmdldCgpKSA9PSBmb3VuZC0+c2Vjb25kLmdldCgpKTsKICAgICBKU05Q
T2JqZWN0KiBvYmplY3QgPSBmb3VuZC0+c2Vjb25kLmdldCgpOwogICAgIG1fanNOUE9iamVjdHMu
cmVtb3ZlKGZvdW5kKTsKICAgICBhZGRUb0ludmFsaWRhdGlvblF1ZXVlKG9iamVjdC0+bGVha05Q
T2JqZWN0KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134982</attachid>
            <date>2012-03-31 18:18:39 -0700</date>
            <delta_ts>2012-04-02 09:04:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82670-20120331181813.patch</filename>
            <type>text/plain</type>
            <size>103711</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MiBA
QAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyBhIFdlYWs8VD4gaGVhcCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBpbmNyZW1l
bnRhbAorICAgICAgICBmaW5hbGl6YXRpb24sIHdoaWxlIG1ha2luZyBhcyBmZXcgYmVoYXZpb3Ig
Y2hhbmdlcyBhcyBwb3NzaWJsZS4gVGhlIGJlaGF2aW9yCisgICAgICAgIGNoYW5nZXMgaXQgbWFr
ZXMgYXJlOgorCisgICAgICAgICgqKSBXZWFrPFQ+J3MgcmF3IEpTVmFsdWUgbm8gbG9uZ2VyIHJl
dmVydHMgdG8gSlNWYWx1ZSgpIGF1dG9tYXRpY2FsbHkgLS0KKyAgICAgICAgaW5zdGVhZCwgYSBz
ZXBhcmF0ZSBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBKU1ZhbHVlIGlzIG5vIGxvbmdlciB2YWxp
ZC4KKyAgICAgICAgKFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgSlNWYWx1ZSBjYW4gYmUg
cHJlc2VydmVkIGZvciBsYXRlciBmaW5hbGl6YXRpb24uKQorICAgICAgICBPYmplY3RzIGRlYWxp
bmcgd2l0aCBXZWFrSW1wbHMgZGlyZWN0bHkgbXVzdCBjaGFuZ2UgdG8gY2hlY2sgdGhlIGZsYWcu
CisKKyAgICAgICAgKCopIFdlYWs8VD4gaXMgbm8gbG9uZ2VyIGEgc3ViY2xhc3Mgb2YgSGFuZGxl
PFQ+LgorCisgICAgICAgICgqKSBET00gR0MgcGVyZm9ybWFuY2UgaXMgZGlmZmVyZW50IC0tIDkl
IGZhc3RlciBpbiB0aGUgZ2VvbWV0cmljIG1lYW4sCisgICAgICAgIGJ1dCAxNSUgc2xvd2VyIGlu
IG9uZSBzcGVjaWZpYyBjYXNlOgorICAgICAgICAgICAgICAgIGdjLWRvbTEuaHRtbDogNiUgIGZh
c3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTIuaHRtbDogMjMlIGZhc3RlcgorICAgICAgICAg
ICAgICAgIGdjLWRvbTMuaHRtbDogMTclIGZhc3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTQu
aHRtbDogMTUlICpzbG93ZXIqCisKKyAgICAgICAgVGhlIGtleSBmZWF0dXJlcyBvZiB0aGlzIG5l
dyBoZWFwIGFyZToKKworICAgICAgICAoKikgRWFjaCBibG9jayBrbm93cyBpdHMgb3duIHN0YXRl
LCBpbmRlcGVuZGVudCBvZiBhbnkgb3RoZXIgYmxvY2tzLgorCisgICAgICAgICgqKSBFYWNoIGJs
b2NrIGNhY2hlcyBpdHMgb3duIHN3ZWVwIHJlc3VsdC4KKworICAgICAgICAoKikgVGhlIGhlYXAg
dmlzaXRzIGRlYWQgV2VhazxUPnMgYXQgdGhlIGVuZCBvZiBHQy4gKEl0IGRvZXNuJ3QKKyAgICAg
ICAgbWFyayB0aGVtIHlldCwgc2luY2UgdGhhdCB3b3VsZCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4p
CisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tPYmplY3REYXRhOjpmaW5hbGl6ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Ojppbml0KTogVXBkYXRlZCB0byB1c2Ug
dGhlIG5ldyBXZWFrSGVhcCBBUEkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6IFBhaWQgdGhlIGJ1aWxkIHN5c3RlbSB0
YXggc2luY2UgSSBhZGRlZCBzb21lIG5ldyBmaWxlcy4KKworICAgICAgICAqIGhlYXAvSGFuZGxl
Lmg6IE1hZGUgV2Vha0Jsb2NrIGEgZnJpZW5kIGFuZCBleHBvc2VkIHNsb3QoKSBhcyBwdWJsaWMs
CisgICAgICAgIHNvIHdlIGNhbiBrZWVwIHBhc3NpbmcgYSBIYW5kbGU8VD4gdG8gZmluYWxpemVy
cywgdG8gYXZvaWQgbW9yZSBzdXJmYWNlCisgICAgICAgIGFyZWEgY2hhbmdlIGluIHRoaXMgcGF0
Y2guIEEgZm9sbG93LXVwIHBhdGNoIHNob3VsZCBjaGFuZ2UgdGhlIHR5cGUgd2UKKyAgICAgICAg
cGFzcyB0byBmaW5hbGl6ZXJzLgorCisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmNwcDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OndyaXRlQmFycmllcik6Cisg
ICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUpOgorICAgICAgICAqIGhlYXAvSGFu
ZGxlSGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZUhlYXApOgorICAgICAg
ICAoTm9kZSk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUpOiBSZW1vdmVk
IGFsbCBjb2RlIHJlbGF0ZWQgdG8gV2VhazxUPiwgc2luY2UKKyAgICAgICAgd2UgaGF2ZSBhIHNl
cGFyYXRlIFdlYWtIZWFwIG5vdy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OkhlYXApOiBSZW1vdmVkIG1fZXh0cmFDb3N0IGJlY2F1c2UgZXh0cmEgY29z
dCBpcyBhY2NvdW50ZWQKKyAgICAgICAgZm9yIHRocm91Z2ggb3VyIHdhdGVybWFyayBub3cuIFJl
bW92ZWQgbV93YXRlck1hcmsgYmVjYXVzZSBpdCB3YXMgdW51c2VkLgorCisgICAgICAgIChKU0M6
OkhlYXA6OmRlc3Ryb3kpOiBVcGRhdGVkIGZvciBhZGRpdGlvbiBvZiBXZWFrSGVhcC4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZSk6IENoYW5nZWQg
ZnJvbSB1c2luZyBpdHMgb3duCisgICAgICAgIHZhcmlhYmxlIHRvIHBhcnRpY2lwYXRpbmcgaW4g
dGhlIHdhdGVybWFyayBzdHJhdGVneS4gSSB3YW50ZWQgdG8gc3RhbmRhcmRpemUKKyAgICAgICAg
V2Vha0hlYXAgYW5kIGFsbCBvdGhlciBIZWFwIGNsaWVudHMgb24gdGhpcyBzdHJhdGVneSwgdG8g
bWFrZSBzdXJlIGl0J3MKKyAgICAgICAgYWNjdXJhdGUuCisgCisgICAgICAgIChKU0M6OkhlYXA6
Om1hcmtSb290cyk6IFVwZGF0ZWQgZm9yIGFkZGl0aW9uIG9mIFdlYWtIZWFwLiBBZGRlZCBXZWFr
SGVhcAorICAgICAgICBkZWFkIHZpc2l0IHBhc3MsIGFzIGV4cGxhaW5lZCBhYm92ZS4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVzZXRBbGxv
Y2F0b3JzKTogVXBkYXRlZCBmb3IgYWRkaXRpb24gb2YgV2Vha0hlYXAuCisKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6RmluYWxpemVyT3du
ZXI6OmZpbmFsaXplKTogVXBkYXRlZCBmb3IgbmV3IFdlYWs8VD4gQVBJLgorCisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndlYWtIZWFwKToKKyAgICAgICAgKEhl
YXApOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1dhdGVyTWFyayk6IEFkZGVkIGEgd2F5IHRv
IHBhcnRpY2lwYXRlIGluIHRoZSB3YXRlcm1hcmtpbmcKKyAgICAgICAgc3RyYXRlZ3ksIHNpbmNl
IHRoaXMgaXMgdGhlIGJlc3Qgd2F5IGZvciBXZWFrSGVhcCB0byByZXBvcnQgaXRzIG1lbW9yeQor
ICAgICAgICBjb3N0LiAoSSBwbGFuIHRvIHVwZGF0ZSB0aGlzIGluIGEgZm9sbG93LXVwIHBhdGNo
IHRvIG1ha2UgaXQgbW9yZSBhY2N1cmF0ZSwKKyAgICAgICAgYnV0IGZvciBub3cgaXQgaXMgbm90
IGxlc3MgYWNjdXJhdGUgdGhhbiBpdCB1c2VkIHRvIGJlLikKKworICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjphZGRUb1dhdGVyTWFyayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpkaWRDb25zdW1lRnJlZUxpc3QpOiBSZW1vdmVkIG1fbnVyc2VyeVdhdGVyTWFyayBiZWNhdXNl
CisgICAgICAgIGl0IHdhcyB1bnVzZWQsIGFuZCBJIGRpZG4ndCB3YW50IHRvIHVwZGF0ZSBXZWFr
SGVhcCB0byBrZWVwIGFuIHVzdXNlZAorICAgICAgICB2YXJpYWJsZSB3b3JraW5nLiBBZGRlZCBB
UEkgZm9yIGFib3ZlLgorCisgICAgICAgICogaGVhcC9QYXNzV2Vhay5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKFdlYWtJbXBsQWNjZXNzb3IpOgorICAgICAgICAoUGFzc1dlYWspOgorICAg
ICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6OjpnZXQpOgorICAgICAgICAo
SlNDOjo6Ondhcyk6CisgICAgICAgIChKU0M6Ojo6UGFzc1dlYWspOgorICAgICAgICAoSlNDOjo6
On5QYXNzV2Vhayk6CisgICAgICAgIChKU0M6OlVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAg
ICAoSlNDOjo6OmxlYWtJbXBsKToKKyAgICAgICAgKEpTQzo6YWRvcHRXZWFrKToKKyAgICAgICAg
KiBoZWFwL1N0cm9uZy5oOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yISk6CisgICAg
ICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKToKKyAgICAgICAgKEpTQzo6U3Ryb25nOjpnZXQpOgorICAgICAgICAqIGhlYXAv
V2Vhay5oOgorICAgICAgICAoV2Vhayk6CisgICAgICAgIChKU0M6Ojo6V2Vhayk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjo6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6Ojp+V2Vhayk6CisgICAgICAgIChKU0M6Ojo6c3dhcCk6CisgICAgICAgIChKU0M6
Oj0pOgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6VW5zcGVjaWZp
ZWRCb29sVHlwZSk6CisgICAgICAgIChKU0M6Ojo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6Ojo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjo6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IExvdHMgb2Yg
Y29kZSBjaGFuZ2VzIGhlcmUsIGJ1dCB0aGV5IGJvaWwKKyAgICAgICAgZG93biB0byB0d28gdGhp
bmdzOgorCisgICAgICAgICgqKSBBbGxvY2F0ZSBXZWFrSW1wbHMgZnJvbSB0aGUgV2Vha0hlYXAg
aW5zdGVhZCBvZiBIYW5kbGVzIGZyb20gdGhlIEhhbmRsZUhlYXAuCisKKyAgICAgICAgKCopIEV4
cGxpY2l0bHkgY2hlY2sgV2Vha0ltcGw6OnN0YXRlKCkgZm9yIG5vbi1saXZlbmVzcyBiZWZvcmUg
cmV0dXJuaW5nCisgICAgICAgIGEgdmFsdWUgKGV4cGxhaW5lZCBhYm92ZSkuCisKKyAgICAgICAg
VGhlc2UgZmlsZXMgaW1wbGVtZW50IHRoZSBuZXcgV2VhazxUPiBoZWFwIGJlaGF2aW9yIGRlc2Ny
aWJlZCBhYm92ZToKKworICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDogQWRkZWQuCisgICAg
ICAgICogaGVhcC9XZWFrQmxvY2suaDogQWRkZWQuCisgICAgICAgICogaGVhcC9XZWFrSGFuZGxl
T3duZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIYW5kbGVPd25lci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIZWFwLmNwcDogQWRkZWQuCisgICAgICAgICogaGVhcC9X
ZWFrSGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtJbXBsLmg6IEFkZGVkLgorCisg
ICAgICAgIE9uZSBpbnRlcmVzdGluZyBkaWZmZXJlbmNlIGZyb20gdGhlIG9sZCBoZWFwIGlzIHRo
YXQgd2UgZG9uJ3QgYWxsb3cKKyAgICAgICAgY2xpZW50cyB0byBvdmVyd3JpdGUgYSBXZWFrSW1w
bCBhZnRlciBhbGxvY2F0aW5nIGl0LCBhbmQgd2UgZG9uJ3QgcmVjeWNsZQorICAgICAgICBXZWFr
SW1wbHMgcHJpb3IgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBs
YXp5IGZpbmFsaXphdGlvbiwKKyAgICAgICAgYnV0IGl0IHdpbGwgYWxzbyBoZWxwIHVzIGVzYWJs
aXNoIGEgdXNlZnVsIGludmFyaWFudCBpbiB0aGUgZnV0dXJlOiBhbGxvY2F0aW5nCisgICAgICAg
IGEgV2Vha0ltcGwgd2lsbCBiZSBhIGJpbmRpbmcgY29udHJhY3QgdG8gcnVuIGEgZmluYWxpemVy
IGF0IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgIGZ1dHVyZSwgZXZlbiBpZiB0aGUgV2Vha0lt
cGwgaXMgbGF0ZXIgZGVhbGxvY2F0ZWQuCisKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOiBDaGVjayB0aGUgV2Vh
azxUPiBmb3IgISBpbnN0ZWFkIG9mCisgICAgICAgIGl0cyBKU1ZhbHVlLCBzaW5jZSB0aGF0J3Mg
b3VyIEFQSSBjb250cmFjdCBub3csIGFuZCB0aGUgSlNWYWx1ZSBtaWdodAorICAgICAgICBiZSBz
dGFsZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OmpzQ2Fz
dCk6IEFsbG93IGNhc3RpbmcgTlVMTCBwb2ludGVycyBiZWNhdXNlIGl0J3MgdXNlZnVsIGFuZCBo
YXJtbGVzcy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOiBJIGNhbid0IHJlbWVtYmVyIHdoeSBJ
IGRpZCB0aGlzLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOiBJIGhhZCB0byB1cGRhdGUgdGhlc2Ug
Y2xhc3NlcyBiZWNhdXNlIHRoZXkgYWxsb2NhdGUKKyAgICAgICAgYW5kIGRlYWxsb2NhdGUgd2Vh
ayBwb2ludGVycyBtYW51YWxseS4gVGhleSBzaG91bGQgcHJvYmFibHkgc3RvcCBkb2luZyB0aGF0
LgorCiAyMDEyLTAzLTI5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeCBwMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDE5IEBAIFNF
VChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwCisgICAgaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCi0gICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSGVhcC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAg
ICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcAogICAg
IGhlYXAvTWFya2VkU3BhY2UuY3BwCi0gICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAg
ICBoZWFwL01hcmtTdGFjay5jcHAKKyAgICBoZWFwL1dlYWtIZWFwLmNwcAorICAgIGhlYXAvV2Vh
a0hhbmRsZU93bmVyLmNwcAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogCiAgICAgZGVidWdnZXIv
RGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAsNiArMjUwLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFwLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDYgKzIxNyw5IEBACiAgICAgICAgICAgICAnYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAnLAogICAgICAgICAgICAgJ2J5dGVjb21waWxlci9SZWdpc3RlcklELmgnLAogICAgICAgICAg
ICAgJ2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwJywKKyAgICAgICAgICAgICdoZWFwL1dlYWtI
ZWFwLmNwcCcsCisgICAgICAgICAgICAnaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwJywKKyAgICAg
ICAgICAgICdoZWFwL1dlYWtCbG9jay5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlSGVh
cC5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlU3RhY2suY3BwJywKICAgICAgICAgICAg
ICdoZWFwL0hlYXAuY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0NvcGllZFNwYWNl
LmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAogICAgIGhlYXAvREZHQ29k
ZUJsb2Nrcy5jcHAgXAorICAgIGhlYXAvV2Vha0hlYXAuY3BwIFwKKyAgICBoZWFwL1dlYWtIYW5k
bGVPd25lci5jcHAgXAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVI
ZWFwLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw3IEBAIHZvaWQgSlND
YWxsYmFja09iamVjdERhdGE6OmZpbmFsaXplKEhhbmQKICAgICBmb3IgKDsganNDbGFzczsganND
bGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKQogICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6
ZUNhbGxiYWNrIGZpbmFsaXplID0ganNDbGFzcy0+ZmluYWxpemUpCiAgICAgICAgICAgICBmaW5h
bGl6ZSh0aGlzUmVmKTsKLSAgICBIYW5kbGVTbG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwotICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgV2Vha0hl
YXA6OmRlYWxsb2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQog
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTEyNTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNCArMTAyLDExIEBAIHZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojppbml0KEV4ZWMKICAgICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwg
dG9SZWYodGhpcykpOwogICAgIH0KIAotICAgIGJvb2wgbmVlZHNGaW5hbGl6ZXIgPSBmYWxzZTsK
LSAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHIg
JiYgIW5lZWRzRmluYWxpemVyOyBqc0NsYXNzUHRyID0ganNDbGFzc1B0ci0+cGFyZW50Q2xhc3Mp
Ci0gICAgICAgIG5lZWRzRmluYWxpemVyID0ganNDbGFzc1B0ci0+ZmluYWxpemU7Ci0gICAgaWYg
KG5lZWRzRmluYWxpemVyKSB7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGV4ZWMtPmdsb2Jh
bERhdGEoKS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0
KCksIGNsYXNzUmVmKCkpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0
ZUJhcnJpZXIoc2xvdCwgdGhpcyk7Ci0gICAgICAgICpzbG90ID0gdGhpczsKKyAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHI7IGpzQ2xhc3NQdHIg
PSBqc0NsYXNzUHRyLT5wYXJlbnRDbGFzcykgeworICAgICAgICBpZiAoanNDbGFzc1B0ci0+Zmlu
YWxpemUpIHsKKyAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLndlYWtIZWFwKCkt
PmFsbG9jYXRlKHRoaXMsIG1fY2FsbGJhY2tPYmplY3REYXRhLmdldCgpLCBjbGFzc1JlZigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2
aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0Jh
c2UueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJD
b21waWxlclZlcnNpb24ueGNjb25maWciCiAKIENPTVBJTEVSX1NQRUNJRklDX1dBUk5JTkdfQ0ZM
QUdTID0gJChDT01QSUxFUl9TUEVDSUZJQ19XQVJOSU5HX0NGTEFHU18kKFRBUkdFVF9HQ0NfVkVS
U0lPTikpOwotQ09NUElMRVJfU1BFQ0lGSUNfV0FSTklOR19DRkxBR1NfTExWTV9DT01QSUxFUiA9
IC1XZ2xvYmFsLWNvbnN0cnVjdG9ycyAtV2V4aXQtdGltZS1kZXN0cnVjdG9yczsKIAogQ0xBTkdf
V0FSTl9DWFgwWF9FWFRFTlNJT05TID0gTk87CiBERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBk
d2FyZjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgko
d29ya2luZyBjb3B5KQpAQCAtNSw5ICs1LDkgQEAgRVhQT1JUUwogICAgID8/JHN0cnRvZEAkMEFA
JDAwQFdURkBAWUFOUEJEUEFQQURAWgogICAgID8/JHN0cnRvZEAkMEFAJDBBQEBXVEZAQFlBTlBC
RFBBUEFEQFoKICAgICA/PzBBcnJheUJ1ZmZlclZpZXdAV1RGQEBJQUVAVj8kUGFzc1JlZlB0ckBW
QXJyYXlCdWZmZXJAV1RGQEBAMUBJQFoKKyAgICA/PzBDb2xsYXRvckBXVEZAQFFBRUBQQkRAWgog
ICAgID8/MENTdHJpbmdAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBC
RElAWgotICAgID8/MENvbGxhdG9yQFdURkBAUUFFQFBCREBaCiAgICAgPz8wRGF0ZUluc3RhbmNl
QEpTQ0BASUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wRGVmYXVs
dEdDQWN0aXZpdHlDYWxsYmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoKICAgICA/PzBEcm9wQWxs
TG9ja3NASlNMb2NrQEpTQ0BAUUFFQFc0SlNMb2NrQmVoYXZpb3JAMkBAWgpAQCAtMjUsMTAgKzI1
LDEwIEBAIEVYUE9SVFMKICAgICA/PzBTdHJpbmdPYmplY3RASlNDQEBJQUVAQUFWSlNHbG9iYWxE
YXRhQDFAUEFWU3RydWN0dXJlQDFAQFoKICAgICA/PzBTdHJ1Y3R1cmVASlNDQEBBQUVAQUFWSlNH
bG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBWSlNWYWx1ZUAxQEFCVlR5cGVJbmZvQDFA
UEJVQ2xhc3NJbmZvQDFAQFoKICAgICA/PzBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVAWFoKLSAg
ICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCREBaCi0gICAgPz8wVVN0cmluZ0BKU0NAQFFBRUBQQkRJ
QFoKICAgICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCX1dAWgogICAgID8/MFVTdHJpbmdASlNDQEBR
QUVAUEJfV0lAWgorICAgID8/MFVTdHJpbmdASlNDQEBRQUVAUEJEQFoKKyAgICA/PzBVU3RyaW5n
QEpTQ0BAUUFFQFBCRElAWgogICAgID8/MFdURlRocmVhZERhdGFAV1RGQEBRQUVAWFoKICAgICA/
PzBZYXJyUGF0dGVybkBZYXJyQEpTQ0BAUUFFQEFCVlVTdHJpbmdAMkBfTjFQQVBCREBaCiAgICAg
Pz8xQXJyYXlCdWZmZXJWaWV3QFdURkBAVUFFQFhaCkBAIC00MiwxNSArNDIsMTAgQEAgRVhQT1JU
UwogICAgID8/MVJlZkNvdW50ZWRMZWFrQ291bnRlckBXVEZAQFFBRUBYWgogICAgID8/MVNvdXJj
ZVByb3ZpZGVyQ2FjaGVASlNDQEBRQUVAWFoKICAgICA/PzFUaHJlYWRDb25kaXRpb25AV1RGQEBR
QUVAWFoKLSAgICA/PzFXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCiAgICAgPz8xV2Vha0hhbmRs
ZU93bmVyQEpTQ0BAVUFFQFhaCisgICAgPz8xV1RGVGhyZWFkRGF0YUBXVEZAQFFBRUBYWgogICAg
ID8/OEpTQ0BAWUFfTkFCVlVTdHJpbmdAMEAwQFoKICAgICA/PzhXVEZAQFlBX05BQlZDU3RyaW5n
QDBAMEBaCi0gICAgP0VjbWFTY3JpcHRDb252ZXJ0ZXJARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJA
ZG91YmxlX2NvbnZlcnNpb25AV1RGQEBTQUFCVjEyM0BYWgotICAgID9Ub0V4cG9uZW50aWFsQERv
dWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0
cmluZ0J1aWxkZXJAMjNAQFoKLSAgICA/VG9GaXhlZEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBk
b3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCi0gICAg
P1RvUHJlY2lzaW9uQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdU
RkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKLSAgICA/VG9TaG9ydGVzdEBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTlBBVlN0cmluZ0J1
aWxkZXJAMjNAQFoKICAgICA/YWJzb2x1dGVUaW1lVG9XYWl0VGltZW91dEludGVydmFsQFdURkBA
WUFLTkBaCiAgICAgP2FjdGl2aXR5Q2FsbGJhY2tASGVhcEBKU0NAQFFBRVBBVkdDQWN0aXZpdHlD
YWxsYmFja0AyQFhaCiAgICAgP2FkZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0
ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCREBaCkBAIC02OSw4ICs2NCw4IEBAIEVYUE9SVFMKICAg
ICA/YWRkU3RhdGljR2xvYmFsc0BKU0dsb2JhbE9iamVjdEBKU0NAQElBRVhQQVVHbG9iYWxQcm9w
ZXJ0eUluZm9AMTJASEBaCiAgICAgP2FsbG9jYXRlUHJvcGVydHlTdG9yYWdlQEpTT2JqZWN0QEpT
Q0BAUUFFWEFBVkpTR2xvYmFsRGF0YUAyQElJQFoKICAgICA/YWxsb2NhdGVTbG93Q2FzZUBNYXJr
ZWRBbGxvY2F0b3JASlNDQEBBQUVQQVhYWgotICAgID9hcHBlbmRAU3RyaW5nQnVpbGRlckBXVEZA
QFFBRVhQQkVJQFoKICAgICA/YXBwZW5kQFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYUEJfV0lAWgor
ICAgID9hcHBlbmRAU3RyaW5nQnVpbGRlckBXVEZAQFFBRVhQQkVJQFoKICAgICA/YXNjaWlAVVN0
cmluZ0BKU0NAQFFCRT9BVkNTdHJpbmdAV1RGQEBYWgogICAgID9hdHRhY2hARGVidWdnZXJASlND
QEBRQUVYUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID9icm9hZGNhc3RAVGhyZWFkQ29uZGl0
aW9uQFdURkBAUUFFWFhaCkBAIC03OCwxMCArNzMsMTAgQEAgRVhQT1JUUwogICAgID9idWZmZXJM
ZW5ndGhGb3JTdHJpbmdFeHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVhaCiAgICAg
P2J5dGVDb21waWxlQFlhcnJASlNDQEBZQT9BVj8kUGFzc093blB0ckBVQnl0ZWNvZGVQYXR0ZXJu
QFlhcnJASlNDQEBAV1RGQEBBQVVZYXJyUGF0dGVybkAxMkBQQVZCdW1wUG9pbnRlckFsbG9jYXRv
ckA0QEBaCiAgICAgP2J5dGVTaXplQFNvdXJjZVByb3ZpZGVyQ2FjaGVASlNDQEBRQkVJWFoKKyAg
ICA/Y2FsY3VsYXRlZEZ1bmN0aW9uTmFtZUBEZWJ1Z2dlckNhbGxGcmFtZUBKU0NAQFFCRT9BVlVT
dHJpbmdAMkBYWgogICAgID9jYWxjdWxhdGVEU1RPZmZzZXRAV1RGQEBZQU5OTkBaCiAgICAgP2Nh
bGN1bGF0ZVN0cmluZ0hhc2hBbmRMZW5ndGhGcm9tVVRGOEBVbmljb2RlQFdURkBAWUFJUEJEMEFB
STFAWgogICAgID9jYWxjdWxhdGVVVENPZmZzZXRAV1RGQEBZQUhYWgotICAgID9jYWxjdWxhdGVk
RnVuY3Rpb25OYW1lQERlYnVnZ2VyQ2FsbEZyYW1lQEpTQ0BAUUJFP0FWVVN0cmluZ0AyQFhaCiAg
ICAgP2NhbGxASlNDQEBZQT9BVkpTVmFsdWVAMUBQQVZFeGVjU3RhdGVAMUBWMjFAVzRDYWxsVHlw
ZUAxQEFCVENhbGxEYXRhQDFAMUFCVkFyZ0xpc3RAMUBAWgogICAgID9jYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvckBKU0NAQFlJX0pQQVZFeGVjU3RhdGVAMUBAWgogICAgID9jYWxsT25NYWlu
VGhyZWFkQFdURkBAWUFYUDZBWFBBWEBaMEBaCkBAIC05MSw4ICs4Niw4IEBAIEVYUE9SVFMKICAg
ICA/Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpT
R2xvYmFsRGF0YUAyQFBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/Y2hlY2tDdXJyZW50SWRlbnRp
ZmllclRhYmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZFeGVjU3RhdGVAMkBAWgogICAgID9jaGVj
a0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkpTR2xvYmFsRGF0
YUAyQEBaCi0gICAgP2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0ZUAxQEFCVlNvdXJj
ZUNvZGVAMUBQQVZKU1ZhbHVlQDFAQFoKICAgICA/Y2hlY2tzdW1ATUQ1QFdURkBAUUFFWEFBVj8k
VmVjdG9yQEUkMEJBQEAyQEBaCisgICAgP2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0
ZUAxQEFCVlNvdXJjZUNvZGVAMUBQQVZKU1ZhbHVlQDFAQFoKICAgICA/Y2xhc3NOYW1lQEpTT2Jq
ZWN0QEpTQ0BAU0E/QVZVU3RyaW5nQDJAUEJWMTJAQFoKICAgICA/Y2xlYXJAU291cmNlUHJvdmlk
ZXJDYWNoZUBKU0NAQFFBRVhYWgogICAgID9jbGVhckJ1aWx0aW5TdHJ1Y3R1cmVzQEpTR2xvYmFs
RGF0YUBKU0NAQFFBRVhYWgpAQCAtMTY0LDYgKzE1OSw3IEBAIEVYUE9SVFMKICAgICA/ZGlzcGxh
eU5hbWVASlNGdW5jdGlvbkBKU0NAQFFBRT9CVlVTdHJpbmdAMkBQQVZFeGVjU3RhdGVAMkBAWgog
ICAgID9kdG9hQFdURkBAWUFYUUFETkFBX05BQUhBQUlAWgogICAgID9kdW1wU2FtcGxlRGF0YUBK
U0dsb2JhbERhdGFASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJAQFoKKyAgICA/RWNtYVNjcmlwdENv
bnZlcnRlckBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNB
QUJWMTIzQFhaCiAgICAgP2VtcHR5QFN0cmluZ0ltcGxAV1RGQEBTQVBBVjEyQFhaCiAgICAgP2Vu
dW1lcmFibGVAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUJFX05YWgogICAgID9lcXVhbFVURjE2
V2l0aFVURjhAVW5pY29kZUBXVEZAQFlBX05QQl9XMFBCRDFAWgpAQCAtMTgzLDYgKzE3OSw3IEBA
IEVYUE9SVFMKICAgICA/ZmFzdFplcm9lZE1hbGxvY0BXVEZAQFlBUEFYSUBaCiAgICAgP2ZpbGxH
ZXR0ZXJQcm9wZXJ0eVNsb3RASlNPYmplY3RASlNDQEBBQUVYQUFWUHJvcGVydHlTbG90QDJAUEFW
PyRXcml0ZUJhcnJpZXJCYXNlQFc0VW5rbm93bkBKU0NAQEAyQEBaCiAgICAgP2ZpbmFsaXplQFdl
YWtIYW5kbGVPd25lckBKU0NAQFVBRVhWPyRIYW5kbGVAVzRVbmtub3duQEpTQ0BAQDJAUEFYQFoK
KyAgICA/ZmluZEFsbG9jYXRvckBXZWFrSGVhcEBKU0NAQEFBRVBBVUZyZWVDZWxsQFdlYWtCbG9j
a0AyQFhaCiAgICAgP2ZpbmlzaENyZWF0aW9uQERhdGVJbnN0YW5jZUBKU0NAQElBRVhBQVZKU0ds
b2JhbERhdGFAMkBOQFoKICAgICA/ZmluaXNoQ3JlYXRpb25ASW50ZXJuYWxGdW5jdGlvbkBKU0NA
QElBRVhBQVZKU0dsb2JhbERhdGFAMkBBQlZJZGVudGlmaWVyQDJAQFoKICAgICA/ZmluaXNoQ3Jl
YXRpb25ASlNBcnJheUBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBJQFoKQEAgLTIyMCwxMCAr
MjE3LDEwIEBAIEVYUE9SVFMKICAgICA/Z2xvYmFsRXhlY0BKU0dsb2JhbE9iamVjdEBKU0NAQFFB
RVBBVkV4ZWNTdGF0ZUAyQFhaCiAgICAgP2dsb2JhbE9iamVjdENvdW50QEhlYXBASlNDQEBRQUVJ
WFoKICAgICA/Z3Jvd0BIYW5kbGVIZWFwQEpTQ0BAQUFFWFhaCisgICAgP2hhc2hTbG93Q2FzZUBT
dHJpbmdJbXBsQFdURkBAQUJFSVhaCiAgICAgP2hhc0luc3RhbmNlQEpTT2JqZWN0QEpTQ0BAU0Ff
TlBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFZKU1ZhbHVlQDJAMkBaCiAgICAgP2hhc1Byb3BlcnR5QEpT
T2JqZWN0QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBBQlZJZGVudGlmaWVyQDJAQFoKICAgICA/
aGFzUHJvcGVydHlASlNPYmplY3RASlNDQEBRQkVfTlBBVkV4ZWNTdGF0ZUAyQElAWgotICAgID9o
YXNoU2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRUlYWgogICAgID9oZWFwQEhlYXBASlNDQEBT
QVBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/aW5jcmVtZW50QFJlZkNvdW50ZWRMZWFrQ291bnRl
ckBXVEZAQFFBRVhYWgogICAgID9pbml0QEF0b21pY1N0cmluZ0BXVEZAQFNBWFhaCkBAIC0zMTEs
MTAgKzMwOCwxMCBAQCBFWFBPUlRTCiAgICAgP3NldE9yZGVyTG93ZXJGaXJzdEBDb2xsYXRvckBX
VEZAQFFBRVhfTkBaCiAgICAgP3NldFByb3RvdHlwZUBKU09iamVjdEBKU0NAQFFBRVhBQVZKU0ds
b2JhbERhdGFAMkBWSlNWYWx1ZUAyQEBaCiAgICAgP3NldFNldHRlckBQcm9wZXJ0eURlc2NyaXB0
b3JASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgorICAgID9zZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9y
QEpTQ0BAUUJFP0FWSlNWYWx1ZUAyQFhaCiAgICAgP3NldFVuZGVmaW5lZEBQcm9wZXJ0eURlc2Ny
aXB0b3JASlNDQEBRQUVYWFoKICAgICA/c2V0VXBTdGF0aWNGdW5jdGlvblNsb3RASlNDQEBZQV9O
UEFWRXhlY1N0YXRlQDFAUEJWSGFzaEVudHJ5QDFAUEFWSlNPYmplY3RAMUBBQlZJZGVudGlmaWVy
QDFAQUFWUHJvcGVydHlTbG90QDFAQFoKICAgICA/c2V0V3JpdGFibGVAUHJvcGVydHlEZXNjcmlw
dG9yQEpTQ0BAUUFFWF9OQFoKLSAgICA/c2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFC
RT9BVkpTVmFsdWVAMkBYWgogICAgID9zaHJpbmtUb0ZpdEBTdHJpbmdCdWlsZGVyQFdURkBAUUFF
WFhaCiAgICAgP3NpZ25hbEBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVYWFoKICAgICA/c2luZ2xl
Q2hhcmFjdGVyU3RyaW5nUmVwQFNtYWxsU3RyaW5nc0BKU0NAQFFBRVBBVlN0cmluZ0ltcGxAV1RG
QEBFQFoKQEAgLTM0MCwxMSArMzM3LDE1IEBAIEVYUE9SVFMKICAgICA/dGxzS2V5Q291bnRAV1RG
QEBZQUFBSlhaCiAgICAgP3Rsc0tleXNAV1RGQEBZQVBBS1haCiAgICAgP3RvQm9vbGVhbkBKU1N0
cmluZ0BKU0NAQFFCRV9OUEFWRXhlY1N0YXRlQDJAQFoKKyAgICA/VG9FeHBvbmVudGlhbEBEb3Vi
bGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJp
bmdCdWlsZGVyQDIzQEBaCisgICAgP1RvRml4ZWRARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91
YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgogICAgID90
b0ludDMyQEpTQ0BAWUFITkBaCiAgICAgP3RvSW50ZWdlckBKU1ZhbHVlQEpTQ0BAUUJFTlBBVkV4
ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyU2xvd0Nhc2VASlNWYWx1ZUBKU0NAQEFCRU5QQVZF
eGVjU3RhdGVAMkBAWgogICAgID90b09iamVjdEBKU0NlbGxASlNDQEBRQkVQQVZKU09iamVjdEAy
QFBBVkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKICAgICA/dG9PYmplY3RTbG93
Q2FzZUBKU1ZhbHVlQEpTQ0BAQUJFUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0ds
b2JhbE9iamVjdEAyQEBaCisgICAgP1RvUHJlY2lzaW9uQERvdWJsZVRvU3RyaW5nQ29udmVydGVy
QGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKKyAg
ICA/VG9TaG9ydGVzdEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBX
VEZAQFFCRV9OTlBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKICAgICA/dG9TdHJpbmdASlNPYmplY3RA
SlNDQEBRQkVQQVZKU1N0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvU3RyaW5nRGVj
aW1hbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKICAgICA/dG9TdHJpbmdFeHBvbmVu
dGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjEzMCw2ICsyMTMwLDM0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0Jsb2NrLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrQmxvY2suaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFr
SGVhcC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGhlYXBcV2Vha0hlYXAuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrSW1wbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtIYW5kbGVPd25lci5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcV2Vha0hhbmRsZU93bmVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcSGFuZGxlU3RhY2suY3BwIgogCQkJCT4KIAkJCTwv
RmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzEyLDcgKzMxMiwxNCBAQAogCQkxNEM1MjQy
QjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1YnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTY1ODFBMEY0RTM2RjQwMDAxNTBGRCAvKiBKSVRTdHVi
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyRjNEODEzOUY0QkUyMDA0OTEwMzEg
LyogTWFya2VkU3BhY2UuY3BwICovOyB9OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyog
TWFya2VkU3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0RTg0RjlFMTRFRTFBQ0Mw
MEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTRFODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAg
Ki87IH07CisJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0Mw
MEQ2RDVENCAvKiBXZWFrQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFODRGOUIx
NEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCAqLzsgfTsKKwkJMTRFODRGQTExNEVFMUFD
QzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEU4NEZBMjE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlEMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTlE
MTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc1NkZDNjBFMjAzMUIy
MDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwICovOyB9OworCQkxNEY3MjU2
NTE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjcyNTYzMTRFRTI2NUUwMEIxNjUyQiAv
KiBXZWFrSGFuZGxlT3duZXIuY3BwICovOyB9OworCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIg
LyogV2Vha0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRGOTc0
NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8q
IEhlYXBSb290VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi87IH07CiAJCTQ1MTUzOUI5MTJE
Qzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NTE1MzlCODEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MjUsNyArOTMyLDE0
IEBACiAJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBY3RpdmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0REE4MThGMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBY3RpdmF0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0Ey
IC8qIEpTR2xvYmFsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTR2xvYmFsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRF
ODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWFrQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNEU4NEY5QTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxNEU4NEY5QjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0hlYXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0hlYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUQxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjI1MjU2MEQwOEREOEQwMDRFQ0ZGRiAvKiBKU1Zhcmlh
YmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFyaWFibGVP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRGNzI1NjMxNEVFMjY1RTAw
QjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWFrSGFuZGxlT3duZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtIYW5kbGVPd25lci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNEY5NzQ0NjEzOEM4NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RW
aXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBSb290VmlzaXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0MjBCQTlFOEE3MDA4MUU5
RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBW
ZXJzaW9uLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0MzBC
QTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gSmF2YVNjcmlwdENvcmUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY4LDYgKzE1ODIsMTMgQEAKIAkJCQkwRkM4MTUxMjE0MDUxMTg2
MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovLAogCQkJCTBGQzgxNTE0MTQwNTExOEQw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovLAogCQkJCTE0MkUzMTMzMTM0RkYwQTYwMEFG
QURCNSAvKiBXZWFrLmggKi8sCisJCQkJMTRFODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtC
bG9jay5jcHAgKi8sCisJCQkJMTRFODRGOUExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5o
ICovLAorCQkJCTE0RjcyNTYzMTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3Bw
ICovLAorCQkJCTE0RjcyNTY0MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCAq
LywKKwkJCQkxNEU4NEY5QjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3BwICovLAorCQkJ
CTE0RTg0RjlDMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5oICovLAorCQkJCTE0RTg0RjlE
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oICovLAogCQkJCTBGMjQyREE1MTNGM0IxQkIw
MDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8sCiAJCQkJMEZDODE1MDgxNDA0
M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICovLAogCQkJCTBGQzgxNTA5
MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8sCkBAIC0yNTA1LDYg
KzI1MjYsMTAgQEAKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQw
MEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0OTcyMDkxMTRFQjgzMTUwMEZFQjFCNyAvKiBQYXNzV2Vhay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMTRFODRGQTExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggaW4g
SGVhZGVycyAqLywKKwkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBp
biBIZWFkZXJzICovLAorCQkJCTE0RjcyNTY2MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxl
T3duZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1
QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9y
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDYwLDYgKzMwODUsOSBAQAogCQkJCTg2QjU4MjY5MTRE
Mjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
QjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRFODRGOUUxNEVFMUFDQzAwRDZENUQ0IC8qIFdl
YWtCbG9jay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQg
LyogV2Vha0hlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRGNzI1NjUxNEVFMjY1RTAwQjE2
NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0
RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
RkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTVCMTRFRjkwQUQwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNiArNTksOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNl
OjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSooKSBjb25zdCB7IHJldHVybiAobV9zbG90ICYmICptX3Nsb3QpID8gcmVpbnRlcnByZXRfY2Fz
dDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOyB9CiAKKyAgICBIYW5kbGVTbG90IHNsb3Qo
KSBjb25zdCB7IHJldHVybiBtX3Nsb3Q7IH0KKwogcHJvdGVjdGVkOgogICAgIEhhbmRsZUJhc2Uo
SGFuZGxlU2xvdCBzbG90KQogICAgICAgICA6IG1fc2xvdChzbG90KQpAQCAtNjcsNyArNjksNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdm9pZCBzd2FwKEhhbmRsZUJhc2UmIG90aGVyKSB7IHN0
ZDo6c3dhcChtX3Nsb3QsIG90aGVyLm1fc2xvdCk7IH0KIAotICAgIEhhbmRsZVNsb3Qgc2xvdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2xvdDsgfQogICAgIHZvaWQgc2V0U2xvdChIYW5kbGVTbG90IHNs
b3QpCiAgICAgewogICAgICAgICBtX3Nsb3QgPSBzbG90OwpAQCAtMTMzLDYgKzEzNCw3IEBAIHBy
b3RlY3RlZDoKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEhhbmRsZUhlYXA7Cisg
ICAgZnJpZW5kIGNsYXNzIFdlYWtCbG9jazsKIAogICAgIHN0YXRpYyBIYW5kbGU8VD4gd3JhcFNs
b3QoSGFuZGxlU2xvdCBzbG90KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZUhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZUhlYXAuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTkgKzMxLDYg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVPd25l
cigpCi17Ci19Ci0KLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFdlYWtIYW5kbGVPd25lcjo6ZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKikKLXsKLX0KLQogSGFuZGxlSGVhcDo6SGFuZGxlSGVhcChKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCiAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fbmV4
dFRvRmluYWxpemUoMCkKQEAgLTczLDYyICs2MCw2IEBAIHZvaWQgSGFuZGxlSGVhcDo6dmlzaXRT
dHJvbmdIYW5kbGVzKEhlYXAKICAgICB9CiB9CiAKLXZvaWQgSGFuZGxlSGVhcDo6dmlzaXRXZWFr
SGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKLXsKLSAgICBTbG90Vmlz
aXRvciYgdmlzaXRvciA9IGhlYXBSb290VmlzaXRvci52aXNpdG9yKCk7Ci0KLSAgICBOb2RlKiBl
bmQgPSBtX3dlYWtMaXN0LmVuZCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2Vha0xpc3Qu
YmVnaW4oKTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBub2RlLT5uZXh0KCkpIHsKLSNpZiBFTkFCTEUo
R0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFpc1ZhbGlkV2Vha05vZGUobm9kZSkpCi0gICAg
ICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IG5vZGUtPnNs
b3QoKS0+YXNDZWxsKCk7Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyID0g
bm9kZS0+d2Vha093bmVyKCk7Ci0gICAgICAgIGlmICghd2Vha093bmVyKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgaWYgKCF3ZWFrT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSwgbm9kZS0+d2Vh
a093bmVyQ29udGV4dCgpLCB2aXNpdG9yKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIGhlYXBSb290VmlzaXRvci52aXNpdChub2RlLT5zbG90KCkpOwotICAgIH0KLX0KLQotdm9p
ZCBIYW5kbGVIZWFwOjpmaW5hbGl6ZVdlYWtIYW5kbGVzKCkKLXsKLSAgICBOb2RlKiBlbmQgPSBt
X3dlYWtMaXN0LmVuZCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2Vha0xpc3QuYmVnaW4o
KTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBtX25leHRUb0ZpbmFsaXplKSB7Ci0gICAgICAgIG1fbmV4
dFRvRmluYWxpemUgPSBub2RlLT5uZXh0KCk7Ci0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0g
ICAgICAgIGlmICghaXNWYWxpZFdlYWtOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsK
LSNlbmRpZgotCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IG5vZGUtPnNsb3QoKS0+YXNDZWxsKCk7
Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGlmIChXZWFrSGFuZGxlT3duZXIqIHdlYWtPd25lciA9IG5vZGUtPndlYWtP
d25lcigpKSB7Ci0gICAgICAgICAgICB3ZWFrT3duZXItPmZpbmFsaXplKEhhbmRsZTxVbmtub3du
Pjo6d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSwgbm9kZS0+d2Vha093bmVyQ29udGV4dCgpKTsKLSAg
ICAgICAgICAgIGlmIChtX25leHRUb0ZpbmFsaXplICE9IG5vZGUtPm5leHQoKSkgLy8gT3duZXIg
ZGVhbGxvY2F0ZWQgbm9kZS4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
I2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBpZiAoIWlzTGl2ZU5vZGUobm9kZSkp
Ci0gICAgICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgICAgICpub2RlLT5zbG90KCkgPSBK
U1ZhbHVlKCk7Ci0gICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUp
OwotICAgICAgICBtX2ltbWVkaWF0ZUxpc3QucHVzaChub2RlKTsKLSAgICB9Ci0gICAgCi0gICAg
bV9uZXh0VG9GaW5hbGl6ZSA9IDA7Ci19Ci0KIHZvaWQgSGFuZGxlSGVhcDo6d3JpdGVCYXJyaWVy
KEhhbmRsZVNsb3Qgc2xvdCwgY29uc3QgSlNWYWx1ZSYgdmFsdWUpCiB7CiAgICAgLy8gRm9yYmlk
IGFzc2lnbm1lbnQgdG8gaGFuZGxlcyBkdXJpbmcgdGhlIGZpbmFsaXphdGlvbiBwaGFzZSwgc2lu
Y2UgaXQgd291bGQgdmlvbGF0ZSBtYW55IEdDIGludmFyaWFudHMuCkBAIC0xNTAsMTUgKzgxLDYg
QEAgdm9pZCBIYW5kbGVIZWFwOjp3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPmlzV2VhaygpKSB7Ci0gICAgICAgIG1fd2Vha0xp
c3QucHVzaChub2RlKTsKLSNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFp
c0xpdmVOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgbV9zdHJvbmdMaXN0LnB1c2gobm9kZSk7CiAjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCiAgICAgaWYgKCFpc0xpdmVOb2RlKG5vZGUpKQpAQCAtMTg4LDI0ICsx
MTAsNiBAQCBib29sIEhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0KLWJvb2wgSGFuZGxlSGVhcDo6aXNWYWxpZFdlYWtOb2Rl
KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFpc0xpdmVOb2RlKG5vZGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFub2RlLT5pc1dlYWsoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9ICpub2RlLT5zbG90KCk7Ci0gICAgaWYgKCF2YWx1ZSB8
fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTQ2VsbCog
Y2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgIGlmICghY2VsbCB8fCAhY2VsbC0+c3RydWN0dXJl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQogI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hh
bmRsZUhlYXAuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsNiBAQCBjbGFzcyBK
U0dsb2JhbERhdGE7CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKLWNsYXNz
IEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+V2Vha0hhbmRsZU93bmVyKCk7Ci0gICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0
KTsKLX07Ci0KIGNsYXNzIEhhbmRsZUhlYXAgewogcHVibGljOgogICAgIHN0YXRpYyBIYW5kbGVI
ZWFwKiBoZWFwRm9yKEhhbmRsZVNsb3QpOwpAQCAtNTgsMjAgKzUxLDEwIEBAIHB1YmxpYzoKICAg
ICBIYW5kbGVTbG90IGFsbG9jYXRlKCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3Qp
OwogCi0gICAgdm9pZCBtYWtlV2VhayhIYW5kbGVTbG90LCBXZWFrSGFuZGxlT3duZXIqID0gMCwg
dm9pZCogY29udGV4dCA9IDApOwotICAgIEhhbmRsZVNsb3QgY29weVdlYWsoSGFuZGxlU2xvdCk7
Ci0KICAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2
b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBmaW5hbGl6
ZVdlYWtIYW5kbGVzKCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmll
cihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7CiAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgYm9vbCBoYXNXZWFrT3duZXIoSGFuZGxlU2xvdCwgV2Vha0hhbmRsZU93bmVyKik7Ci0gICAg
Ym9vbCBoYXNGaW5hbGl6ZXIoSGFuZGxlU2xvdCk7Ci0jZW5kaWYKLQogICAgIHVuc2lnbmVkIHBy
b3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hTdHJvbmdIYW5kbGUoRnVuY3RvciYsIGNvbnN0IEhhc2hDb3VudGVk
U2V0PEpTQ2VsbCo+JiBza2lwU2V0KTsKQEAgLTg1LDEyICs2OCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIEhhbmRsZVNsb3Qgc2xvdCgpOwogICAgICAgICBIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKCk7
CiAKLSAgICAgICAgdm9pZCBtYWtlV2VhayhXZWFrSGFuZGxlT3duZXIqLCB2b2lkKiBjb250ZXh0
KTsKLSAgICAgICAgYm9vbCBpc1dlYWsoKTsKLSAgICAgICAgCi0gICAgICAgIFdlYWtIYW5kbGVP
d25lciogd2Vha093bmVyKCk7Ci0gICAgICAgIHZvaWQqIHdlYWtPd25lckNvbnRleHQoKTsKLQog
ICAgICAgICB2b2lkIHNldFByZXYoTm9kZSopOwogICAgICAgICBOb2RlKiBwcmV2KCk7CiAKQEAg
LTk4LDEyICs3NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5leHQoKTsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFdlYWtIYW5kbGVPd25lciogZW1wdHlXZWFrT3duZXIoKTsKLQogICAg
ICAgICBKU1ZhbHVlIG1fdmFsdWU7CiAgICAgICAgIEhhbmRsZUhlYXAqIG1faGFuZGxlSGVhcDsK
LSAgICAgICAgV2Vha0hhbmRsZU93bmVyKiBtX3dlYWtPd25lcjsKLSAgICAgICAgdm9pZCogbV93
ZWFrT3duZXJDb250ZXh0OwogICAgICAgICBOb2RlKiBtX3ByZXY7CiAgICAgICAgIE5vZGUqIG1f
bmV4dDsKICAgICB9OwpAQCAtMTE0LDcgKzg3LDYgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGdyb3coKTsKICAgICAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikgfHwg
IUFTU0VSVF9ESVNBQkxFRAotICAgIGJvb2wgaXNWYWxpZFdlYWtOb2RlKE5vZGUqKTsKICAgICBi
b29sIGlzTGl2ZU5vZGUoTm9kZSopOwogI2VuZGlmCiAKQEAgLTEyMiw3ICs5NCw2IEBAIHByaXZh
dGU6CiAgICAgQmxvY2tTdGFjazxOb2RlPiBtX2Jsb2NrU3RhY2s7CiAKICAgICBTZW50aW5lbExp
bmtlZExpc3Q8Tm9kZT4gbV9zdHJvbmdMaXN0OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2Rl
PiBtX3dlYWtMaXN0OwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPiBtX2ltbWVkaWF0ZUxp
c3Q7CiAgICAgU2luZ2x5TGlua2VkTGlzdDxOb2RlPiBtX2ZyZWVMaXN0OwogICAgIE5vZGUqIG1f
bmV4dFRvRmluYWxpemU7CkBAIC0xNzUsNDkgKzE0Niw4IEBAIGlubGluZSB2b2lkIEhhbmRsZUhl
YXA6OmRlYWxsb2NhdGUoSGFuZGwKICAgICBtX2ZyZWVMaXN0LnB1c2gobm9kZSk7CiB9CiAKLWlu
bGluZSBIYW5kbGVTbG90IEhhbmRsZUhlYXA6OmNvcHlXZWFrKEhhbmRsZVNsb3Qgb3RoZXIpCi17
Ci0gICAgTm9kZSogbm9kZSA9IHRvTm9kZShhbGxvY2F0ZSgpKTsKLSAgICBub2RlLT5tYWtlV2Vh
ayh0b05vZGUob3RoZXIpLT53ZWFrT3duZXIoKSwgdG9Ob2RlKG90aGVyKS0+d2Vha093bmVyQ29u
dGV4dCgpKTsKLSAgICB3cml0ZUJhcnJpZXIobm9kZS0+c2xvdCgpLCAqb3RoZXIpOwotICAgICpu
b2RlLT5zbG90KCkgPSAqb3RoZXI7Ci0gICAgcmV0dXJuIHRvSGFuZGxlKG5vZGUpOwotfQotCi1p
bmxpbmUgdm9pZCBIYW5kbGVIZWFwOjptYWtlV2VhayhIYW5kbGVTbG90IGhhbmRsZSwgV2Vha0hh
bmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgLy8gRm9yYmlkIGFz
c2lnbm1lbnQgdG8gaGFuZGxlcyBkdXJpbmcgdGhlIGZpbmFsaXphdGlvbiBwaGFzZSwgc2luY2Ug
aXQgd291bGQgdmlvbGF0ZSBtYW55IEdDIGludmFyaWFudHMuCi0gICAgLy8gRmlsZSBhIGJ1ZyB3
aXRoIHN0YWNrIHRyYWNlIGlmIHlvdSBoaXQgdGhpcy4KLSAgICBpZiAobV9uZXh0VG9GaW5hbGl6
ZSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGhhbmRsZSk7Ci0g
ICAgbm9kZS0+bWFrZVdlYWsod2Vha093bmVyLCBjb250ZXh0KTsKLQotICAgIFNlbnRpbmVsTGlu
a2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUpOwotICAgIGlmICghKmhhbmRsZSB8fCAhaGFuZGxl
LT5pc0NlbGwoKSkgewotICAgICAgICBtX2ltbWVkaWF0ZUxpc3QucHVzaChub2RlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fd2Vha0xpc3QucHVzaChub2RlKTsKLX0KLQotI2lm
ICFBU1NFUlRfRElTQUJMRUQKLWlubGluZSBib29sIEhhbmRsZUhlYXA6Omhhc1dlYWtPd25lcihI
YW5kbGVTbG90IGhhbmRsZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIpCi17Ci0gICAgcmV0
dXJuIHRvTm9kZShoYW5kbGUpLT53ZWFrT3duZXIoKSA9PSB3ZWFrT3duZXI7Ci19Ci0KLWlubGlu
ZSBib29sIEhhbmRsZUhlYXA6Omhhc0ZpbmFsaXplcihIYW5kbGVTbG90IGhhbmRsZSkKLXsKLSAg
ICByZXR1cm4gdG9Ob2RlKGhhbmRsZSktPndlYWtPd25lcigpOwotfQotI2VuZGlmCi0KIGlubGlu
ZSBIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKEhhbmRsZUhlYXAqIGhhbmRsZUhlYXApCiAgICAgOiBt
X2hhbmRsZUhlYXAoaGFuZGxlSGVhcCkKLSAgICAsIG1fd2Vha093bmVyKDApCi0gICAgLCBtX3dl
YWtPd25lckNvbnRleHQoMCkKICAgICAsIG1fcHJldigwKQogICAgICwgbV9uZXh0KDApCiB7CkBA
IC0yMjUsOCArMTU1LDYgQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVh
cAogCiBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShXVEY6OlNlbnRpbmVsVGFnKQogICAg
IDogbV9oYW5kbGVIZWFwKDApCi0gICAgLCBtX3dlYWtPd25lcigwKQotICAgICwgbV93ZWFrT3du
ZXJDb250ZXh0KDApCiAgICAgLCBtX3ByZXYoMCkKICAgICAsIG1fbmV4dCgwKQogewpAQCAtMjQy
LDI4ICsxNzAsNiBAQCBpbmxpbmUgSGFuZGxlSGVhcCogSGFuZGxlSGVhcDo6Tm9kZTo6aGFuCiAg
ICAgcmV0dXJuIG1faGFuZGxlSGVhcDsKIH0KIAotaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6Tm9k
ZTo6bWFrZVdlYWsoV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCi17
Ci0gICAgbV93ZWFrT3duZXIgPSB3ZWFrT3duZXIgPyB3ZWFrT3duZXIgOiBlbXB0eVdlYWtPd25l
cigpOwotICAgIG1fd2Vha093bmVyQ29udGV4dCA9IGNvbnRleHQ7Ci19Ci0KLWlubGluZSBib29s
IEhhbmRsZUhlYXA6Ok5vZGU6OmlzV2VhaygpCi17Ci0gICAgcmV0dXJuIG1fd2Vha093bmVyOyAv
LyBUcnVlIGZvciBlbXB0eVdlYWtPd25lcigpLgotfQotCi1pbmxpbmUgV2Vha0hhbmRsZU93bmVy
KiBIYW5kbGVIZWFwOjpOb2RlOjp3ZWFrT3duZXIoKQotewotICAgIHJldHVybiBtX3dlYWtPd25l
ciA9PSBlbXB0eVdlYWtPd25lcigpID8gMCA6IG1fd2Vha093bmVyOyAvLyAwIGZvciBlbXB0eVdl
YWtPd25lcigpLgotfQotCi1pbmxpbmUgdm9pZCogSGFuZGxlSGVhcDo6Tm9kZTo6d2Vha093bmVy
Q29udGV4dCgpCi17Ci0gICAgQVNTRVJUKHdlYWtPd25lcigpKTsKLSAgICByZXR1cm4gbV93ZWFr
T3duZXJDb250ZXh0OwotfQotCiBpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjpOb2RlOjpzZXRQcmV2
KE5vZGUqIHByZXYpCiB7CiAgICAgbV9wcmV2ID0gcHJldjsKQEAgLTI4NCwxMyArMTkwLDYgQEAg
aW5saW5lIEhhbmRsZUhlYXA6Ok5vZGUqIEhhbmRsZUhlYXA6Ok5vZAogICAgIHJldHVybiBtX25l
eHQ7CiB9CiAKLS8vIFNlbnRpbmVsIHRvIGluZGljYXRlIHRoYXQgYSBub2RlIGlzIHdlYWssIGJ1
dCBpdHMgb3duZXIgaGFzIG5vIG1lYW5pbmdmdWwKLS8vIGNhbGxiYWNrcy4gVGhpcyBhbGxvd3Mg
dXMgdG8gb3B0aW1pemUgYnkgc2tpcHBpbmcgc3VjaCBub2Rlcy4KLWlubGluZSBXZWFrSGFuZGxl
T3duZXIqIEhhbmRsZUhlYXA6Ok5vZGU6OmVtcHR5V2Vha093bmVyKCkKLXsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxXZWFrSGFuZGxlT3duZXIqPigtMSk7Ci19Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgSGFuZGxlSGVhcDo6Zm9yRWFjaFN0cm9uZ0hhbmRsZShGdW5j
dG9yJiBmdW5jdG9yLCBjb25zdCBIYXNoQ291bnRlZFNldDxKU0NlbGwqPiYgc2tpcFNldCkKIHsK
ICAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMywxOCArMzEzLDE3IEBAIEhl
YXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEKICAgICA6IG1faGVhcFNpemUo
aGVhcFNpemUpCiAgICAgLCBtX21pbkJ5dGVzUGVyQ3ljbGUoaGVhcFNpemVGb3JIaW50KGhlYXBT
aXplKSkKICAgICAsIG1fbGFzdEZ1bGxHQ1NpemUoMCkKLSAgICAsIG1fd2F0ZXJNYXJrKDApCiAg
ICAgLCBtX2hpZ2hXYXRlck1hcmsobV9taW5CeXRlc1BlckN5Y2xlKQogICAgICwgbV9vcGVyYXRp
b25JblByb2dyZXNzKE5vT3BlcmF0aW9uKQogICAgICwgbV9vYmplY3RTcGFjZSh0aGlzKQogICAg
ICwgbV9zdG9yYWdlU3BhY2UodGhpcykKICAgICAsIG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxk
UXVpdChmYWxzZSkKLSAgICAsIG1fZXh0cmFDb3N0KDApCiAgICAgLCBtX21hcmtMaXN0U2V0KDAp
CiAgICAgLCBtX2FjdGl2aXR5Q2FsbGJhY2soRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3Jl
YXRlKHRoaXMpKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQogICAgICwgbV9zaGFyZWRE
YXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX3Nsb3RWaXNpdG9yKG1fc2hhcmVkRGF0YSkKKyAgICAs
IG1fd2Vha0hlYXAodGhpcykKICAgICAsIG1faGFuZGxlSGVhcChnbG9iYWxEYXRhKQogICAgICwg
bV9pc1NhZmVUb0NvbGxlY3QoZmFsc2UpCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
QEAgLTM3Niw3ICszNzUsNyBAQCB2b2lkIEhlYXA6OmRlc3Ryb3koKQogICAgIGNhbm9uaWNhbGl6
ZUNlbGxMaXZlbmVzc0RhdGEoKTsKICAgICBjbGVhck1hcmtzKCk7CiAKLSAgICBtX2hhbmRsZUhl
YXAuZmluYWxpemVXZWFrSGFuZGxlcygpOworICAgIG1fd2Vha0hlYXAuZmluYWxpemVBbGwoKTsK
ICAgICBtX2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5maW5hbGl6ZVNtYWxsU3RyaW5ncygpOwog
ICAgIHNocmluaygpOwogICAgIG1fc3RvcmFnZVNwYWNlLmRlc3Ryb3koKTsKQEAgLTQ2Niw5ICs0
NjUsNyBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdFNsb3dDYXNlCiAgICAgLy8g
aWYgYSBsYXJnZSB2YWx1ZSBzdXJ2aXZlcyBvbmUgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGVyZSBp
cyBub3QgbXVjaCBwb2ludCB0bwogICAgIC8vIGNvbGxlY3RpbmcgbW9yZSBmcmVxdWVudGx5IGFz
IGxvbmcgYXMgaXQgc3RheXMgYWxpdmUuCiAKLSAgICBpZiAobV9leHRyYUNvc3QgPiBtYXhFeHRy
YUNvc3QgJiYgbV9leHRyYUNvc3QgPiBoaWdoV2F0ZXJNYXJrKCkgLyAyKQotICAgICAgICBjb2xs
ZWN0QWxsR2FyYmFnZSgpOwotICAgIG1fZXh0cmFDb3N0ICs9IGNvc3Q7CisgICAgYWRkVG9XYXRl
ck1hcmsoY29zdCk7CiB9CiAKIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCkBAIC02ODcs
MTIgKzY4NCwxMiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICNlbmRpZgog
ICAgIH0KIAotICAgIC8vIFdlYWsgaGFuZGxlcyBtdXN0IGJlIG1hcmtlZCBsYXN0LCBiZWNhdXNl
IHRoZWlyIG93bmVycyB1c2UgdGhlIHNldCBvZgotICAgIC8vIG9wYXF1ZSByb290cyB0byBkZXRl
cm1pbmUgcmVhY2hhYmlsaXR5LgorICAgIC8vIFdlYWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtl
ZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVwZW5kcyBvbgorICAgIC8vIHRoZSBsaXZl
bmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgogICAgIHsKLSAgICAgICAgR0NQ
SEFTRShWaXNpdGluZ1dlYWtIYW5kbGVzKTsKKyAgICAgICAgR0NQSEFTRShWaXNpdGluZ0xpdmVX
ZWFrSGFuZGxlcyk7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBtX2hhbmRs
ZUhlYXAudmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICAgICAgbV93
ZWFrSGVhcC52aXNpdExpdmVXZWFrSW1wbHMoaGVhcFJvb3RWaXNpdG9yKTsKICAgICAgICAgICAg
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzA1LDYgKzcwMiwyMCBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KKworICAgIHsKKyAgICAgICAgR0NQSEFTRShWaXNpdGluZ0RlYWRXZWFrSGFuZGxlcyk7Cisg
ICAgICAgIG1fd2Vha0hlYXAudmlzaXREZWFkV2Vha0ltcGxzKGhlYXBSb290VmlzaXRvcik7CisK
KyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKHZpc2l0
b3IpOworICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOworI2lmIEVOQUJMRShQ
QVJBTExFTF9HQykKKyAgICAgICAgICAgIHZpc2l0b3IuZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNp
dG9yOjpNYXN0ZXJEcmFpbik7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKwogICAgIEdDQ09V
TlRFUihWaXNpdGVkVmFsdWVDb3VudCwgdmlzaXRvci52aXNpdENvdW50KCkpOwogCiAgICAgdmlz
aXRvci5kb25lQ29weWluZygpOwpAQCAtODA1LDcgKzgxNiw3IEBAIHZvaWQgSGVhcDo6Y29sbGVj
dChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAgICAgCiAgICAgewogICAgICAgICBHQ1BIQVNF
KEZpbmFsaXplV2Vha0hhbmRsZXMpOwotICAgICAgICBtX2hhbmRsZUhlYXAuZmluYWxpemVXZWFr
SGFuZGxlcygpOworICAgICAgICBtX3dlYWtIZWFwLnN3ZWVwKCk7CiAgICAgICAgIG1fZ2xvYmFs
RGF0YS0+c21hbGxTdHJpbmdzLmZpbmFsaXplU21hbGxTdHJpbmdzKCk7CiAgICAgfQogICAgIApA
QCAtODM2LDcgKzg0Nyw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRv
Z2cKICAgICBzaXplX3QgcHJvcG9ydGlvbmFsQnl0ZXMgPSAyICogbmV3U2l6ZTsKICAgICBpZiAo
ZnVsbEdDKSB7CiAgICAgICAgIG1fbGFzdEZ1bGxHQ1NpemUgPSBuZXdTaXplOwotICAgICAgICBz
ZXRIaWdoV2F0ZXJNYXJrKG1heChwcm9wb3J0aW9uYWxCeXRlcywgbV9taW5CeXRlc1BlckN5Y2xl
KSk7CisgICAgICAgIG1faGlnaFdhdGVyTWFyayA9IG1heChwcm9wb3J0aW9uYWxCeXRlcywgbV9t
aW5CeXRlc1BlckN5Y2xlKTsKICAgICB9CiAgICAgZG91YmxlIGxhc3RHQ0VuZFRpbWUgPSBXVEY6
OmN1cnJlbnRUaW1lKCk7CiAgICAgbV9sYXN0R0NMZW5ndGggPSBsYXN0R0NFbmRUaW1lIC0gbGFz
dEdDU3RhcnRUaW1lOwpAQCAtODUyLDggKzg2Myw4IEBAIHZvaWQgSGVhcDo6Y2Fub25pY2FsaXpl
Q2VsbExpdmVuZXNzRGF0YSgKIAogdm9pZCBIZWFwOjpyZXNldEFsbG9jYXRvcnMoKQogewotICAg
IG1fZXh0cmFDb3N0ID0gMDsKICAgICBtX29iamVjdFNwYWNlLnJlc2V0QWxsb2NhdG9ycygpOwor
ICAgIG1fd2Vha0hlYXAucmVzZXRBbGxvY2F0b3IoKTsKIH0KIAogdm9pZCBIZWFwOjpzZXRBY3Rp
dml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxi
YWNrKQpAQCAtOTE0LDE1ICs5MjUsMTUgQEAgdm9pZCBIZWFwOjpyZWxlYXNlRnJlZUJsb2Nrcygp
CiAKIHZvaWQgSGVhcDo6YWRkRmluYWxpemVyKEpTQ2VsbCogY2VsbCwgRmluYWxpemVyIGZpbmFs
aXplcikKIHsKLSAgICBXZWFrPEpTQ2VsbD4gd2VhaygqZ2xvYmFsRGF0YSgpLCBjZWxsLCAmbV9m
aW5hbGl6ZXJPd25lciwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmluYWxpemVyKSk7Ci0gICAg
d2Vhay5sZWFrSGFuZGxlKCk7IC8vIEJhbGFuY2VkIGJ5IEZpbmFsaXplck93bmVyOjpmaW5hbGl6
ZSgpLgorICAgIHdlYWtIZWFwKCktPmFsbG9jYXRlKGNlbGwsICZtX2ZpbmFsaXplck93bmVyLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihmaW5hbGl6ZXIpKTsgLy8gQmFsYW5jZWQgYnkgRmluYWxp
emVyT3duZXI6OmZpbmFsaXplKCkuCiB9CiAKIHZvaWQgSGVhcDo6RmluYWxpemVyT3duZXI6OmZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgV2Vh
azxKU0NlbGw+IHdlYWsoV2VhazxKU0NlbGw+OjpBZG9wdCwgaGFuZGxlKTsKKyAgICBIYW5kbGVT
bG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwogICAgIEZpbmFsaXplciBmaW5hbGl6ZXIgPSByZWlu
dGVycHJldF9jYXN0PEZpbmFsaXplcj4oY29udGV4dCk7Ci0gICAgZmluYWxpemVyKHdlYWsuZ2V0
KCkpOworICAgIGZpbmFsaXplcihzbG90LT5hc0NlbGwoKSk7CisgICAgV2Vha0hlYXA6OmRlYWxs
b2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoc2xvdCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsOCBAQAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiTWFya2Vk
U3BhY2UuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIldlYWtIYW5kbGVP
d25lci5oIgorI2luY2x1ZGUgIldlYWtIZWFwLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyU3Vw
cG9ydC5oIgogI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KQEAgLTEzMywxMSArMTM1LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBl
IGZvckVhY2hQcm90ZWN0ZWRDZWxsKEZ1bmN0b3ImKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVk
Q2VsbCgpOwogCisgICAgICAgIFdlYWtIZWFwKiB3ZWFrSGVhcCgpIHsgcmV0dXJuICZtX3dlYWtI
ZWFwOyB9CiAgICAgICAgIEhhbmRsZUhlYXAqIGhhbmRsZUhlYXAoKSB7IHJldHVybiAmbV9oYW5k
bGVIZWFwOyB9CiAgICAgICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZt
X2hhbmRsZVN0YWNrOyB9CiAKICAgICAgICAgdm9pZCBnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJv
b3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKTsKIAorICAgICAgICB2b2lkIGFkZFRvV2F0ZXJN
YXJrKHNpemVfdCk7CisKICAgICAgICAgZG91YmxlIGxhc3RHQ0xlbmd0aCgpIHsgcmV0dXJuIG1f
bGFzdEdDTGVuZ3RoOyB9CiAKICAgICBwcml2YXRlOgpAQCAtMTU1LDcgKzE2MCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHNpemVfdCB3YXRlck1hcmsoKTsKICAgICAgICAgc2l6ZV90
IGhpZ2hXYXRlck1hcmsoKTsKLSAgICAgICAgdm9pZCBzZXRIaWdoV2F0ZXJNYXJrKHNpemVfdCk7
CiAgICAgICAgIGJvb2wgc2hvdWxkQ29sbGVjdCgpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbWluRXh0cmFDb3N0ID0gMjU2OwpAQCAtMTk5LDcgKzIwMyw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjb25zdCBIZWFwU2l6ZSBtX2hlYXBTaXplOwogICAgICAgICBjb25zdCBz
aXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwogICAgICAgICBzaXplX3QgbV9sYXN0RnVsbEdDU2l6
ZTsKLSAgICAgICAgc2l6ZV90IG1fd2F0ZXJNYXJrOwogICAgICAgICBzaXplX3QgbV9oaWdoV2F0
ZXJNYXJrOwogICAgICAgICAKICAgICAgICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBtX29wZXJhdGlv
bkluUHJvZ3Jlc3M7CkBAIC0yMTgsOCArMjIxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZUYWJsZVNwZWN0cnVtIG1fZGVzdHJveWVkVHlwZUNvdW50czsKICNlbmRpZgogCi0gICAgICAg
IHNpemVfdCBtX2V4dHJhQ29zdDsKLQogICAgICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0
ZWRWYWx1ZXM7CiAgICAgICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogPiBtX3Rl
bXBTb3J0aW5nVmVjdG9yczsKICAgICAgICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+
KiBtX21hcmtMaXN0U2V0OwpAQCAtMjMxLDYgKzIzMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhIG1fc2hhcmVkRGF0YTsKICAgICAgICAgU2xv
dFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKIAorICAgICAgICBXZWFrSGVhcCBtX3dlYWtIZWFwOwog
ICAgICAgICBIYW5kbGVIZWFwIG1faGFuZGxlSGVhcDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9o
YW5kbGVTdGFjazsKICAgICAgICAgREZHQ29kZUJsb2NrcyBtX2RmZ0NvZGVCbG9ja3M7CkBAIC0y
OTMsOSArMjk1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9oaWdoV2F0
ZXJNYXJrOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEhlYXA6OnNldEhpZ2hXYXRlck1hcmso
c2l6ZV90IG5ld0hpZ2hXYXRlck1hcmspCisgICAgaW5saW5lIHZvaWQgSGVhcDo6YWRkVG9XYXRl
ck1hcmsoc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICBtX2hpZ2hXYXRlck1hcmsgPSBuZXdI
aWdoV2F0ZXJNYXJrOworICAgICAgICBtX29iamVjdFNwYWNlLmFkZFRvV2F0ZXJNYXJrKHNpemUp
OworICAgICAgICBpZiAod2F0ZXJNYXJrKCkgPiBoaWdoV2F0ZXJNYXJrKCkpCisgICAgICAgICAg
ICBjb2xsZWN0KERvTm90U3dlZXApOwogICAgIH0KIAogI2lmIEVOQUJMRShHR0MpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAxMTI1
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAgY2xhc3MgU3RydWN0dXJlOwogCiBNYXJrZWRTcGFj
ZTo6TWFya2VkU3BhY2UoSGVhcCogaGVhcCkKICAgICA6IG1fd2F0ZXJNYXJrKDApCi0gICAgLCBt
X251cnNlcnlXYXRlck1hcmsoMCkKICAgICAsIG1faGVhcChoZWFwKQogewogICAgIGZvciAoc2l6
ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNl
bGxTaXplICs9IHByZWNpc2VTdGVwKSB7CkBAIC00OSw3ICs0OCw2IEBAIE1hcmtlZFNwYWNlOjpN
YXJrZWRTcGFjZShIZWFwKiBoZWFwKQogdm9pZCBNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3Jz
KCkKIHsKICAgICBtX3dhdGVyTWFyayA9IDA7Ci0gICAgbV9udXJzZXJ5V2F0ZXJNYXJrID0gMDsK
IAogICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHBy
ZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7CiAgICAgICAgIGFsbG9jYXRv
ckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CiAKICAgICBzaXpl
X3Qgd2F0ZXJNYXJrKCk7Ci0gICAgc2l6ZV90IG51cnNlcnlXYXRlck1hcmsoKTsKKyAgICB2b2lk
IGFkZFRvV2F0ZXJNYXJrKHNpemVfdCk7CiAKICAgICB0eXBlZGVmIEhhc2hTZXQ8TWFya2VkQmxv
Y2sqPjo6aXRlcmF0b3IgQmxvY2tJdGVyYXRvcjsKICAgICAKQEAgLTc3LDYgKzc3LDcgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgc2hyaW5rKCk7CiAgICAgdm9pZCBmcmVlQmxvY2tzKE1hcmtl
ZEJsb2NrKiBoZWFkKTsKKwogICAgIHZvaWQgZGlkQWRkQmxvY2soTWFya2VkQmxvY2sqKTsKICAg
ICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdChNYXJrZWRCbG9jayopOwogCkBAIC0xMDIsNyArMTAz
LDYgQEAgcHJpdmF0ZToKICAgICBTdWJzcGFjZSBtX25vcm1hbFNwYWNlOwogCiAgICAgc2l6ZV90
IG1fd2F0ZXJNYXJrOwotICAgIHNpemVfdCBtX251cnNlcnlXYXRlck1hcms7CiAgICAgSGVhcCog
bV9oZWFwOwogICAgIE1hcmtlZEJsb2NrU2V0IG1fYmxvY2tzOwogfTsKQEAgLTExMiw5ICsxMTIs
OSBAQCBpbmxpbmUgc2l6ZV90IE1hcmtlZFNwYWNlOjp3YXRlck1hcmsoKQogICAgIHJldHVybiBt
X3dhdGVyTWFyazsKIH0KIAotaW5saW5lIHNpemVfdCBNYXJrZWRTcGFjZTo6bnVyc2VyeVdhdGVy
TWFyaygpCitpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6YWRkVG9XYXRlck1hcmsoc2l6ZV90IHNp
emUpCiB7Ci0gICAgcmV0dXJuIG1fbnVyc2VyeVdhdGVyTWFyazsKKyAgICBtX3dhdGVyTWFyayAr
PSBzaXplOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUg
RnVuY3Rvcjo6UmV0dXJuVHlwZSBNYXJrZWRTcGFjZTo6Zm9yRWFjaENlbGwoRnVuY3RvciYgZnVu
Y3RvcikKQEAgLTE5OSw3ICsxOTksNiBAQCBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6ZGlkQWRk
QmxvY2soTWFyCiAKIGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpkaWRDb25zdW1lRnJlZUxpc3Qo
TWFya2VkQmxvY2sqIGJsb2NrKQogewotICAgIG1fbnVyc2VyeVdhdGVyTWFyayArPSBibG9jay0+
Y2FwYWNpdHkoKSAtIGJsb2NrLT5zaXplKCk7CiAgICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNh
cGFjaXR5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NXZWFr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFzc1dlYWsuaAko
cmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFzc1dlYWsu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBQYXNzV2Vha19oCiAj
ZGVmaW5lIFBhc3NXZWFrX2gKIAorI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW5jbHVkZSAiSGFuZGxlLmgiCiAjaW5jbHVkZSA8d3RmL051bGxQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgogCkBAIC0zNSw2MSArMzUsMTY0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1dlYWs7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNz
V2VhazxUPiBhZG9wdFdlYWsoSGFuZGxlU2xvdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNz
V2VhazxUPiBhZG9wdFdlYWsoV2Vha0ltcGwqKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgUGFzc1dlYWsgOiBwdWJsaWMgSGFuZGxlPFQ+IHsKLSAgICB1c2luZyBIYW5kbGU8VD46OnNs
b3Q7Ci0gICAgdXNpbmcgSGFuZGxlPFQ+OjpzZXRTbG90OwordGVtcGxhdGU8dHlwZW5hbWUgQmFz
ZSwgdHlwZW5hbWUgVD4gY2xhc3MgV2Vha0ltcGxBY2Nlc3NvciB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBUKiBHZXRUeXBlOworCisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0OworICAgIFQmIG9w
ZXJhdG9yKigpIGNvbnN0OworICAgIEdldFR5cGUgZ2V0KCkgY29uc3Q7CisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgYm9vbCB3YXMoR2V0VHlwZSkgY29uc3Q7CisjZW5kaWYKK307CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEJhc2U+IGNsYXNzIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93
bj4gewogcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5
cGUgRXh0ZXJuYWxUeXBlOworICAgIHR5cGVkZWYgSlNWYWx1ZSBHZXRUeXBlOwogCi0gICAgUGFz
c1dlYWsoKSA6IEhhbmRsZTxUPigpIHsgfQotICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KSA6
IEhhbmRsZTxUPigpIHsgfQorICAgIGNvbnN0IEpTVmFsdWUqIG9wZXJhdG9yLT4oKSBjb25zdDsK
KyAgICBjb25zdCBKU1ZhbHVlJiBvcGVyYXRvciooKSBjb25zdDsKKyAgICBHZXRUeXBlIGdldCgp
IGNvbnN0OworfTsKIAotICAgIFBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0
ZXJuYWxUeXBlIGV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpLCBXZWFrSGFuZGxlT3duZXIq
IHdlYWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQotICAgICAgICA6IEhhbmRsZTxUPihn
bG9iYWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpKQotICAgIHsKLSAgICAgICAg
SGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5tYWtlV2VhayhzbG90KCksIHdlYWtPd25lciwg
Y29udGV4dCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBIYW5kbGVUeXBlczxUPjo6dG9KU1Zh
bHVlKGV4dGVybmFsVHlwZSk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+
d3JpdGVCYXJyaWVyKHNsb3QoKSwgdmFsdWUpOwotICAgICAgICAqc2xvdCgpID0gdmFsdWU7Ci0g
ICAgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1dlYWsgOiBwdWJsaWMgV2Vha0lt
cGxBY2Nlc3NvcjxQYXNzV2VhazxUPiwgVD4geworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBX
ZWFrSW1wbEFjY2Vzc29yPFBhc3NXZWFrPFQ+LCBUPjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFdl
YWtJbXBsQWNjZXNzb3I8UGFzc1dlYWs8VD4sIFQ+OjpHZXRUeXBlIEdldFR5cGU7CisKKyAgICBQ
YXNzV2VhaygpOworICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBQYXNzV2VhayhK
U0dsb2JhbERhdGEmLCBHZXRUeXBlID0gR2V0VHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqID0gMCwg
dm9pZCogY29udGV4dCA9IDApOwogCiAgICAgLy8gSXQgc29tZXdoYXQgYnJlYWtzIHRoZSB0eXBl
IHN5c3RlbSB0byBhbGxvdyB0cmFuc2ZlciBvZiBvd25lcnNoaXAgb3V0IG9mCiAgICAgLy8gYSBj
b25zdCBQYXNzV2Vhay4gSG93ZXZlciwgaXQgbWFrZXMgaXQgbXVjaCBlYXNpZXIgdG8gd29yayB3
aXRoIFBhc3NXZWFrCiAgICAgLy8gdGVtcG9yYXJpZXMsIGFuZCB3ZSBkb24ndCBoYXZlIGEgbmVl
ZCB0byB1c2UgcmVhbCBjb25zdCBQYXNzV2Vha3MgYW55d2F5LgotICAgIFBhc3NXZWFrKGNvbnN0
IFBhc3NXZWFrJiBvKSA6IEhhbmRsZTxUPihvLmxlYWtIYW5kbGUoKSkgeyB9Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gUGFzc1dlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG8pIDogSGFuZGxlPFQ+
KG8ubGVha0hhbmRsZSgpKSB7IH0KKyAgICBQYXNzV2Vhayhjb25zdCBQYXNzV2VhayYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+Jik7CisKKyAg
ICB+UGFzc1dlYWsoKTsKIAotICAgIH5QYXNzV2VhaygpCi0gICAgewotICAgICAgICBpZiAoIXNs
b3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihz
bG90KCkpLT5kZWFsbG9jYXRlKHNsb3QoKSk7Ci0gICAgICAgIHNldFNsb3QoMCk7Ci0gICAgfQor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CiAKLSAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29u
c3QgeyByZXR1cm4gIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdChzbG90KCkpOyB9CisgICAg
Ly8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRv
IGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgSlNWYWx1
ZSAoUGFzc1dlYWs6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNp
ZmllZEJvb2xUeXBlKigpIGNvbnN0OwogCi0gICAgSGFuZGxlU2xvdCBsZWFrSGFuZGxlKCkgY29u
c3QgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdlYWtJbXBsKiBsZWFrSW1wbCgpIGNvbnN0IFdB
Uk5fVU5VU0VEX1JFVFVSTjsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgUGFzc1dlYWsgYWRvcHRX
ZWFrPFQ+KEhhbmRsZVNsb3QpOworICAgIGZyaWVuZCBQYXNzV2VhayBhZG9wdFdlYWs8VD4oV2Vh
a0ltcGwqKTsKKyAgICBleHBsaWNpdCBQYXNzV2VhayhXZWFrSW1wbCopOwogCi0gICAgZXhwbGlj
aXQgUGFzc1dlYWsoSGFuZGxlU2xvdCBzbG90KSA6IEhhbmRsZTxUPihzbG90KSB7IH0KKyAgICBX
ZWFrSW1wbCogbV9pbXBsOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEhhbmRs
ZVNsb3QgUGFzc1dlYWs8VD46OmxlYWtIYW5kbGUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
QmFzZSwgdHlwZW5hbWUgVD4gaW5saW5lIFQqIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVD46Om9w
ZXJhdG9yLT4oKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4o
dGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGlubGluZSBUJiBXZWFrSW1w
bEFjY2Vzc29yPEJhc2UsIFQ+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBC
YXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0
dXJuICpqc0Nhc3Q8VCo+KHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5q
c1ZhbHVlKCkuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBX
ZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+OjpnZXQoKSBjb25zdAoreworICAgIGlmICghc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwgfHwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
ZSo+KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgIHJl
dHVybiBHZXRUeXBlKCk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9CisKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBUPiBpbmxpbmUg
Ym9vbCBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+Ojp3YXModHlwZW5hbWUgV2Vha0ltcGxBY2Nl
c3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4ganNDYXN0
PFQqPihzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+anNWYWx1ZSgpLmFz
Q2VsbCgpKSA9PSBvdGhlcjsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBp
bmxpbmUgY29uc3QgSlNWYWx1ZSogV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBVbmtub3duPjo6b3Bl
cmF0b3ItPigpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0
aGlzKS0+bV9pbXBsICYmIHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5z
dGF0ZSgpID09IFdlYWtJbXBsOjpMaXZlKTsKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PGNvbnN0
IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhc2U+IGlubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25v
d24+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBC
YXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1f
aW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2U+IGlubGluZSB0eXBlbmFtZSBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25v
d24+OjpHZXRUeXBlIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93bj46OmdldCgpIGNvbnN0
Cit7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCB8fCBz
dGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1w
bDo6TGl2ZSkKKyAgICAgICAgcmV0dXJuIEdldFR5cGUoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2VhaygpCisgICAgOiBtX2ltcGwo
MCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNz
V2VhayhzdGQ6Om51bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdHlwZW5hbWUgUGFzc1dlYWs8VD46OkdldFR5cGUgZ2V0VHlwZSwgV2Vha0hhbmRs
ZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgOiBtX2ltcGwoZ2xvYmFsRGF0
YS5oZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKGdldFR5cGUsIHdlYWtPd25lciwgY29udGV4dCkp
Cit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxUPjo6UGFzc1dl
YWsoY29uc3QgUGFzc1dlYWsmIG8pCisgICAgOiBtX2ltcGwoby5sZWFrSW1wbCgpKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc1dl
YWs8VD46OlBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvKQorICAgIDogbV9pbXBsKG8ubGVh
a0ltcGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+
Ojp+UGFzc1dlYWsoKQoreworICAgIGlmICghbV9pbXBsKQorICAgICAgICByZXR1cm47CisgICAg
V2Vha0hlYXA6OmRlYWxsb2NhdGUobV9pbXBsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIGJvb2wgUGFzc1dlYWs8VD46Om9wZXJhdG9yISgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFtX2ltcGwgfHwgbV9pbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlIHx8ICFtX2ltcGwt
PmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+
OjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KCEhKnRoaXMpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKFdlYWtJbXBsKiBp
bXBsKQorOiBtX2ltcGwoaW1wbCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IFdlYWtJbXBsKiBQYXNzV2VhazxUPjo6bGVha0ltcGwoKSBjb25zdAogewotICAgIEhhbmRsZVNs
b3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICBjb25zdF9jYXN0PFBhc3NXZWFrPFQ+Kj4odGhp
cyktPnNldFNsb3QoMCk7Ci0gICAgcmV0dXJuIHNsb3Q7CisgICAgV2Vha0ltcGwqIHRtcCA9IDA7
CisgICAgc3RkOjpzd2FwKHRtcCwgY29uc3RfY2FzdDxXZWFrSW1wbComPihtX2ltcGwpKTsKKyAg
ICByZXR1cm4gdG1wOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNzV2VhazxUPiBhZG9w
dFdlYWsoSGFuZGxlU2xvdCBzbG90KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1dlYWs8VD4g
aW5saW5lIGFkb3B0V2VhayhXZWFrSW1wbCogaW1wbCkKIHsKLSAgICByZXR1cm4gUGFzc1dlYWs8
VD4oc2xvdCk7CisgICAgcmV0dXJuIFBhc3NXZWFrPFQ+KGltcGwpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NX
ZWFrPFQ+JiBhLCBjb25zdCBQYXNzV2VhazxVPiYgYikgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdHJvbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdHJvbmcuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Ryb25nLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDExICs4MSwxOSBAQCBwdWJsaWM6
CiAgICAgICAgIGNsZWFyKCk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhc2xvdCgpIHx8ICEqc2xvdCgpOyB9CisKKyAgICAvLyBUaGlzIGNvbnZlcnNpb24g
b3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90
aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNlOjoqVW5z
cGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBj
b25zdCB7IHJldHVybiAhISp0aGlzID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xU
eXBlKj4oMSkgOiAwOyB9CisKICAgICB2b2lkIHN3YXAoU3Ryb25nJiBvdGhlcikKICAgICB7CiAg
ICAgICAgIEhhbmRsZTxUPjo6c3dhcChvdGhlcik7CiAgICAgfQogCisgICAgRXh0ZXJuYWxUeXBl
IGdldCgpIGNvbnN0IHsgcmV0dXJuIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdCh0aGlzLT5z
bG90KCkpOyB9CisKICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBFeHRlcm5hbFR5cGUpOwog
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IFN0cm9uZyYgb3BlcmF0b3I9KGNvbnN0IFN0cm9u
ZzxVPiYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCShyZXZpc2lvbiAx
MTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDEwOSArMjcsMTI5IEBACiAjZGVmaW5lIFdlYWtfaAogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlICJIYW5kbGUuaCIKLSNpbmNsdWRlICJIYW5kbGVIZWFw
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiUGFzc1dlYWsuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLS8vIEEgd2Vha2x5IHJlZmVyZW5jZWQgaGFuZGxlIHRoYXQgYmVj
b21lcyAwIHdoZW4gdGhlIHZhbHVlIGl0IHBvaW50cyB0byBpcyBnYXJiYWdlIGNvbGxlY3RlZC4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIEhhbmRsZTxUPiB7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIFdlYWtJbXBsQWNjZXNzb3I8
V2VhazxUPiwgVD4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWspOwotCi0gICAgdXNp
bmcgSGFuZGxlPFQ+OjpzbG90OwotICAgIHVzaW5nIEhhbmRsZTxUPjo6c2V0U2xvdDsKLQogcHVi
bGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5cGUgRXh0ZXJu
YWxUeXBlOworICAgIGZyaWVuZCBjbGFzcyBXZWFrSW1wbEFjY2Vzc29yPFdlYWs8VD4sIFQ+Owor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxXZWFrPFQ+LCBUPjo6R2V0VHlw
ZSBHZXRUeXBlOwogCi0gICAgV2VhaygpCi0gICAgICAgIDogSGFuZGxlPFQ+KCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgV2VhayhzdGQ6Om51bGxwdHJfdCkKLSAgICAgICAgOiBIYW5kbGU8VD4oKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0ZXJu
YWxUeXBlIGV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqIHdl
YWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQotICAgICAgICA6IEhhbmRsZTxUPihnbG9i
YWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpKQotICAgIHsKLSAgICAgICAgSGFu
ZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5tYWtlV2VhayhzbG90KCksIHdlYWtPd25lciwgY29u
dGV4dCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBIYW5kbGVUeXBlczxUPjo6dG9KU1ZhbHVl
KGV4dGVybmFsVHlwZSk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+d3Jp
dGVCYXJyaWVyKHNsb3QoKSwgdmFsdWUpOwotICAgICAgICAqc2xvdCgpID0gdmFsdWU7Ci0gICAg
fQotCi0gICAgZW51bSBBZG9wdFRhZyB7IEFkb3B0IH07Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gV2VhayhBZG9wdFRhZywgSGFuZGxlPFU+IGhhbmRsZSkKLSAgICAgICAgOiBIYW5kbGU8VD4o
aGFuZGxlLnNsb3QoKSkKLSAgICB7Ci0gICAgICAgIHZhbGlkYXRlQ2VsbChnZXQoKSk7Ci0gICAg
fQorICAgIFdlYWsoKTsKKyAgICBXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBXZWFrKEpTR2xv
YmFsRGF0YSYsIEdldFR5cGUgPSBHZXRUeXBlKCksIFdlYWtIYW5kbGVPd25lciogPSAwLCB2b2lk
KiBjb250ZXh0ID0gMCk7CiAKICAgICBlbnVtIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZyB7IEhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSB9OwotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBzbG90KCkgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KLSAg
ICBXZWFrKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZykKLSAgICAgICAgOiBIYW5kbGU8VD4oaGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkpCi0gICAgewotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IFdlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG90aGVyKQotICAgICAgICA6IEhhbmRsZTxU
PihvdGhlci5sZWFrSGFuZGxlKCkpCi0gICAgewotICAgIH0KLQotICAgIH5XZWFrKCkKLSAgICB7
Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwKFdlYWsmIG90aGVyKQot
ICAgIHsKLSAgICAgICAgSGFuZGxlPFQ+Ojpzd2FwKG90aGVyKTsKLSAgICB9CisgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0OworICAgIFdlYWsoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVGFnKTsKIAotICAgIFdlYWsmIG9wZXJhdG9yPShjb25zdCBQYXNzV2VhazxUPiYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFdlYWsoY29uc3QgUGFzc1dlYWs8VT4mKTsKIAotICAg
IEV4dGVybmFsVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiAgSGFuZGxlVHlwZXM8VD46OmdldEZy
b21TbG90KHNsb3QoKSk7IH0KLSAgICAKLSAgICBQYXNzV2VhazxUPiByZWxlYXNlKCkgeyBQYXNz
V2VhazxUPiB0bXAgPSBhZG9wdFdlYWs8VD4oc2xvdCgpKTsgc2V0U2xvdCgwKTsgcmV0dXJuIHRt
cDsgfQorICAgIH5XZWFrKCk7CiAKLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIGlm
ICghc2xvdCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFw
Rm9yKHNsb3QoKSktPmRlYWxsb2NhdGUoc2xvdCgpKTsKLSAgICAgICAgc2V0U2xvdCgwKTsKLSAg
ICB9CisgICAgdm9pZCBzd2FwKFdlYWsmKTsKKyAgICBXZWFrJiBvcGVyYXRvcj0oY29uc3QgUGFz
c1dlYWs8VD4mKTsKICAgICAKLSAgICBIYW5kbGVTbG90IGxlYWtIYW5kbGUoKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+aGFzRmluYWxpemVyKHNs
b3QoKSkpOwotICAgICAgICBIYW5kbGVTbG90IHJlc3VsdCA9IHNsb3QoKTsKLSAgICAgICAgc2V0
U2xvdCgwKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdDsKKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1w
bGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4K
KyAgICB0eXBlZGVmIEpTVmFsdWUgKEhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsK
KyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0OwogCisgICAgUGFzc1dl
YWs8VD4gcmVsZWFzZSgpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKIHByaXZhdGU6Ci0gICAg
c3RhdGljIEhhbmRsZVNsb3QgaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxIYW5kbGVTbG90PigtMSk7IH0KKyAgICBzdGF0aWMgV2Vha0ltcGwqIGhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOworCisgICAgV2Vha0ltcGwqIG1faW1wbDsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpXZWFrKCkKKyAgICA6IG1faW1wbCgwKQor
eworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2VhayhzdGQ6Om51
bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgV2VhazxUPjo6V2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHR5cGVuYW1lIFdl
YWs8VD46OkdldFR5cGUgZ2V0VHlwZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQq
IGNvbnRleHQpCisgICAgOiBtX2ltcGwoZ2xvYmFsRGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9j
YXRlKGdldFR5cGUsIHdlYWtPd25lciwgY29udGV4dCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBib29sIFdlYWs8VD46OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9pbXBsID09IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2Vhayh0eXBlbmFtZSBXZWFr
PFQ+OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCisgICAgOiBtX2ltcGwoaGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVu
YW1lIFU+ICBpbmxpbmUgV2VhazxUPjo6V2Vhayhjb25zdCBQYXNzV2VhazxVPiYgb3RoZXIpCisg
ICAgOiBtX2ltcGwob3RoZXIubGVha0ltcGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIFdlYWs8VD46On5XZWFrKCkKK3sKKyAgICBjbGVhcigpOworfQorCiB0ZW1wbGF0
ZTxjbGFzcyBUPiBpbmxpbmUgdm9pZCBzd2FwKFdlYWs8VD4mIGEsIFdlYWs8VD4mIGIpCiB7CiAg
ICAgYS5zd2FwKGIpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBXZWFr
PFQ+Ojpzd2FwKFdlYWsmIG90aGVyKQoreworICAgIHN0ZDo6c3dhcChtX2ltcGwsIG90aGVyLm1f
aW1wbCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+JiBXZWFrPFQ+
OjpvcGVyYXRvcj0oY29uc3QgUGFzc1dlYWs8VD4mIG8pCiB7CiAgICAgY2xlYXIoKTsKLSAgICBz
ZXRTbG90KG8ubGVha0hhbmRsZSgpKTsKKyAgICBtX2ltcGwgPSBvLmxlYWtJbXBsKCk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFr
PFQ+OjpvcGVyYXRvciEoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pbXBsIHx8ICFtX2ltcGwt
PmpzVmFsdWUoKSB8fCBtX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmU7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZp
ZWRCb29sVHlwZSo+KCEhKnRoaXMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
UGFzc1dlYWs8VD4gV2VhazxUPjo6cmVsZWFzZSgpCit7CisgICAgUGFzc1dlYWs8VD4gdG1wID0g
YWRvcHRXZWFrPFQ+KG1faW1wbCk7CisgICAgbV9pbXBsID0gMDsKKyAgICByZXR1cm4gdG1wOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBXZWFrPFQ+OjpjbGVhcigpCit7
CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybjsKKyAgICBXZWFrSGVhcDo6ZGVhbGxv
Y2F0ZShtX2ltcGwpOworICAgIG1faW1wbCA9IDA7Cit9CisgICAgCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgV2Vha0ltcGwqIFdlYWs8VD46Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpCit7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0ltcGwqPigtMSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTE1MSw3ICsxNzEsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czxKCiAgICAgc3RhdGljIFBhc3NPdXRU
eXBlIHBhc3NPdXQoU3RvcmFnZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7
IH0KICAgICBzdGF0aWMgUGFzc091dFR5cGUgcGFzc091dChFbXB0eVZhbHVlVHlwZSkgeyByZXR1
cm4gUGFzc091dFR5cGUoKTsgfQogCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBTdG9yYWdlVHlwZTo6
RXh0ZXJuYWxUeXBlIFBlZWtUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgU3RvcmFnZVR5cGU6
OkdldFR5cGUgUGVla1R5cGU7CiAgICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoY29uc3QgU3RvcmFn
ZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5nZXQoKTsgfQogICAgIHN0YXRpYyBQZWVrVHlw
ZSBwZWVrKEVtcHR5VmFsdWVUeXBlKSB7IHJldHVybiBQZWVrVHlwZSgpOyB9CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2Vha0Jsb2NrLmgiCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSGVhcFJvb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJTY29wZUNoYWluLmgi
CisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitXZWFrQmxvY2sq
IFdlYWtCbG9jazo6Y3JlYXRlKCkKK3sKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2Nh
dGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoYmxvY2tTaXplLCBibG9ja1Np
emUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKKyAgICBpZiAoIXN0YXRpY19jYXN0PGJv
b2w+KGFsbG9jYXRpb24pKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBuZXcgKE5vdE51
bGwsIGFsbG9jYXRpb24uYmFzZSgpKSBXZWFrQmxvY2soYWxsb2NhdGlvbik7Cit9CisKK3ZvaWQg
V2Vha0Jsb2NrOjpkZXN0cm95KFdlYWtCbG9jayogYmxvY2spCit7CisgICAgYmxvY2stPm1fYWxs
b2NhdGlvbi5kZWFsbG9jYXRlKCk7Cit9CisKK1dlYWtCbG9jazo6V2Vha0Jsb2NrKFBhZ2VBbGxv
Y2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbikKKyAgICA6IEhlYXBCbG9jayhhbGxvY2F0aW9uKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAgICBuZXcg
KE5vdE51bGwsIHdlYWtJbXBsKSBXZWFrSW1wbDsKKyAgICAgICAgYWRkVG9GcmVlTGlzdCgmbV9z
d2VlcFJlc3VsdC5mcmVlTGlzdCwgd2Vha0ltcGwpOworICAgIH0KKworICAgIEFTU0VSVCghbV9z
d2VlcFJlc3VsdC5pc051bGwoKSAmJiBtX3N3ZWVwUmVzdWx0LmJsb2NrSXNGcmVlKTsKK30KKwor
dm9pZCBXZWFrQmxvY2s6OmZpbmFsaXplQWxsKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHdlYWtJbXBsQ291bnQoKTsgKytpKSB7CisgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9
ICZ3ZWFrSW1wbHMoKVtpXTsKKyAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID49IFdlYWtJ
bXBsOjpGaW5hbGl6ZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgd2Vha0ltcGwt
PnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKKyAgICAgICAgZmluYWxpemUod2Vha0ltcGwpOwor
ICAgIH0KK30KKwordm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKK3sKKyAgICBpZiAoIW1fc3dlZXBS
ZXN1bHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN3ZWVwUmVzdWx0IHN3ZWVw
UmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kp
IHsKKyAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAg
ICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkRlYWQpCisgICAgICAgICAgICBm
aW5hbGl6ZSh3ZWFrSW1wbCk7CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA9PSBXZWFr
SW1wbDo6RGVhbGxvY2F0ZWQpCisgICAgICAgICAgICBhZGRUb0ZyZWVMaXN0KCZzd2VlcFJlc3Vs
dC5mcmVlTGlzdCwgd2Vha0ltcGwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzd2VlcFJl
c3VsdC5ibG9ja0lzRnJlZSA9IGZhbHNlOworICAgIH0KKworICAgIG1fc3dlZXBSZXN1bHQgPSBz
d2VlcFJlc3VsdDsKKyAgICBBU1NFUlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOworfQorCit2
b2lkIFdlYWtCbG9jazo6dmlzaXRMaXZlV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYgaGVhcFJv
b3RWaXNpdG9yKQoreworICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSB2
aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCisgICAgaWYgKCFtX3N3ZWVwUmVzdWx0LmlzTnVs
bCgpICYmIG1fc3dlZXBSZXN1bHQuYmxvY2tJc0ZyZWUpCisgICAgICAgIHJldHVybjsKKworICAg
IFNsb3RWaXNpdG9yJiB2aXNpdG9yID0gaGVhcFJvb3RWaXNpdG9yLnZpc2l0b3IoKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
V2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAgICBpZiAod2Vha0lt
cGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBKU1ZhbHVlJiBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKKyAg
ICAgICAgaWYgKCFqc1ZhbHVlIHx8ICFqc1ZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgSlNDZWxsKiBqc0NlbGwgPSBqc1ZhbHVlLmFzQ2VsbCgpOworICAg
ICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoanNDZWxsKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyID0gd2Vha0ltcGwtPndl
YWtIYW5kbGVPd25lcigpOworICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lcikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpT
VmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZjb25zdF9j
YXN0PEpTVmFsdWUmPihqc1ZhbHVlKSk7CisgICAgfQorfQorCit2b2lkIFdlYWtCbG9jazo6dmlz
aXREZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpCit7CisgICAgLy8gSWYgYSBibG9jayBp
cyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUgYW55IGVmZmVjdC4KKyAgICBp
ZiAoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkgJiYgbV9zd2VlcFJlc3VsdC5ibG9ja0lzRnJlZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWFrSW1wbENv
dW50KCk7ICsraSkgeworICAgICAgICBXZWFrSW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxzKClb
aV07CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA+IFdlYWtJbXBsOjpEZWFkKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgSlNWYWx1ZSYganNWYWx1ZSA9IHdl
YWtJbXBsLT5qc1ZhbHVlKCk7CisgICAgICAgIGlmICghanNWYWx1ZSB8fCAhanNWYWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTQ2VsbCoganNDZWxsID0g
anNWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGpzQ2VsbCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkRlYWQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vha0Jsb2NrX2gKKyNkZWZpbmUgV2Vha0Jsb2NrX2gK
KworI2luY2x1ZGUgIkhlYXBCbG9jay5oIgorI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgor
I2luY2x1ZGUgIldlYWtJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4K
KyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcFJvb3RWaXNpdG9y
OworY2xhc3MgSlNWYWx1ZTsKK2NsYXNzIFdlYWtIYW5kbGVPd25lcjsKKworY2xhc3MgV2Vha0Js
b2NrIDogcHVibGljIEhlYXBCbG9jayB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBibG9ja1NpemUgPSA0ICogS0I7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja01hc2sg
PSB+KGJsb2NrU2l6ZSAtIDEpOworCisgICAgc3RydWN0IEZyZWVDZWxsIHsKKyAgICAgICAgRnJl
ZUNlbGwqIG5leHQ7CisgICAgfTsKKworICAgIHN0cnVjdCBTd2VlcFJlc3VsdCB7CisgICAgICAg
IFN3ZWVwUmVzdWx0KCk7CisgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBibG9ja0lzRnJlZTsKKyAgICAgICAgRnJlZUNlbGwqIGZyZWVMaXN0OworICAgIH07CisK
KyAgICBzdGF0aWMgV2Vha0Jsb2NrKiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KFdlYWtCbG9jayopOworCisgICAgc3RhdGljIFdlYWtCbG9jayogYmxvY2tGb3IoV2Vha0ltcGwq
KTsKKyAgICBzdGF0aWMgV2Vha0ltcGwqIGFzV2Vha0ltcGwoRnJlZUNlbGwqKTsKKworICAgIHZv
aWQgc3dlZXAoKTsKKyAgICBjb25zdCBTd2VlcFJlc3VsdCYgc3dlZXBSZXN1bHQoKTsKKyAgICBT
d2VlcFJlc3VsdCB0YWtlU3dlZXBSZXN1bHQoKTsKKworICAgIHZvaWQgZGVhbGxvY2F0ZShXZWFr
SW1wbCopOworCisgICAgdm9pZCB2aXNpdExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdERlYWRXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisKKyAgICB2
b2lkIGZpbmFsaXplQWxsKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEZyZWVDZWxsKiBhc0Zy
ZWVDZWxsKFdlYWtJbXBsKik7CisKKyAgICBXZWFrQmxvY2soUGFnZUFsbG9jYXRpb25BbGlnbmVk
Jik7CisgICAgV2Vha0ltcGwqIGZpcnN0V2Vha0ltcGwoKTsKKyAgICB2b2lkIGZpbmFsaXplKFdl
YWtJbXBsKik7CisgICAgV2Vha0ltcGwqIHdlYWtJbXBscygpOworICAgIHNpemVfdCB3ZWFrSW1w
bENvdW50KCk7CisgICAgdm9pZCBhZGRUb0ZyZWVMaXN0KEZyZWVDZWxsKiosIFdlYWtJbXBsKik7
CisKKyAgICBTd2VlcFJlc3VsdCBtX3N3ZWVwUmVzdWx0OworfTsKKworaW5saW5lIFdlYWtCbG9j
azo6U3dlZXBSZXN1bHQ6OlN3ZWVwUmVzdWx0KCkKKyAgICA6IGJsb2NrSXNGcmVlKHRydWUpCisg
ICAgLCBmcmVlTGlzdCgwKQoreworICAgIEFTU0VSVChpc051bGwoKSk7Cit9CisKK2lubGluZSBi
b29sIFdlYWtCbG9jazo6U3dlZXBSZXN1bHQ6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGJsb2NrSXNGcmVlICYmICFmcmVlTGlzdDsgLy8gVGhpcyBzdGF0ZSBpcyBpbXBvc3NpYmxlLCBz
byB3ZSBjYW4gdXNlIGl0IHRvIG1lYW4gbnVsbC4KK30KKworaW5saW5lIFdlYWtCbG9jayogV2Vh
a0Jsb2NrOjpibG9ja0ZvcihXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8V2Vha0Jsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHdlYWtJ
bXBsKSAmIGJsb2NrTWFzayk7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0Jsb2NrOjphc1dl
YWtJbXBsKEZyZWVDZWxsKiBmcmVlQ2VsbCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxXZWFrSW1wbCo+KGZyZWVDZWxsKTsKK30KKworaW5saW5lIFdlYWtCbG9jazo6U3dlZXBSZXN1
bHQgV2Vha0Jsb2NrOjp0YWtlU3dlZXBSZXN1bHQoKQoreworICAgIFN3ZWVwUmVzdWx0IHRtcDsK
KyAgICBzdGQ6OnN3YXAodG1wLCBtX3N3ZWVwUmVzdWx0KTsKKyAgICBBU1NFUlQobV9zd2VlcFJl
c3VsdC5pc051bGwoKSk7CisgICAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIGNvbnN0IFdlYWtC
bG9jazo6U3dlZXBSZXN1bHQmIFdlYWtCbG9jazo6c3dlZXBSZXN1bHQoKQoreworICAgIHJldHVy
biBtX3N3ZWVwUmVzdWx0OworfQorCitpbmxpbmUgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0Js
b2NrOjphc0ZyZWVDZWxsKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxGcmVlQ2VsbCo+KHdlYWtJbXBsKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Js
b2NrOjpkZWFsbG9jYXRlKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICB3ZWFrSW1wbC0+c2V0
U3RhdGUoV2Vha0ltcGw6OkRlYWxsb2NhdGVkKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Jsb2Nr
OjpmaW5hbGl6ZShXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgQVNTRVJUKHdlYWtJbXBsLT5z
dGF0ZSgpID09IFdlYWtJbXBsOjpEZWFkKTsKKyAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkZpbmFsaXplZCk7CisgICAgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIgPSB3
ZWFrSW1wbC0+d2Vha0hhbmRsZU93bmVyKCk7CisgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICB3ZWFrSGFuZGxlT3duZXItPmZpbmFsaXplKEhhbmRsZTxVbmtu
b3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KHdlYWtJbXBsLT5qc1ZhbHVlKCkp
KSwgd2Vha0ltcGwtPmNvbnRleHQoKSk7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0Jsb2Nr
Ojp3ZWFrSW1wbHMoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4o
dGhpcykgKyAoKHNpemVvZihXZWFrQmxvY2spICsgc2l6ZW9mKFdlYWtJbXBsKSAtIDEpIC8gc2l6
ZW9mKFdlYWtJbXBsKSk7Cit9CisKK2lubGluZSBzaXplX3QgV2Vha0Jsb2NrOjp3ZWFrSW1wbENv
dW50KCkKK3sKKyAgICByZXR1cm4gKGJsb2NrU2l6ZSAvIHNpemVvZihXZWFrSW1wbCkpIC0gKChz
aXplb2YoV2Vha0Jsb2NrKSArIHNpemVvZihXZWFrSW1wbCkgLSAxKSAvIHNpemVvZihXZWFrSW1w
bCkpOworfQorCitpbmxpbmUgdm9pZCBXZWFrQmxvY2s6OmFkZFRvRnJlZUxpc3QoRnJlZUNlbGwq
KiBmcmVlTGlzdCwgV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIEFTU0VSVCh3ZWFrSW1wbC0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6RGVhbGxvY2F0ZWQpOworICAgIEZyZWVDZWxsKiBmcmVlQ2Vs
bCA9IGFzRnJlZUNlbGwod2Vha0ltcGwpOworICAgIEFTU0VSVCghKmZyZWVMaXN0IHx8ICgoY2hh
ciopKmZyZWVMaXN0ID4gKGNoYXIqKXRoaXMgJiYgKGNoYXIqKSpmcmVlTGlzdCA8IChjaGFyKil0
aGlzICsgYmxvY2tTaXplKSk7CisgICAgQVNTRVJUKChjaGFyKilmcmVlQ2VsbCA+IChjaGFyKil0
aGlzICYmIChjaGFyKilmcmVlQ2VsbCA8IChjaGFyKil0aGlzICsgYmxvY2tTaXplKTsKKyAgICBm
cmVlQ2VsbC0+bmV4dCA9ICpmcmVlTGlzdDsKKyAgICAqZnJlZUxpc3QgPSBmcmVlQ2VsbDsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBXZWFrQmxvY2tfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIFNsb3RWaXNpdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgSGFuZGxlOwor
CitXZWFrSGFuZGxlT3duZXI6On5XZWFrSGFuZGxlT3duZXIoKQoreworfQorCitib29sIFdlYWtI
YW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2
b2lkKiwgU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWFr
SGFuZGxlT3duZXI6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCopCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hh
bmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrSGFuZGxlT3duZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2Vha0hhbmRsZU93bmVyX2gKKyNkZWZpbmUgV2Vha0hhbmRsZU93bmVy
X2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU2xv
dFZpc2l0b3I7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CisgICAgdmlydHVhbCBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4
dCwgU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gV2Vha0hhbmRsZU93bmVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtIZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGVhcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGVhcC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYWtIZWFwLmgiCisKKyNpbmNsdWRlICJIZWFw
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitXZWFrSGVhcDo6fldlYWtIZWFwKCkKK3sKKyAgICBX
ZWFrQmxvY2sqIG5leHQgPSAwOworICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19j
YXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsK
KyAgICAgICAgbmV4dCA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpOwor
ICAgICAgICBXZWFrQmxvY2s6OmRlc3Ryb3koYmxvY2spOworICAgIH0KKyAgICBtX2Jsb2Nrcy5j
bGVhcigpOworfQorCit2b2lkIFdlYWtIZWFwOjpmaW5hbGl6ZUFsbCgpCit7CisgICAgZm9yIChX
ZWFrQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3MuaGVhZCgp
KTsgYmxvY2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4oYmxvY2stPm5leHQoKSkp
CisgICAgICAgIGJsb2NrLT5maW5hbGl6ZUFsbCgpOworfQorCit2b2lkIFdlYWtIZWFwOjp2aXNp
dExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoV2Vh
a0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7
IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpKQor
ICAgICAgICBibG9jay0+dmlzaXRMaXZlV2Vha0ltcGxzKHZpc2l0b3IpOworfQorCit2b2lkIFdl
YWtIZWFwOjp2aXNpdERlYWRXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxv
Y2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2Nr
LT5uZXh0KCkpKQorICAgICAgICBibG9jay0+dmlzaXREZWFkV2Vha0ltcGxzKHZpc2l0b3IpOwor
fQorCit2b2lkIFdlYWtIZWFwOjpzd2VlcCgpCit7CisgICAgV2Vha0Jsb2NrKiBuZXh0OworICAg
IGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tz
LmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHN0YXRpY19j
YXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpOworCisgICAgICAgIC8vIElmIGEgYmxvY2sg
aXMgY29tcGxldGVseSBlbXB0eSwgYSBuZXcgc3dlZXAgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0Lgor
ICAgICAgICBpZiAoIWJsb2NrLT5zd2VlcFJlc3VsdCgpLmlzTnVsbCgpICYmIGJsb2NrLT5zd2Vl
cFJlc3VsdCgpLmJsb2NrSXNGcmVlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
YmxvY2stPnRha2VTd2VlcFJlc3VsdCgpOyAvLyBGb3JjZSBhIG5ldyBzd2VlcCBieSBkaXNjYXJk
aW5nIHRoZSBsYXN0IHN3ZWVwLgorICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICB9Cit9CisK
K3ZvaWQgV2Vha0hlYXA6OnJlc2V0QWxsb2NhdG9yKCkKK3sKKyAgICBtX2FsbG9jYXRvciA9IDA7
CisgICAgbV9uZXh0QWxsb2NhdG9yID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3Mu
aGVhZCgpKTsKK30KKworV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OmZpbmRBbGxvY2F0
b3IoKQoreworICAgIGlmIChXZWFrQmxvY2s6OkZyZWVDZWxsKiBhbGxvY2F0b3IgPSB0cnlGaW5k
QWxsb2NhdG9yKCkpCisgICAgICAgIHJldHVybiBhbGxvY2F0b3I7CisKKyAgICBtX2hlYXAtPmFk
ZFRvV2F0ZXJNYXJrKFdlYWtCbG9jazo6YmxvY2tTaXplKTsKKworICAgIC8vIGFkZFRvV2F0ZXJN
YXJrKCkgbWF5IGNhdXNlIGEgR0MsIHNvIHRyeSBhZ2Fpbi4KKyAgICBpZiAoV2Vha0Jsb2NrOjpG
cmVlQ2VsbCogYWxsb2NhdG9yID0gdHJ5RmluZEFsbG9jYXRvcigpKQorICAgICAgICByZXR1cm4g
YWxsb2NhdG9yOworCisgICAgcmV0dXJuIGFkZEFsbG9jYXRvcigpOworfQorCitXZWFrQmxvY2s6
OkZyZWVDZWxsKiBXZWFrSGVhcDo6dHJ5RmluZEFsbG9jYXRvcigpCit7CisgICAgd2hpbGUgKG1f
bmV4dEFsbG9jYXRvcikgeworICAgICAgICBXZWFrQmxvY2sqIGJsb2NrID0gbV9uZXh0QWxsb2Nh
dG9yOworICAgICAgICBtX25leHRBbGxvY2F0b3IgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPiht
X25leHRBbGxvY2F0b3ItPm5leHQoKSk7CisKKyAgICAgICAgYmxvY2stPnN3ZWVwKCk7CisgICAg
ICAgIFdlYWtCbG9jazo6U3dlZXBSZXN1bHQgc3dlZXBSZXN1bHQgPSBibG9jay0+dGFrZVN3ZWVw
UmVzdWx0KCk7CisgICAgICAgIGlmIChzd2VlcFJlc3VsdC5mcmVlTGlzdCkKKyAgICAgICAgICAg
IHJldHVybiBzd2VlcFJlc3VsdC5mcmVlTGlzdDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OmFkZEFsbG9jYXRvcigpCit7CisgICAg
V2Vha0Jsb2NrKiBibG9jayA9IFdlYWtCbG9jazo6Y3JlYXRlKCk7CisgICAgbV9ibG9ja3MuYXBw
ZW5kKGJsb2NrKTsKKyAgICBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0IHN3ZWVwUmVzdWx0ID0gYmxv
Y2stPnRha2VTd2VlcFJlc3VsdCgpOworICAgIEFTU0VSVCghc3dlZXBSZXN1bHQuaXNOdWxsKCkg
JiYgc3dlZXBSZXN1bHQuZnJlZUxpc3QpOworICAgIHJldHVybiBzd2VlcFJlc3VsdC5mcmVlTGlz
dDsKK30KKwordm9pZCBXZWFrSGVhcDo6cmVtb3ZlQWxsb2NhdG9yKFdlYWtCbG9jayogYmxvY2sp
Cit7CisgICAgbV9ibG9ja3MucmVtb3ZlKGJsb2NrKTsKKyAgICBXZWFrQmxvY2s6OmRlc3Ryb3ko
YmxvY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0hlYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtIZWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYWtIZWFwX2gKKyNkZWZpbmUgV2Vha0hlYXBfaAorCisjaW5jbHVkZSAiV2Vh
a0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgV2Vha0lt
cGw7CisKK2NsYXNzIFdlYWtIZWFwIHsKK3B1YmxpYzoKKyAgICBXZWFrSGVhcChIZWFwKik7Cisg
ICAgdm9pZCBmaW5hbGl6ZUFsbCgpOworICAgIH5XZWFrSGVhcCgpOworCisgICAgV2Vha0ltcGwq
IGFsbG9jYXRlKEpTVmFsdWUsIFdlYWtIYW5kbGVPd25lciogPSAwLCB2b2lkKiBjb250ZXh0ID0g
MCk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShXZWFrSW1wbCopOworCisgICAgdm9pZCB2
aXNpdExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdERlYWRX
ZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisKKyAgICB2b2lkIHN3ZWVwKCk7CisgICAgdm9p
ZCByZXNldEFsbG9jYXRvcigpOworCitwcml2YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFdl
YWtCbG9jazo6RnJlZUNlbGwqIGZpbmRBbGxvY2F0b3IoKTsKKyAgICBXZWFrQmxvY2s6OkZyZWVD
ZWxsKiB0cnlGaW5kQWxsb2NhdG9yKCk7CisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWRkQWxs
b2NhdG9yKCk7CisgICAgdm9pZCByZW1vdmVBbGxvY2F0b3IoV2Vha0Jsb2NrKik7CisKKyAgICBX
ZWFrQmxvY2s6OkZyZWVDZWxsKiBtX2FsbG9jYXRvcjsKKyAgICBXZWFrQmxvY2sqIG1fbmV4dEFs
bG9jYXRvcjsKKyAgICBEb3VibHlMaW5rZWRMaXN0PEhlYXBCbG9jaz4gbV9ibG9ja3M7CisgICAg
SGVhcCogbV9oZWFwOworfTsKKworaW5saW5lIFdlYWtIZWFwOjpXZWFrSGVhcChIZWFwKiBoZWFw
KQorICAgIDogbV9hbGxvY2F0b3IoMCkKKyAgICAsIG1fbmV4dEFsbG9jYXRvcigwKQorICAgICwg
bV9oZWFwKGhlYXApCit7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0hlYXA6OmFsbG9jYXRl
KEpTVmFsdWUganNWYWx1ZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIsIHZvaWQq
IGNvbnRleHQpCit7CisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWxsb2NhdG9yID0gbV9hbGxv
Y2F0b3I7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIGFsbG9jYXRvciA9IGZpbmRBbGxv
Y2F0b3IoKTsKKyAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvci0+bmV4dDsKKworICAgIFdlYWtJ
bXBsKiB3ZWFrSW1wbCA9IFdlYWtCbG9jazo6YXNXZWFrSW1wbChhbGxvY2F0b3IpOworICAgIHJl
dHVybiBuZXcgKE5vdE51bGwsIHdlYWtJbXBsKSBXZWFrSW1wbChqc1ZhbHVlLCB3ZWFrSGFuZGxl
T3duZXIsIGNvbnRleHQpOworfQorCitpbmxpbmUgdm9pZCBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShX
ZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgV2Vha0Jsb2NrOjpibG9ja0Zvcih3ZWFrSW1wbCkt
PmRlYWxsb2NhdGUod2Vha0ltcGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFdlYWtIZWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0ltcGwuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBsLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWFrSW1w
bF9oCisjZGVmaW5lIFdlYWtJbXBsX2gKKworI2luY2x1ZGUgIkpTVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFdlYWtIYW5kbGVPd25lcjsKKworY2xhc3MgV2Vha0ltcGwgewor
cHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBMaXZlICAgICAgICA9IDB4MCwKKyAg
ICAgICAgRGVhZCAgICAgICAgPSAweDEsCisgICAgICAgIEZpbmFsaXplZCAgID0gMHgyLAorICAg
ICAgICBEZWFsbG9jYXRlZCA9IDB4MworICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAgICAgU3Rh
dGVNYXNrICAgPSAweDMKKyAgICB9OworCisgICAgV2Vha0ltcGwoKTsKKyAgICBXZWFrSW1wbChK
U1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqLCB2b2lkKiBjb250ZXh0KTsKKworICAgIFN0YXRlIHN0
YXRlKCk7CisgICAgdm9pZCBzZXRTdGF0ZShTdGF0ZSk7CisKKyAgICBjb25zdCBKU1ZhbHVlJiBq
c1ZhbHVlKCk7CisgICAgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIoKTsKKyAgICB2
b2lkKiBjb250ZXh0KCk7CisKKyAgICBzdGF0aWMgV2Vha0ltcGwqIGFzV2Vha0ltcGwoSlNWYWx1
ZSopOworCitwcml2YXRlOgorICAgIGNvbnN0IEpTVmFsdWUgbV9qc1ZhbHVlOworICAgIFdlYWtI
YW5kbGVPd25lciogbV93ZWFrSGFuZGxlT3duZXI7CisgICAgdm9pZCogbV9jb250ZXh0OworfTsK
KworaW5saW5lIFdlYWtJbXBsOjpXZWFrSW1wbCgpCisgICAgOiBtX3dlYWtIYW5kbGVPd25lcigw
KQorICAgICwgbV9jb250ZXh0KDApCit7CisgICAgc2V0U3RhdGUoRGVhbGxvY2F0ZWQpOworfQor
CitpbmxpbmUgV2Vha0ltcGw6OldlYWtJbXBsKEpTVmFsdWUganNWYWx1ZSwgV2Vha0hhbmRsZU93
bmVyKiB3ZWFrSGFuZGxlT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgOiBtX2pzVmFsdWUoanNW
YWx1ZSkKKyAgICAsIG1fd2Vha0hhbmRsZU93bmVyKHdlYWtIYW5kbGVPd25lcikKKyAgICAsIG1f
Y29udGV4dChjb250ZXh0KQoreworICAgIEFTU0VSVChzdGF0ZSgpID09IExpdmUpOworfQorCitp
bmxpbmUgV2Vha0ltcGw6OlN0YXRlIFdlYWtJbXBsOjpzdGF0ZSgpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFN0YXRlPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxl
T3duZXIpICYgU3RhdGVNYXNrKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0ltcGw6OnNldFN0YXRl
KFdlYWtJbXBsOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUgPj0gdGhpcy0+c3Rh
dGUoKSk7CisgICAgbV93ZWFrSGFuZGxlT3duZXIgPSByZWludGVycHJldF9jYXN0PFdlYWtIYW5k
bGVPd25lcio+KChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxlT3duZXIp
ICYgflN0YXRlTWFzaykgfCBzdGF0ZSk7Cit9CisKK2lubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFr
SW1wbDo6anNWYWx1ZSgpCit7CisgICAgcmV0dXJuIG1fanNWYWx1ZTsKK30KKworaW5saW5lIFdl
YWtIYW5kbGVPd25lciogV2Vha0ltcGw6OndlYWtIYW5kbGVPd25lcigpCit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0hhbmRsZU93bmVyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihtX3dlYWtIYW5kbGVPd25lcikgJiB+U3RhdGVNYXNrKSk7Cit9CisKK2lubGluZSB2
b2lkKiBXZWFrSW1wbDo6Y29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dDsKK30KKwor
aW5saW5lIFdlYWtJbXBsKiBXZWFrSW1wbDo6YXNXZWFrSW1wbChKU1ZhbHVlKiBzbG90KQorewor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4ocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc2xvdCkgKyBPQkpFQ1RfT0ZGU0VUT0YoV2Vha0ltcGwsIG1fanNWYWx1ZSkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFdlYWtJbXBsX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU3
NSw3ICszNTc1LDcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpbwog
TmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYykKIHsKICAgICBIb3N0RnVuY3Rpb25TdHViTWFw
OjpBZGRSZXN1bHQgZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmFkZChmdW5jdGlvbiwg
UGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7Ci0gICAgaWYgKCEqZW50cnkuaXRlcmF0b3It
PnNlY29uZCkgeworICAgIGlmICghZW50cnkuaXRlcmF0b3ItPnNlY29uZCkgewogICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZTsKICAgICAgICAgaWYgKGdlbmVyYXRvcikgewogICAg
ICAgICAgICAgaWYgKGdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsNyArMzUx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1l
IEZyb20+CiAgICAgaW5saW5lIFRvIGpzQ2FzdChGcm9tKiBmcm9tKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGZyb20tPmluaGVyaXRzKCZXVEY6OlJlbW92ZVBvaW50ZXI8VG8+OjpUeXBlOjpzX2lu
Zm8pKTsKKyAgICAgICAgQVNTRVJUKCFmcm9tIHx8IGZyb20tPmluaGVyaXRzKCZXVEY6OlJlbW92
ZVBvaW50ZXI8VG8+OjpUeXBlOjpzX2luZm8pKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFRvPihmcm9tKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3
IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWQKICAgICAgICAgLy8g
VGhlcmUgYWxyZWFkeSBpcyBhbiBlbnRyeSEgLSB3ZSBzaG91bGQgb25seSBoaXQgdGhpcyB3aGVu
IGRlc3BlY2lmeWluZy4KICAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci5nZXQoKS5zZWNv
bmQtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOwogICAgICAgICBBU1NFUlQoIXN0cnVjdHVy
ZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7Ci0gICAgICAgIG1hcCgpLT5zZXQocmVzdWx0
Lml0ZXJhdG9yLCBzdHJ1Y3R1cmUpOworICAgICAgICBtYXAoKS0+c2V0KGdsb2JhbERhdGEsIHJl
c3VsdC5pdGVyYXRvci5nZXQoKS5maXJzdCwgc3RydWN0dXJlKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNDZWxsOwogY2xhc3Mg
U3RydWN0dXJlOwogCiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewpAQCAtODMsMTAg
Kzg0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICAgICAgaWYgKCFzbG90KQor
ICAgICAgICBXZWFrSW1wbCogaW1wbCA9IHRoaXMtPndlYWtJbXBsKCk7CisgICAgICAgIGlmICgh
aW1wbCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihz
bG90KS0+ZGVhbGxvY2F0ZShzbG90KTsKKyAgICAgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUoaW1w
bCk7CiAgICAgfQogCiAgICAgaW5saW5lIHZvaWQgYWRkKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSopOwpAQCAtMTA1LDE4ICsxMDYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VHJhbnNpdGlvbk1hcCo+KG1fZGF0YSk7CiAgICAgfQogCi0gICAgSGFuZGxl
U2xvdCBzbG90KCkgY29uc3QKKyAgICBXZWFrSW1wbCogd2Vha0ltcGwoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwotICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxIYW5kbGVTbG90PihtX2RhdGEgJiB+VXNpbmdTaW5nbGVTbG90RmxhZyk7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4obV9kYXRhICYgflVz
aW5nU2luZ2xlU2xvdEZsYWcpOwogICAgIH0KIAogICAgIHZvaWQgc2V0TWFwKFRyYW5zaXRpb25N
YXAqIG1hcCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCkpCi0gICAg
ICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5kZWFsbG9jYXRlKHNsb3QpOworICAg
ICAgICBpZiAoV2Vha0ltcGwqIGltcGwgPSB0aGlzLT53ZWFrSW1wbCgpKQorICAgICAgICAgICAg
V2Vha0hlYXA6OmRlYWxsb2NhdGUoaW1wbCk7CiAKICAgICAgICAgLy8gVGhpcyBpbXBsaWNpdGx5
IGNsZWFycyB0aGUgZmxhZyB0aGF0IGluZGljYXRlcyB3ZSdyZSB1c2luZyBhIHNpbmdsZSB0cmFu
c2l0aW9uCiAgICAgICAgIG1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1hcCk7
CkBAIC0xMjcsOSArMTI4LDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmUqIHNpbmdsZVRyYW5z
aXRpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkp
OwotICAgICAgICBpZiAoSGFuZGxlU2xvdCBzbG90ID0gdGhpcy0+c2xvdCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoKnNsb3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
U3RydWN0dXJlKj4oc2xvdC0+YXNDZWxsKCkpOworICAgICAgICBpZiAoV2Vha0ltcGwqIGltcGwg
PSB0aGlzLT53ZWFrSW1wbCgpKSB7CisgICAgICAgICAgICBpZiAoaW1wbC0+c3RhdGUoKSA9PSBX
ZWFrSW1wbDo6TGl2ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxT
dHJ1Y3R1cmUqPihpbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KQEAgLTEzNywxNCArMTM4LDEwIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXRTaW5nbGVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7
Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICAgICAgaWYgKCFz
bG90KSB7Ci0gICAgICAgICAgICBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+
YWxsb2NhdGUoKTsKLSAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPm1ha2VX
ZWFrKHNsb3QsIDAsIDApOwotICAgICAgICAgICAgbV9kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oc2xvdCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwotICAgICAgICB9Ci0gICAgICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihzbG90LCByZWludGVycHJl
dF9jYXN0PEpTQ2VsbCo+KHN0cnVjdHVyZSkpOwotICAgICAgICAqc2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SlNDZWxsKj4oc3RydWN0dXJlKTsKKyAgICAgICAgaWYgKFdlYWtJbXBsKiBpbXBsID0g
dGhpcy0+d2Vha0ltcGwoKSkKKyAgICAgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwp
OworICAgICAgICBXZWFrSW1wbCogaW1wbCA9IGdsb2JhbERhdGEuaGVhcC53ZWFrSGVhcCgpLT5h
bGxvY2F0ZShyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHN0cnVjdHVyZSkpOworICAgICAgICBt
X2RhdGEgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbXBsKSB8IFVzaW5nU2luZ2xlU2xv
dEZsYWc7CiAgICAgfQogCiAgICAgaW50cHRyX3QgbV9kYXRhOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIGNsYXNzIFdlYWtHQ01hcCA6IHByaXZhdGUgV2Vha0hhbmRsZU93bmUKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWFr
R0NNYXApOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5cGUsIEhhbmRsZVNsb3QsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZz4gTWFwVHlwZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSwg
V2Vha0ltcGwqLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IE1hcFR5cGU7CiAgICAgdHlwZWRlZiB0
eXBlbmFtZSBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlw
ZTsKICAgICB0eXBlZGVmIHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIG1hcF9pdGVyYXRvcjsK
IApAQCAtNjQsOCArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgc3RkOjpwYWlyPEtleVR5cGUsIEV4dGVybmFsVHlwZT4gZ2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RkOjptYWtlX3BhaXIobV9pdGVyYXRvci0+Zmlyc3QsIEhhbmRsZVR5cGVzPE1h
cHBlZFR5cGU+OjpnZXRGcm9tU2xvdChtX2l0ZXJhdG9yLT5zZWNvbmQpKTsgfQotICAgICAgICBz
dGQ6OnBhaXI8S2V5VHlwZSwgSGFuZGxlU2xvdD4gZ2V0U2xvdCgpIGNvbnN0IHsgcmV0dXJuICpt
X2l0ZXJhdG9yOyB9CisgICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5cGU+IGdl
dCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0LCBIYW5k
bGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJm1f
aXRlcmF0b3ItPnNlY29uZC0+anNWYWx1ZSgpKSkpOyB9CiAgICAgICAgIAogICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3IrKygpIHsgKyttX2l0ZXJhdG9yOyByZXR1cm4gKnRoaXM7IH0KICAgICAg
ICAgCkBAIC05MCw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1hcF9pdGVyYXRv
ciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICAgICAgZm9yIChtYXBfaXRlcmF0b3IgcHRyID0gbV9t
YXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICBIYW5kbGVIZWFwOjpo
ZWFwRm9yKHB0ci0+c2Vjb25kKS0+ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CisgICAgICAgICAg
ICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CiAgICAgICAgIG1fbWFwLmNsZWFy
KCk7CiAgICAgfQogCkBAIC0xMDcsNjQgKzEwNiw0MiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmUoaXRlcmF0b3IgaXRlcikKICAgICB7CiAgICAgICAgIEFTU0VSVChpdGVyLm1faXRlcmF0b3Ig
IT0gbV9tYXAuZW5kKCkpOwotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSBpdGVyLm1faXRlcmF0
b3ItPnNlY29uZDsKLSAgICAgICAgQVNTRVJUKHNsb3QpOwotICAgICAgICBIYW5kbGVIZWFwOjpo
ZWFwRm9yKHNsb3QpLT5kZWFsbG9jYXRlKHNsb3QpOworICAgICAgICBXZWFrSW1wbCogaW1wbCA9
IGl0ZXIubV9pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBBU1NFUlQoaW1wbCk7CisgICAgICAg
IFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgICAgICBtX21hcC5yZW1vdmUoaXRlci5t
X2l0ZXJhdG9yKTsKICAgICB9CiAKICAgICBFeHRlcm5hbFR5cGUgZ2V0KGNvbnN0IEtleVR5cGUm
IGtleSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBl
Pjo6Z2V0RnJvbVNsb3QobV9tYXAuZ2V0KGtleSkpOwotICAgIH0KLQotICAgIEhhbmRsZVNsb3Qg
Z2V0U2xvdChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9tYXAuZ2V0KGtleSk7CisgICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6
Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJm1fbWFwLmdldChrZXkpLT5qc1ZhbHVl
KCkpKTsKICAgICB9CiAKICAgICBBZGRSZXN1bHQgYWRkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAgewogICAgICAg
ICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7
Ci0gICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgSGFuZGxlU2xv
dCBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gc2xvdDsKLSAgICAgICAgICAgIEhhbmRs
ZUhlYXA6OmhlYXBGb3Ioc2xvdCktPm1ha2VXZWFrKHNsb3QsIHRoaXMsIEZpbmFsaXplckNhbGxi
YWNrOjpmaW5hbGl6ZXJDb250ZXh0Rm9yKGtleSkpOwotICAgICAgICAgICAgSGFuZGxlSGVhcDo6
aGVhcEZvcihzbG90KS0+d3JpdGVCYXJyaWVyKHNsb3QsIHZhbHVlKTsKLSAgICAgICAgICAgICpz
bG90ID0gdmFsdWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBnbG9iYWxEYXRhLmhlYXAud2Vh
a0hlYXAoKS0+YWxsb2NhdGUodmFsdWUsIHRoaXMsIEZpbmFsaXplckNhbGxiYWNrOjpmaW5hbGl6
ZXJDb250ZXh0Rm9yKGtleSkpOworCiAgICAgICAgIC8vIFdlYWtHQ01hcCBleHBvc2VzIGEgZGlm
ZmVyZW50IGl0ZXJhdG9yLCBzbyB3ZSBuZWVkIHRvIHdyYXAgaXQgYW5kIGNyZWF0ZSBvdXIgb3du
IEFkZFJlc3VsdC4KICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChpdGVyYXRvcihyZXN1bHQuaXRl
cmF0b3IpLCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0KGl0
ZXJhdG9yIGl0ZXIsIEV4dGVybmFsVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEhhbmRsZVNs
b3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+c2Vjb25kOwotICAgICAgICBBU1NFUlQoc2xvdCk7
Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihzbG90LCB2
YWx1ZSk7Ci0gICAgICAgICpzbG90ID0gdmFsdWU7Ci0gICAgfQogCiAgICAgdm9pZCBzZXQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBLZXlUeXBlJiBrZXksIEV4dGVybmFsVHlwZSB2
YWx1ZSkKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQg
PSBtX21hcC5hZGQoa2V5LCAwKTsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAg
ICAgICAgc2xvdCA9IGdsb2JhbERhdGEuaGVhcC5oYW5kbGVIZWFwKCktPmFsbG9jYXRlKCk7Ci0g
ICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5tYWtlV2VhayhzbG90LCB0aGlz
LCBrZXkpOwotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBzbG90OwotICAg
ICAgICB9Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihz
bG90LCB2YWx1ZSk7Ci0gICAgICAgICpzbG90ID0gdmFsdWU7CisgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCisgICAgICAgICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gZ2xvYmFs
RGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxs
YmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKICAgICB9CiAKICAgICBFeHRlcm5hbFR5
cGUgdGFrZShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgewotICAgICAgICBIYW5kbGVTbG90IHNs
b3QgPSBtX21hcC50YWtlKGtleSk7Ci0gICAgICAgIGlmICghc2xvdCkKKyAgICAgICAgV2Vha0lt
cGwqIGltcGwgPSBtX21hcC50YWtlKGtleSk7CisgICAgICAgIGlmICghaW1wbCkKICAgICAgICAg
ICAgIHJldHVybiBIYXNoVHJhaXRzPEV4dGVybmFsVHlwZT46OmVtcHR5VmFsdWUoKTsKLSAgICAg
ICAgRXh0ZXJuYWxUeXBlIHJlc3VsdCA9IEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9t
U2xvdChzbG90KTsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0
ZShzbG90KTsKKyAgICAgICAgRXh0ZXJuYWxUeXBlIHJlc3VsdCA9IEhhbmRsZVR5cGVzPE1hcHBl
ZFR5cGU+OjpnZXRGcm9tU2xvdChjb25zdF9jYXN0PEpTVmFsdWUqPigmaW1wbC0+anNWYWx1ZSgp
KSk7CisgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIApAQCAtMTgxLDkgKzE1OCw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNv
bnRleHQpCiAgICAgewotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSBtX21hcC50YWtlKEZpbmFs
aXplckNhbGxiYWNrOjprZXlGb3JGaW5hbGl6ZXIoY29udGV4dCwgSGFuZGxlVHlwZXM8TWFwcGVk
VHlwZT46OmdldEZyb21TbG90KGhhbmRsZS5zbG90KCkpKSk7Ci0gICAgICAgIEFTU0VSVChzbG90
KTsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShzbG90KTsK
KyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSBtX21hcC50YWtlKEZpbmFsaXplckNhbGxiYWNrOjpr
ZXlGb3JGaW5hbGl6ZXIoY29udGV4dCwgSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21T
bG90KGhhbmRsZS5zbG90KCkpKSk7CisgICAgICAgIEFTU0VSVChpbXBsKTsKKyAgICAgICAgV2Vh
a0hlYXA6OmRlYWxsb2NhdGUoaW1wbCk7CiAgICAgfQogCiAgICAgTWFwVHlwZSBtX21hcDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjU4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAzLTI5ICBHZW9mZnJleSBH
YXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmlyc3Qgc3RlcCB0b3dhcmQgaW5j
cmVtZW50YWwgV2VhazxUPiBmaW5hbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBXZWJDb3JlIGZvciBXZWFrPFQ+IEFQSSBjaGFu
Z2VzLgorCisgICAgICAgICogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU3RyaW5nT3duZXI6OmZpbmFsaXplKTogV2UncmUgbm90IGFsbG93ZWQg
dG8gZ2V0KCkgYSBkZWFkIFdlYWs8VD4KKyAgICAgICAgYW55bW9yZSwgc28gdXNlIHRoZSBkZWJ1
Zy1vbmx5IHdhcygpIGhlbHBlciBmdW5jdGlvbiBpbnN0ZWFkLgorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjp1bmNhY2hlV3JhcHBlcik6
IERpdHRvLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmg6CisgICAgICAg
IChXZWJDb3JlOjpzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
ZWFySW5saW5lQ2FjaGVkV3JhcHBlcik6IFdlJ3JlIG5vdCBhbGxvd2VkIHRvIGdldCgpIGEgZGVh
ZAorICAgICAgICBXZWFrPFQ+LCBzbyBJIGhhZCB0byBwdXNoIGRvd24gdGhlc2UgQVNTRVJUcyBp
bnRvIFNjcmlwdFdyYXBwYWJsZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVGaWx0ZXJDb25kaXRpb246
OmFjY2VwdE5vZGUpOiBVcGRhdGVkIGZvciBub24tSGFuZGxlLW5lc3MKKyAgICAgICAgb2YgV2Vh
azxUPi4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0V3JhcHBhYmxlOjpzZXRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdFdyYXBwYWJsZTo6Y2xlYXJXcmFwcGVyKTogVXNlIHdhcygpLCBhcyBhYm92ZS4K
KwogMjAxMi0wMy0yOSAgQmVhciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CiAKICAgICAg
ICAgVXBkYXRlIENTUyBFeGNsdXNpb24gd3JhcC1mbG93IHZhbHVlcyBsZWZ0ICYgcmlnaHQgdG8g
c3RhcnQgJiBlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJX
b3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3Jh
cHBlcldvcmxkLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCB2b2lkIEpTU3RyaW5nT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlCiB7CiAgICAgSlNTdHJp
bmcqIGpzU3RyaW5nID0gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihoYW5kbGUuZ2V0KCkuYXNDZWxs
KCkpOwogICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBs
Kj4oY29udGV4dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChqc1N0cmluZywgbV93b3JsZC0+bV9zdHJp
bmdDYWNoZS5maW5kKHN0cmluZ0ltcGwpLT5zZWNvbmQuZ2V0KCkgPT0ganNTdHJpbmcpOworICAg
IEFTU0VSVF9VTlVTRUQoanNTdHJpbmcsIG1fd29ybGQtPm1fc3RyaW5nQ2FjaGUuZmluZChzdHJp
bmdJbXBsKS0+c2Vjb25kLndhcyhqc1N0cmluZykpOwogICAgIG1fd29ybGQtPm1fc3RyaW5nQ2Fj
aGUucmVtb3ZlKHN0cmluZ0ltcGwpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAs
NyBAQCBlbnVtIFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgIHsKICAgICAgICAgaWYgKGNs
ZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJzLmZpbmQoZG9t
T2JqZWN0KS0+c2Vjb25kLmdldCgpID09IHdyYXBwZXIpOworICAgICAgICBBU1NFUlQod29ybGQt
Pm1fd3JhcHBlcnMuZmluZChkb21PYmplY3QpLT5zZWNvbmQud2FzKHdyYXBwZXIpKTsKICAgICAg
ICAgd29ybGQtPm1fd3JhcHBlcnMucmVtb3ZlKGRvbU9iamVjdCk7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmgJKHJldmlzaW9uIDEx
MjU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIGlubGluZSBib29sIHNldElubGluZUNhY2hlZFdy
YXBwZXIoRE9NV3IKIHsKICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgQVNTRVJUKCFub2RlLT53cmFwcGVyKCkpOwogICAgIG5vZGUtPnNldFdy
YXBwZXIoKndvcmxkLT5nbG9iYWxEYXRhKCksIHdyYXBwZXIsIHdyYXBwZXJPd25lcih3b3JsZCwg
bm9kZSksIHdyYXBwZXJDb250ZXh0KHdvcmxkLCBub2RlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC01MSw4ICs1MCw3IEBAIGlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T00KIHsKICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgQVNTRVJUX1VOVVNFRCh3cmFwcGVyLCBub2RlLT53cmFwcGVyKCkgPT0gd3JhcHBlcik7
Ci0gICAgbm9kZS0+Y2xlYXJXcmFwcGVyKCk7CisgICAgbm9kZS0+Y2xlYXJXcmFwcGVyKHdyYXBw
ZXIpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgc2hvcnQgSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uOjphY2NlcHROb2RlKAogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAKLSAgICBpZiAoIW1fZmlsdGVyLmlzT2JqZWN0KCkpCisgICAgaWYgKCFtX2ZpbHRl
ciB8fCAhbV9maWx0ZXItPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpG
SUxURVJfQUNDRVBUOwogCiAgICAvLyBUaGUgZXhlYyBhcmd1bWVudCBoZXJlIHNob3VsZCBvbmx5
IGJlIG51bGwgaWYgdGhpcyB3YXMgY2FsbGVkIGZyb20gYQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxMSArNDUsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRXcmFwcGVyKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIsIEpTQzo6V2Vh
a0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQpCiAgICAgeworICAgICAg
ICBBU1NFUlQoIW1fd3JhcHBlcik7CiAgICAgICAgIG1fd3JhcHBlciA9IEpTQzo6UGFzc1dlYWs8
SlNET01XcmFwcGVyPihnbG9iYWxEYXRhLCB3cmFwcGVyLCB3cmFwcGVyT3duZXIsIGNvbnRleHQp
OwogICAgIH0KIAotICAgIHZvaWQgY2xlYXJXcmFwcGVyKCkKKyAgICB2b2lkIGNsZWFyV3JhcHBl
cihKU0RPTVdyYXBwZXIqIHdyYXBwZXIpCiAgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHdy
YXBwZXIsIG1fd3JhcHBlci53YXMod3JhcHBlcikpOwogICAgICAgICBtX3dyYXBwZXIuY2xlYXIo
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjU4NykKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAz
LTI5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmlyc3Qg
c3RlcCB0b3dhcmQgaW5jcmVtZW50YWwgV2VhazxUPiBmaW5hbGl6YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjcwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBmb3IgQVBJIGNoYW5n
ZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmZpbmFsaXpl
KToKKwogMjAxMi0wMy0yOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjExMjU1My4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RN
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgTlBSdW50aW1lT2Jq
ZWN0TWFwOjpmaW5hbGl6ZShKU0M6OkgKIHsKICAgICBIYXNoTWFwPE5QT2JqZWN0KiwgSlNDOjpX
ZWFrPEpTTlBPYmplY3Q+ID46Oml0ZXJhdG9yIGZvdW5kID0gbV9qc05QT2JqZWN0cy5maW5kKHN0
YXRpY19jYXN0PE5QT2JqZWN0Kj4oY29udGV4dCkpOwogICAgIEFTU0VSVChmb3VuZCAhPSBtX2pz
TlBPYmplY3RzLmVuZCgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgYXNPYmplY3QoaGFu
ZGxlLmdldCgpKSA9PSBmb3VuZC0+c2Vjb25kKTsKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwg
YXNPYmplY3QoaGFuZGxlLmdldCgpKSA9PSBmb3VuZC0+c2Vjb25kLmdldCgpKTsKICAgICBKU05Q
T2JqZWN0KiBvYmplY3QgPSBmb3VuZC0+c2Vjb25kLmdldCgpOwogICAgIG1fanNOUE9iamVjdHMu
cmVtb3ZlKGZvdW5kKTsKICAgICBhZGRUb0ludmFsaWRhdGlvblF1ZXVlKG9iamVjdC0+bGVha05Q
T2JqZWN0KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05ldHNjYXBlUGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCShyZXZpc2lvbiAxMTI1
NzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9IVFRQSGVhZGVyTWFwLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9LVVJMLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvU2NvcGVDaGFpbi5oPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135114</attachid>
            <date>2012-04-02 09:04:35 -0700</date>
            <delta_ts>2012-04-02 14:58:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82670-20120402090337.patch</filename>
            <type>text/plain</type>
            <size>104221</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MiBA
QAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyBhIFdlYWs8VD4gaGVhcCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBpbmNyZW1l
bnRhbAorICAgICAgICBmaW5hbGl6YXRpb24sIHdoaWxlIG1ha2luZyBhcyBmZXcgYmVoYXZpb3Ig
Y2hhbmdlcyBhcyBwb3NzaWJsZS4gVGhlIGJlaGF2aW9yCisgICAgICAgIGNoYW5nZXMgaXQgbWFr
ZXMgYXJlOgorCisgICAgICAgICgqKSBXZWFrPFQ+J3MgcmF3IEpTVmFsdWUgbm8gbG9uZ2VyIHJl
dmVydHMgdG8gSlNWYWx1ZSgpIGF1dG9tYXRpY2FsbHkgLS0KKyAgICAgICAgaW5zdGVhZCwgYSBz
ZXBhcmF0ZSBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBKU1ZhbHVlIGlzIG5vIGxvbmdlciB2YWxp
ZC4KKyAgICAgICAgKFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgSlNWYWx1ZSBjYW4gYmUg
cHJlc2VydmVkIGZvciBsYXRlciBmaW5hbGl6YXRpb24uKQorICAgICAgICBPYmplY3RzIGRlYWxp
bmcgd2l0aCBXZWFrSW1wbHMgZGlyZWN0bHkgbXVzdCBjaGFuZ2UgdG8gY2hlY2sgdGhlIGZsYWcu
CisKKyAgICAgICAgKCopIFdlYWs8VD4gaXMgbm8gbG9uZ2VyIGEgc3ViY2xhc3Mgb2YgSGFuZGxl
PFQ+LgorCisgICAgICAgICgqKSBET00gR0MgcGVyZm9ybWFuY2UgaXMgZGlmZmVyZW50IC0tIDkl
IGZhc3RlciBpbiB0aGUgZ2VvbWV0cmljIG1lYW4sCisgICAgICAgIGJ1dCAxNSUgc2xvd2VyIGlu
IG9uZSBzcGVjaWZpYyBjYXNlOgorICAgICAgICAgICAgICAgIGdjLWRvbTEuaHRtbDogNiUgIGZh
c3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTIuaHRtbDogMjMlIGZhc3RlcgorICAgICAgICAg
ICAgICAgIGdjLWRvbTMuaHRtbDogMTclIGZhc3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTQu
aHRtbDogMTUlICpzbG93ZXIqCisKKyAgICAgICAgVGhlIGtleSBmZWF0dXJlcyBvZiB0aGlzIG5l
dyBoZWFwIGFyZToKKworICAgICAgICAoKikgRWFjaCBibG9jayBrbm93cyBpdHMgb3duIHN0YXRl
LCBpbmRlcGVuZGVudCBvZiBhbnkgb3RoZXIgYmxvY2tzLgorCisgICAgICAgICgqKSBFYWNoIGJs
b2NrIGNhY2hlcyBpdHMgb3duIHN3ZWVwIHJlc3VsdC4KKworICAgICAgICAoKikgVGhlIGhlYXAg
dmlzaXRzIGRlYWQgV2VhazxUPnMgYXQgdGhlIGVuZCBvZiBHQy4gKEl0IGRvZXNuJ3QKKyAgICAg
ICAgbWFyayB0aGVtIHlldCwgc2luY2UgdGhhdCB3b3VsZCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4p
CisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tPYmplY3REYXRhOjpmaW5hbGl6ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Ojppbml0KTogVXBkYXRlZCB0byB1c2Ug
dGhlIG5ldyBXZWFrSGVhcCBBUEkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6IFBhaWQgdGhlIGJ1aWxkIHN5c3RlbSB0
YXggc2luY2UgSSBhZGRlZCBzb21lIG5ldyBmaWxlcy4KKworICAgICAgICAqIGhlYXAvSGFuZGxl
Lmg6IE1hZGUgV2Vha0Jsb2NrIGEgZnJpZW5kIGFuZCBleHBvc2VkIHNsb3QoKSBhcyBwdWJsaWMs
CisgICAgICAgIHNvIHdlIGNhbiBrZWVwIHBhc3NpbmcgYSBIYW5kbGU8VD4gdG8gZmluYWxpemVy
cywgdG8gYXZvaWQgbW9yZSBzdXJmYWNlCisgICAgICAgIGFyZWEgY2hhbmdlIGluIHRoaXMgcGF0
Y2guIEEgZm9sbG93LXVwIHBhdGNoIHNob3VsZCBjaGFuZ2UgdGhlIHR5cGUgd2UKKyAgICAgICAg
cGFzcyB0byBmaW5hbGl6ZXJzLgorCisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmNwcDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OndyaXRlQmFycmllcik6Cisg
ICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUpOgorICAgICAgICAqIGhlYXAvSGFu
ZGxlSGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZUhlYXApOgorICAgICAg
ICAoTm9kZSk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUpOiBSZW1vdmVk
IGFsbCBjb2RlIHJlbGF0ZWQgdG8gV2VhazxUPiwgc2luY2UKKyAgICAgICAgd2UgaGF2ZSBhIHNl
cGFyYXRlIFdlYWtIZWFwIG5vdy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OkhlYXApOiBSZW1vdmVkIG1fZXh0cmFDb3N0IGJlY2F1c2UgZXh0cmEgY29z
dCBpcyBhY2NvdW50ZWQKKyAgICAgICAgZm9yIHRocm91Z2ggb3VyIHdhdGVybWFyayBub3cuIFJl
bW92ZWQgbV93YXRlck1hcmsgYmVjYXVzZSBpdCB3YXMgdW51c2VkLgorCisgICAgICAgIChKU0M6
OkhlYXA6OmRlc3Ryb3kpOiBVcGRhdGVkIGZvciBhZGRpdGlvbiBvZiBXZWFrSGVhcC4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZSk6IENoYW5nZWQg
ZnJvbSB1c2luZyBpdHMgb3duCisgICAgICAgIHZhcmlhYmxlIHRvIHBhcnRpY2lwYXRpbmcgaW4g
dGhlIHdhdGVybWFyayBzdHJhdGVneS4gSSB3YW50ZWQgdG8gc3RhbmRhcmRpemUKKyAgICAgICAg
V2Vha0hlYXAgYW5kIGFsbCBvdGhlciBIZWFwIGNsaWVudHMgb24gdGhpcyBzdHJhdGVneSwgdG8g
bWFrZSBzdXJlIGl0J3MKKyAgICAgICAgYWNjdXJhdGUuCisgCisgICAgICAgIChKU0M6OkhlYXA6
Om1hcmtSb290cyk6IFVwZGF0ZWQgZm9yIGFkZGl0aW9uIG9mIFdlYWtIZWFwLiBBZGRlZCBXZWFr
SGVhcAorICAgICAgICBkZWFkIHZpc2l0IHBhc3MsIGFzIGV4cGxhaW5lZCBhYm92ZS4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVzZXRBbGxv
Y2F0b3JzKTogVXBkYXRlZCBmb3IgYWRkaXRpb24gb2YgV2Vha0hlYXAuCisKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6RmluYWxpemVyT3du
ZXI6OmZpbmFsaXplKTogVXBkYXRlZCBmb3IgbmV3IFdlYWs8VD4gQVBJLgorCisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndlYWtIZWFwKToKKyAgICAgICAgKEhl
YXApOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1dhdGVyTWFyayk6IEFkZGVkIGEgd2F5IHRv
IHBhcnRpY2lwYXRlIGluIHRoZSB3YXRlcm1hcmtpbmcKKyAgICAgICAgc3RyYXRlZ3ksIHNpbmNl
IHRoaXMgaXMgdGhlIGJlc3Qgd2F5IGZvciBXZWFrSGVhcCB0byByZXBvcnQgaXRzIG1lbW9yeQor
ICAgICAgICBjb3N0LiAoSSBwbGFuIHRvIHVwZGF0ZSB0aGlzIGluIGEgZm9sbG93LXVwIHBhdGNo
IHRvIG1ha2UgaXQgbW9yZSBhY2N1cmF0ZSwKKyAgICAgICAgYnV0IGZvciBub3cgaXQgaXMgbm90
IGxlc3MgYWNjdXJhdGUgdGhhbiBpdCB1c2VkIHRvIGJlLikKKworICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjphZGRUb1dhdGVyTWFyayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpkaWRDb25zdW1lRnJlZUxpc3QpOiBSZW1vdmVkIG1fbnVyc2VyeVdhdGVyTWFyayBiZWNhdXNl
CisgICAgICAgIGl0IHdhcyB1bnVzZWQsIGFuZCBJIGRpZG4ndCB3YW50IHRvIHVwZGF0ZSBXZWFr
SGVhcCB0byBrZWVwIGFuIHVzdXNlZAorICAgICAgICB2YXJpYWJsZSB3b3JraW5nLiBBZGRlZCBB
UEkgZm9yIGFib3ZlLgorCisgICAgICAgICogaGVhcC9QYXNzV2Vhay5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKFdlYWtJbXBsQWNjZXNzb3IpOgorICAgICAgICAoUGFzc1dlYWspOgorICAg
ICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6OjpnZXQpOgorICAgICAgICAo
SlNDOjo6Ondhcyk6CisgICAgICAgIChKU0M6Ojo6UGFzc1dlYWspOgorICAgICAgICAoSlNDOjo6
On5QYXNzV2Vhayk6CisgICAgICAgIChKU0M6OlVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAg
ICAoSlNDOjo6OmxlYWtJbXBsKToKKyAgICAgICAgKEpTQzo6YWRvcHRXZWFrKToKKyAgICAgICAg
KiBoZWFwL1N0cm9uZy5oOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yISk6CisgICAg
ICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKToKKyAgICAgICAgKEpTQzo6U3Ryb25nOjpnZXQpOgorICAgICAgICAqIGhlYXAv
V2Vhay5oOgorICAgICAgICAoV2Vhayk6CisgICAgICAgIChKU0M6Ojo6V2Vhayk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjo6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6Ojp+V2Vhayk6CisgICAgICAgIChKU0M6Ojo6c3dhcCk6CisgICAgICAgIChKU0M6
Oj0pOgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6VW5zcGVjaWZp
ZWRCb29sVHlwZSk6CisgICAgICAgIChKU0M6Ojo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6Ojo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjo6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IExvdHMgb2Yg
Y29kZSBjaGFuZ2VzIGhlcmUsIGJ1dCB0aGV5IGJvaWwKKyAgICAgICAgZG93biB0byB0d28gdGhp
bmdzOgorCisgICAgICAgICgqKSBBbGxvY2F0ZSBXZWFrSW1wbHMgZnJvbSB0aGUgV2Vha0hlYXAg
aW5zdGVhZCBvZiBIYW5kbGVzIGZyb20gdGhlIEhhbmRsZUhlYXAuCisKKyAgICAgICAgKCopIEV4
cGxpY2l0bHkgY2hlY2sgV2Vha0ltcGw6OnN0YXRlKCkgZm9yIG5vbi1saXZlbmVzcyBiZWZvcmUg
cmV0dXJuaW5nCisgICAgICAgIGEgdmFsdWUgKGV4cGxhaW5lZCBhYm92ZSkuCisKKyAgICAgICAg
VGhlc2UgZmlsZXMgaW1wbGVtZW50IHRoZSBuZXcgV2VhazxUPiBoZWFwIGJlaGF2aW9yIGRlc2Ny
aWJlZCBhYm92ZToKKworICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDogQWRkZWQuCisgICAg
ICAgICogaGVhcC9XZWFrQmxvY2suaDogQWRkZWQuCisgICAgICAgICogaGVhcC9XZWFrSGFuZGxl
T3duZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIYW5kbGVPd25lci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIZWFwLmNwcDogQWRkZWQuCisgICAgICAgICogaGVhcC9X
ZWFrSGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtJbXBsLmg6IEFkZGVkLgorCisg
ICAgICAgIE9uZSBpbnRlcmVzdGluZyBkaWZmZXJlbmNlIGZyb20gdGhlIG9sZCBoZWFwIGlzIHRo
YXQgd2UgZG9uJ3QgYWxsb3cKKyAgICAgICAgY2xpZW50cyB0byBvdmVyd3JpdGUgYSBXZWFrSW1w
bCBhZnRlciBhbGxvY2F0aW5nIGl0LCBhbmQgd2UgZG9uJ3QgcmVjeWNsZQorICAgICAgICBXZWFr
SW1wbHMgcHJpb3IgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBs
YXp5IGZpbmFsaXphdGlvbiwKKyAgICAgICAgYnV0IGl0IHdpbGwgYWxzbyBoZWxwIHVzIGVzYWJs
aXNoIGEgdXNlZnVsIGludmFyaWFudCBpbiB0aGUgZnV0dXJlOiBhbGxvY2F0aW5nCisgICAgICAg
IGEgV2Vha0ltcGwgd2lsbCBiZSBhIGJpbmRpbmcgY29udHJhY3QgdG8gcnVuIGEgZmluYWxpemVy
IGF0IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgIGZ1dHVyZSwgZXZlbiBpZiB0aGUgV2Vha0lt
cGwgaXMgbGF0ZXIgZGVhbGxvY2F0ZWQuCisKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOiBDaGVjayB0aGUgV2Vh
azxUPiBmb3IgISBpbnN0ZWFkIG9mCisgICAgICAgIGl0cyBKU1ZhbHVlLCBzaW5jZSB0aGF0J3Mg
b3VyIEFQSSBjb250cmFjdCBub3csIGFuZCB0aGUgSlNWYWx1ZSBtaWdodAorICAgICAgICBiZSBz
dGFsZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OmpzQ2Fz
dCk6IEFsbG93IGNhc3RpbmcgTlVMTCBwb2ludGVycyBiZWNhdXNlIGl0J3MgdXNlZnVsIGFuZCBo
YXJtbGVzcy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOiBJIGNhbid0IHJlbWVtYmVyIHdoeSBJ
IGRpZCB0aGlzLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOiBJIGhhZCB0byB1cGRhdGUgdGhlc2Ug
Y2xhc3NlcyBiZWNhdXNlIHRoZXkgYWxsb2NhdGUKKyAgICAgICAgYW5kIGRlYWxsb2NhdGUgd2Vh
ayBwb2ludGVycyBtYW51YWxseS4gVGhleSBzaG91bGQgcHJvYmFibHkgc3RvcCBkb2luZyB0aGF0
LgorCiAyMDEyLTAzLTI5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeCBwMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDE5IEBAIFNF
VChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwCisgICAgaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCi0gICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSGVhcC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAg
ICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcAogICAg
IGhlYXAvTWFya2VkU3BhY2UuY3BwCi0gICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAg
ICBoZWFwL01hcmtTdGFjay5jcHAKKyAgICBoZWFwL1dlYWtIZWFwLmNwcAorICAgIGhlYXAvV2Vh
a0hhbmRsZU93bmVyLmNwcAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogCiAgICAgZGVidWdnZXIv
RGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAsNiArMjUwLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFwLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDYgKzIxNyw5IEBACiAgICAgICAgICAgICAnYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAnLAogICAgICAgICAgICAgJ2J5dGVjb21waWxlci9SZWdpc3RlcklELmgnLAogICAgICAgICAg
ICAgJ2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwJywKKyAgICAgICAgICAgICdoZWFwL1dlYWtI
ZWFwLmNwcCcsCisgICAgICAgICAgICAnaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwJywKKyAgICAg
ICAgICAgICdoZWFwL1dlYWtCbG9jay5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlSGVh
cC5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlU3RhY2suY3BwJywKICAgICAgICAgICAg
ICdoZWFwL0hlYXAuY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0NvcGllZFNwYWNl
LmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAogICAgIGhlYXAvREZHQ29k
ZUJsb2Nrcy5jcHAgXAorICAgIGhlYXAvV2Vha0hlYXAuY3BwIFwKKyAgICBoZWFwL1dlYWtIYW5k
bGVPd25lci5jcHAgXAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVI
ZWFwLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw3IEBAIHZvaWQgSlND
YWxsYmFja09iamVjdERhdGE6OmZpbmFsaXplKEhhbmQKICAgICBmb3IgKDsganNDbGFzczsganND
bGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKQogICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6
ZUNhbGxiYWNrIGZpbmFsaXplID0ganNDbGFzcy0+ZmluYWxpemUpCiAgICAgICAgICAgICBmaW5h
bGl6ZSh0aGlzUmVmKTsKLSAgICBIYW5kbGVTbG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwotICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgV2Vha0hl
YXA6OmRlYWxsb2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQog
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTEyNTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNCArMTAyLDExIEBAIHZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojppbml0KEV4ZWMKICAgICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwg
dG9SZWYodGhpcykpOwogICAgIH0KIAotICAgIGJvb2wgbmVlZHNGaW5hbGl6ZXIgPSBmYWxzZTsK
LSAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHIg
JiYgIW5lZWRzRmluYWxpemVyOyBqc0NsYXNzUHRyID0ganNDbGFzc1B0ci0+cGFyZW50Q2xhc3Mp
Ci0gICAgICAgIG5lZWRzRmluYWxpemVyID0ganNDbGFzc1B0ci0+ZmluYWxpemU7Ci0gICAgaWYg
KG5lZWRzRmluYWxpemVyKSB7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGV4ZWMtPmdsb2Jh
bERhdGEoKS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0
KCksIGNsYXNzUmVmKCkpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0
ZUJhcnJpZXIoc2xvdCwgdGhpcyk7Ci0gICAgICAgICpzbG90ID0gdGhpczsKKyAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHI7IGpzQ2xhc3NQdHIg
PSBqc0NsYXNzUHRyLT5wYXJlbnRDbGFzcykgeworICAgICAgICBpZiAoanNDbGFzc1B0ci0+Zmlu
YWxpemUpIHsKKyAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLndlYWtIZWFwKCkt
PmFsbG9jYXRlKHRoaXMsIG1fY2FsbGJhY2tPYmplY3REYXRhLmdldCgpLCBjbGFzc1JlZigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2
aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0Jh
c2UueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJD
b21waWxlclZlcnNpb24ueGNjb25maWciCiAKIENPTVBJTEVSX1NQRUNJRklDX1dBUk5JTkdfQ0ZM
QUdTID0gJChDT01QSUxFUl9TUEVDSUZJQ19XQVJOSU5HX0NGTEFHU18kKFRBUkdFVF9HQ0NfVkVS
U0lPTikpOwotQ09NUElMRVJfU1BFQ0lGSUNfV0FSTklOR19DRkxBR1NfTExWTV9DT01QSUxFUiA9
IC1XZ2xvYmFsLWNvbnN0cnVjdG9ycyAtV2V4aXQtdGltZS1kZXN0cnVjdG9yczsKIAogQ0xBTkdf
V0FSTl9DWFgwWF9FWFRFTlNJT05TID0gTk87CiBERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBk
d2FyZjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgko
d29ya2luZyBjb3B5KQpAQCAtNSw5ICs1LDkgQEAgRVhQT1JUUwogICAgID8/JHN0cnRvZEAkMEFA
JDAwQFdURkBAWUFOUEJEUEFQQURAWgogICAgID8/JHN0cnRvZEAkMEFAJDBBQEBXVEZAQFlBTlBC
RFBBUEFEQFoKICAgICA/PzBBcnJheUJ1ZmZlclZpZXdAV1RGQEBJQUVAVj8kUGFzc1JlZlB0ckBW
QXJyYXlCdWZmZXJAV1RGQEBAMUBJQFoKKyAgICA/PzBDb2xsYXRvckBXVEZAQFFBRUBQQkRAWgog
ICAgID8/MENTdHJpbmdAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBC
RElAWgotICAgID8/MENvbGxhdG9yQFdURkBAUUFFQFBCREBaCiAgICAgPz8wRGF0ZUluc3RhbmNl
QEpTQ0BASUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wRGVmYXVs
dEdDQWN0aXZpdHlDYWxsYmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoKICAgICA/PzBEcm9wQWxs
TG9ja3NASlNMb2NrQEpTQ0BAUUFFQFc0SlNMb2NrQmVoYXZpb3JAMkBAWgpAQCAtMjUsMTAgKzI1
LDEwIEBAIEVYUE9SVFMKICAgICA/PzBTdHJpbmdPYmplY3RASlNDQEBJQUVAQUFWSlNHbG9iYWxE
YXRhQDFAUEFWU3RydWN0dXJlQDFAQFoKICAgICA/PzBTdHJ1Y3R1cmVASlNDQEBBQUVAQUFWSlNH
bG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBWSlNWYWx1ZUAxQEFCVlR5cGVJbmZvQDFA
UEJVQ2xhc3NJbmZvQDFAQFoKICAgICA/PzBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVAWFoKLSAg
ICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCREBaCi0gICAgPz8wVVN0cmluZ0BKU0NAQFFBRUBQQkRJ
QFoKICAgICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCX1dAWgogICAgID8/MFVTdHJpbmdASlNDQEBR
QUVAUEJfV0lAWgorICAgID8/MFVTdHJpbmdASlNDQEBRQUVAUEJEQFoKKyAgICA/PzBVU3RyaW5n
QEpTQ0BAUUFFQFBCRElAWgogICAgID8/MFdURlRocmVhZERhdGFAV1RGQEBRQUVAWFoKICAgICA/
PzBZYXJyUGF0dGVybkBZYXJyQEpTQ0BAUUFFQEFCVlVTdHJpbmdAMkBfTjFQQVBCREBaCiAgICAg
Pz8xQXJyYXlCdWZmZXJWaWV3QFdURkBAVUFFQFhaCkBAIC00MiwxNSArNDIsMTAgQEAgRVhQT1JU
UwogICAgID8/MVJlZkNvdW50ZWRMZWFrQ291bnRlckBXVEZAQFFBRUBYWgogICAgID8/MVNvdXJj
ZVByb3ZpZGVyQ2FjaGVASlNDQEBRQUVAWFoKICAgICA/PzFUaHJlYWRDb25kaXRpb25AV1RGQEBR
QUVAWFoKLSAgICA/PzFXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCiAgICAgPz8xV2Vha0hhbmRs
ZU93bmVyQEpTQ0BAVUFFQFhaCisgICAgPz8xV1RGVGhyZWFkRGF0YUBXVEZAQFFBRUBYWgogICAg
ID8/OEpTQ0BAWUFfTkFCVlVTdHJpbmdAMEAwQFoKICAgICA/PzhXVEZAQFlBX05BQlZDU3RyaW5n
QDBAMEBaCi0gICAgP0VjbWFTY3JpcHRDb252ZXJ0ZXJARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJA
ZG91YmxlX2NvbnZlcnNpb25AV1RGQEBTQUFCVjEyM0BYWgotICAgID9Ub0V4cG9uZW50aWFsQERv
dWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0
cmluZ0J1aWxkZXJAMjNAQFoKLSAgICA/VG9GaXhlZEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBk
b3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCi0gICAg
P1RvUHJlY2lzaW9uQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdU
RkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKLSAgICA/VG9TaG9ydGVzdEBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTlBBVlN0cmluZ0J1
aWxkZXJAMjNAQFoKICAgICA/YWJzb2x1dGVUaW1lVG9XYWl0VGltZW91dEludGVydmFsQFdURkBA
WUFLTkBaCiAgICAgP2FjdGl2aXR5Q2FsbGJhY2tASGVhcEBKU0NAQFFBRVBBVkdDQWN0aXZpdHlD
YWxsYmFja0AyQFhaCiAgICAgP2FkZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0
ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCREBaCkBAIC02OSw4ICs2NCw4IEBAIEVYUE9SVFMKICAg
ICA/YWRkU3RhdGljR2xvYmFsc0BKU0dsb2JhbE9iamVjdEBKU0NAQElBRVhQQVVHbG9iYWxQcm9w
ZXJ0eUluZm9AMTJASEBaCiAgICAgP2FsbG9jYXRlUHJvcGVydHlTdG9yYWdlQEpTT2JqZWN0QEpT
Q0BAUUFFWEFBVkpTR2xvYmFsRGF0YUAyQElJQFoKICAgICA/YWxsb2NhdGVTbG93Q2FzZUBNYXJr
ZWRBbGxvY2F0b3JASlNDQEBBQUVQQVhYWgotICAgID9hcHBlbmRAU3RyaW5nQnVpbGRlckBXVEZA
QFFBRVhQQkVJQFoKICAgICA/YXBwZW5kQFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYUEJfV0lAWgor
ICAgID9hcHBlbmRAU3RyaW5nQnVpbGRlckBXVEZAQFFBRVhQQkVJQFoKICAgICA/YXNjaWlAVVN0
cmluZ0BKU0NAQFFCRT9BVkNTdHJpbmdAV1RGQEBYWgogICAgID9hdHRhY2hARGVidWdnZXJASlND
QEBRQUVYUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID9icm9hZGNhc3RAVGhyZWFkQ29uZGl0
aW9uQFdURkBAUUFFWFhaCkBAIC03OCwxMCArNzMsMTAgQEAgRVhQT1JUUwogICAgID9idWZmZXJM
ZW5ndGhGb3JTdHJpbmdFeHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVhaCiAgICAg
P2J5dGVDb21waWxlQFlhcnJASlNDQEBZQT9BVj8kUGFzc093blB0ckBVQnl0ZWNvZGVQYXR0ZXJu
QFlhcnJASlNDQEBAV1RGQEBBQVVZYXJyUGF0dGVybkAxMkBQQVZCdW1wUG9pbnRlckFsbG9jYXRv
ckA0QEBaCiAgICAgP2J5dGVTaXplQFNvdXJjZVByb3ZpZGVyQ2FjaGVASlNDQEBRQkVJWFoKKyAg
ICA/Y2FsY3VsYXRlZEZ1bmN0aW9uTmFtZUBEZWJ1Z2dlckNhbGxGcmFtZUBKU0NAQFFCRT9BVlVT
dHJpbmdAMkBYWgogICAgID9jYWxjdWxhdGVEU1RPZmZzZXRAV1RGQEBZQU5OTkBaCiAgICAgP2Nh
bGN1bGF0ZVN0cmluZ0hhc2hBbmRMZW5ndGhGcm9tVVRGOEBVbmljb2RlQFdURkBAWUFJUEJEMEFB
STFAWgogICAgID9jYWxjdWxhdGVVVENPZmZzZXRAV1RGQEBZQUhYWgotICAgID9jYWxjdWxhdGVk
RnVuY3Rpb25OYW1lQERlYnVnZ2VyQ2FsbEZyYW1lQEpTQ0BAUUJFP0FWVVN0cmluZ0AyQFhaCiAg
ICAgP2NhbGxASlNDQEBZQT9BVkpTVmFsdWVAMUBQQVZFeGVjU3RhdGVAMUBWMjFAVzRDYWxsVHlw
ZUAxQEFCVENhbGxEYXRhQDFAMUFCVkFyZ0xpc3RAMUBAWgogICAgID9jYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvckBKU0NAQFlJX0pQQVZFeGVjU3RhdGVAMUBAWgogICAgID9jYWxsT25NYWlu
VGhyZWFkQFdURkBAWUFYUDZBWFBBWEBaMEBaCkBAIC05MSw4ICs4Niw4IEBAIEVYUE9SVFMKICAg
ICA/Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpT
R2xvYmFsRGF0YUAyQFBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/Y2hlY2tDdXJyZW50SWRlbnRp
ZmllclRhYmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZFeGVjU3RhdGVAMkBAWgogICAgID9jaGVj
a0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkpTR2xvYmFsRGF0
YUAyQEBaCi0gICAgP2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0ZUAxQEFCVlNvdXJj
ZUNvZGVAMUBQQVZKU1ZhbHVlQDFAQFoKICAgICA/Y2hlY2tzdW1ATUQ1QFdURkBAUUFFWEFBVj8k
VmVjdG9yQEUkMEJBQEAyQEBaCisgICAgP2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0
ZUAxQEFCVlNvdXJjZUNvZGVAMUBQQVZKU1ZhbHVlQDFAQFoKICAgICA/Y2xhc3NOYW1lQEpTT2Jq
ZWN0QEpTQ0BAU0E/QVZVU3RyaW5nQDJAUEJWMTJAQFoKICAgICA/Y2xlYXJAU291cmNlUHJvdmlk
ZXJDYWNoZUBKU0NAQFFBRVhYWgogICAgID9jbGVhckJ1aWx0aW5TdHJ1Y3R1cmVzQEpTR2xvYmFs
RGF0YUBKU0NAQFFBRVhYWgpAQCAtMTY0LDYgKzE1OSw3IEBAIEVYUE9SVFMKICAgICA/ZGlzcGxh
eU5hbWVASlNGdW5jdGlvbkBKU0NAQFFBRT9CVlVTdHJpbmdAMkBQQVZFeGVjU3RhdGVAMkBAWgog
ICAgID9kdG9hQFdURkBAWUFYUUFETkFBX05BQUhBQUlAWgogICAgID9kdW1wU2FtcGxlRGF0YUBK
U0dsb2JhbERhdGFASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJAQFoKKyAgICA/RWNtYVNjcmlwdENv
bnZlcnRlckBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNB
QUJWMTIzQFhaCiAgICAgP2VtcHR5QFN0cmluZ0ltcGxAV1RGQEBTQVBBVjEyQFhaCiAgICAgP2Vu
dW1lcmFibGVAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUJFX05YWgogICAgID9lcXVhbFVURjE2
V2l0aFVURjhAVW5pY29kZUBXVEZAQFlBX05QQl9XMFBCRDFAWgpAQCAtMTgzLDYgKzE3OSw3IEBA
IEVYUE9SVFMKICAgICA/ZmFzdFplcm9lZE1hbGxvY0BXVEZAQFlBUEFYSUBaCiAgICAgP2ZpbGxH
ZXR0ZXJQcm9wZXJ0eVNsb3RASlNPYmplY3RASlNDQEBBQUVYQUFWUHJvcGVydHlTbG90QDJAUEFW
PyRXcml0ZUJhcnJpZXJCYXNlQFc0VW5rbm93bkBKU0NAQEAyQEBaCiAgICAgP2ZpbmFsaXplQFdl
YWtIYW5kbGVPd25lckBKU0NAQFVBRVhWPyRIYW5kbGVAVzRVbmtub3duQEpTQ0BAQDJAUEFYQFoK
KyAgICA/ZmluZEFsbG9jYXRvckBXZWFrSGVhcEBKU0NAQEFBRVBBVUZyZWVDZWxsQFdlYWtCbG9j
a0AyQFhaCiAgICAgP2ZpbmlzaENyZWF0aW9uQERhdGVJbnN0YW5jZUBKU0NAQElBRVhBQVZKU0ds
b2JhbERhdGFAMkBOQFoKICAgICA/ZmluaXNoQ3JlYXRpb25ASW50ZXJuYWxGdW5jdGlvbkBKU0NA
QElBRVhBQVZKU0dsb2JhbERhdGFAMkBBQlZJZGVudGlmaWVyQDJAQFoKICAgICA/ZmluaXNoQ3Jl
YXRpb25ASlNBcnJheUBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBJQFoKQEAgLTIyMCwxMCAr
MjE3LDEwIEBAIEVYUE9SVFMKICAgICA/Z2xvYmFsRXhlY0BKU0dsb2JhbE9iamVjdEBKU0NAQFFB
RVBBVkV4ZWNTdGF0ZUAyQFhaCiAgICAgP2dsb2JhbE9iamVjdENvdW50QEhlYXBASlNDQEBRQUVJ
WFoKICAgICA/Z3Jvd0BIYW5kbGVIZWFwQEpTQ0BAQUFFWFhaCisgICAgP2hhc2hTbG93Q2FzZUBT
dHJpbmdJbXBsQFdURkBAQUJFSVhaCiAgICAgP2hhc0luc3RhbmNlQEpTT2JqZWN0QEpTQ0BAU0Ff
TlBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFZKU1ZhbHVlQDJAMkBaCiAgICAgP2hhc1Byb3BlcnR5QEpT
T2JqZWN0QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBBQlZJZGVudGlmaWVyQDJAQFoKICAgICA/
aGFzUHJvcGVydHlASlNPYmplY3RASlNDQEBRQkVfTlBBVkV4ZWNTdGF0ZUAyQElAWgotICAgID9o
YXNoU2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRUlYWgogICAgID9oZWFwQEhlYXBASlNDQEBT
QVBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/aW5jcmVtZW50QFJlZkNvdW50ZWRMZWFrQ291bnRl
ckBXVEZAQFFBRVhYWgogICAgID9pbml0QEF0b21pY1N0cmluZ0BXVEZAQFNBWFhaCkBAIC0zMTEs
MTAgKzMwOCwxMCBAQCBFWFBPUlRTCiAgICAgP3NldE9yZGVyTG93ZXJGaXJzdEBDb2xsYXRvckBX
VEZAQFFBRVhfTkBaCiAgICAgP3NldFByb3RvdHlwZUBKU09iamVjdEBKU0NAQFFBRVhBQVZKU0ds
b2JhbERhdGFAMkBWSlNWYWx1ZUAyQEBaCiAgICAgP3NldFNldHRlckBQcm9wZXJ0eURlc2NyaXB0
b3JASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgorICAgID9zZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9y
QEpTQ0BAUUJFP0FWSlNWYWx1ZUAyQFhaCiAgICAgP3NldFVuZGVmaW5lZEBQcm9wZXJ0eURlc2Ny
aXB0b3JASlNDQEBRQUVYWFoKICAgICA/c2V0VXBTdGF0aWNGdW5jdGlvblNsb3RASlNDQEBZQV9O
UEFWRXhlY1N0YXRlQDFAUEJWSGFzaEVudHJ5QDFAUEFWSlNPYmplY3RAMUBBQlZJZGVudGlmaWVy
QDFAQUFWUHJvcGVydHlTbG90QDFAQFoKICAgICA/c2V0V3JpdGFibGVAUHJvcGVydHlEZXNjcmlw
dG9yQEpTQ0BAUUFFWF9OQFoKLSAgICA/c2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFC
RT9BVkpTVmFsdWVAMkBYWgogICAgID9zaHJpbmtUb0ZpdEBTdHJpbmdCdWlsZGVyQFdURkBAUUFF
WFhaCiAgICAgP3NpZ25hbEBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVYWFoKICAgICA/c2luZ2xl
Q2hhcmFjdGVyU3RyaW5nUmVwQFNtYWxsU3RyaW5nc0BKU0NAQFFBRVBBVlN0cmluZ0ltcGxAV1RG
QEBFQFoKQEAgLTM0MCwxMSArMzM3LDE1IEBAIEVYUE9SVFMKICAgICA/dGxzS2V5Q291bnRAV1RG
QEBZQUFBSlhaCiAgICAgP3Rsc0tleXNAV1RGQEBZQVBBS1haCiAgICAgP3RvQm9vbGVhbkBKU1N0
cmluZ0BKU0NAQFFCRV9OUEFWRXhlY1N0YXRlQDJAQFoKKyAgICA/VG9FeHBvbmVudGlhbEBEb3Vi
bGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJp
bmdCdWlsZGVyQDIzQEBaCisgICAgP1RvRml4ZWRARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91
YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgogICAgID90
b0ludDMyQEpTQ0BAWUFITkBaCiAgICAgP3RvSW50ZWdlckBKU1ZhbHVlQEpTQ0BAUUJFTlBBVkV4
ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyU2xvd0Nhc2VASlNWYWx1ZUBKU0NAQEFCRU5QQVZF
eGVjU3RhdGVAMkBAWgogICAgID90b09iamVjdEBKU0NlbGxASlNDQEBRQkVQQVZKU09iamVjdEAy
QFBBVkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKICAgICA/dG9PYmplY3RTbG93
Q2FzZUBKU1ZhbHVlQEpTQ0BAQUJFUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0ds
b2JhbE9iamVjdEAyQEBaCisgICAgP1RvUHJlY2lzaW9uQERvdWJsZVRvU3RyaW5nQ29udmVydGVy
QGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKKyAg
ICA/VG9TaG9ydGVzdEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBX
VEZAQFFCRV9OTlBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKICAgICA/dG9TdHJpbmdASlNPYmplY3RA
SlNDQEBRQkVQQVZKU1N0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvU3RyaW5nRGVj
aW1hbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKICAgICA/dG9TdHJpbmdFeHBvbmVu
dGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjEzMCw2ICsyMTMwLDM0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0Jsb2NrLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrQmxvY2suaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFr
SGVhcC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGhlYXBcV2Vha0hlYXAuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrSW1wbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtIYW5kbGVPd25lci5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcV2Vha0hhbmRsZU93bmVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcSGFuZGxlU3RhY2suY3BwIgogCQkJCT4KIAkJCTwv
RmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzEyLDcgKzMxMiwxNCBAQAogCQkxNEM1MjQy
QjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1YnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTY1ODFBMEY0RTM2RjQwMDAxNTBGRCAvKiBKSVRTdHVi
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyRjNEODEzOUY0QkUyMDA0OTEwMzEg
LyogTWFya2VkU3BhY2UuY3BwICovOyB9OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyog
TWFya2VkU3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0RTg0RjlFMTRFRTFBQ0Mw
MEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTRFODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAg
Ki87IH07CisJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0Mw
MEQ2RDVENCAvKiBXZWFrQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFODRGOUIx
NEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCAqLzsgfTsKKwkJMTRFODRGQTExNEVFMUFD
QzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEU4NEZBMjE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlEMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTlE
MTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc1NkZDNjBFMjAzMUIy
MDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwICovOyB9OworCQkxNEY3MjU2
NTE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjcyNTYzMTRFRTI2NUUwMEIxNjUyQiAv
KiBXZWFrSGFuZGxlT3duZXIuY3BwICovOyB9OworCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIg
LyogV2Vha0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRGOTc0
NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8q
IEhlYXBSb290VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi87IH07CiAJCTQ1MTUzOUI5MTJE
Qzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NTE1MzlCODEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MjUsNyArOTMyLDE0
IEBACiAJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBY3RpdmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0REE4MThGMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBY3RpdmF0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0Ey
IC8qIEpTR2xvYmFsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTR2xvYmFsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRF
ODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWFrQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNEU4NEY5QTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxNEU4NEY5QjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0hlYXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0hlYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUQxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjI1MjU2MEQwOEREOEQwMDRFQ0ZGRiAvKiBKU1Zhcmlh
YmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFyaWFibGVP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRGNzI1NjMxNEVFMjY1RTAw
QjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWFrSGFuZGxlT3duZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtIYW5kbGVPd25lci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNEY5NzQ0NjEzOEM4NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RW
aXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBSb290VmlzaXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0MjBCQTlFOEE3MDA4MUU5
RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBW
ZXJzaW9uLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0MzBC
QTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gSmF2YVNjcmlwdENvcmUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY4LDYgKzE1ODIsMTMgQEAKIAkJCQkwRkM4MTUxMjE0MDUxMTg2
MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovLAogCQkJCTBGQzgxNTE0MTQwNTExOEQw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovLAogCQkJCTE0MkUzMTMzMTM0RkYwQTYwMEFG
QURCNSAvKiBXZWFrLmggKi8sCisJCQkJMTRFODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtC
bG9jay5jcHAgKi8sCisJCQkJMTRFODRGOUExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5o
ICovLAorCQkJCTE0RjcyNTYzMTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3Bw
ICovLAorCQkJCTE0RjcyNTY0MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCAq
LywKKwkJCQkxNEU4NEY5QjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3BwICovLAorCQkJ
CTE0RTg0RjlDMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5oICovLAorCQkJCTE0RTg0RjlE
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oICovLAogCQkJCTBGMjQyREE1MTNGM0IxQkIw
MDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8sCiAJCQkJMEZDODE1MDgxNDA0
M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICovLAogCQkJCTBGQzgxNTA5
MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8sCkBAIC0yNTA1LDYg
KzI1MjYsMTAgQEAKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQw
MEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0OTcyMDkxMTRFQjgzMTUwMEZFQjFCNyAvKiBQYXNzV2Vhay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMTRFODRGQTExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggaW4g
SGVhZGVycyAqLywKKwkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBp
biBIZWFkZXJzICovLAorCQkJCTE0RjcyNTY2MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxl
T3duZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1
QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9y
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDYwLDYgKzMwODUsOSBAQAogCQkJCTg2QjU4MjY5MTRE
Mjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
QjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRFODRGOUUxNEVFMUFDQzAwRDZENUQ0IC8qIFdl
YWtCbG9jay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQg
LyogV2Vha0hlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRGNzI1NjUxNEVFMjY1RTAwQjE2
NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0
RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
RkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTVCMTRFRjkwQUQwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNiArNTksOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNl
OjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSooKSBjb25zdCB7IHJldHVybiAobV9zbG90ICYmICptX3Nsb3QpID8gcmVpbnRlcnByZXRfY2Fz
dDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOyB9CiAKKyAgICBIYW5kbGVTbG90IHNsb3Qo
KSBjb25zdCB7IHJldHVybiBtX3Nsb3Q7IH0KKwogcHJvdGVjdGVkOgogICAgIEhhbmRsZUJhc2Uo
SGFuZGxlU2xvdCBzbG90KQogICAgICAgICA6IG1fc2xvdChzbG90KQpAQCAtNjcsNyArNjksNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdm9pZCBzd2FwKEhhbmRsZUJhc2UmIG90aGVyKSB7IHN0
ZDo6c3dhcChtX3Nsb3QsIG90aGVyLm1fc2xvdCk7IH0KIAotICAgIEhhbmRsZVNsb3Qgc2xvdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2xvdDsgfQogICAgIHZvaWQgc2V0U2xvdChIYW5kbGVTbG90IHNs
b3QpCiAgICAgewogICAgICAgICBtX3Nsb3QgPSBzbG90OwpAQCAtMTMzLDYgKzEzNCw3IEBAIHBy
b3RlY3RlZDoKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEhhbmRsZUhlYXA7Cisg
ICAgZnJpZW5kIGNsYXNzIFdlYWtCbG9jazsKIAogICAgIHN0YXRpYyBIYW5kbGU8VD4gd3JhcFNs
b3QoSGFuZGxlU2xvdCBzbG90KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZUhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZUhlYXAuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTkgKzMxLDYg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVPd25l
cigpCi17Ci19Ci0KLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFdlYWtIYW5kbGVPd25lcjo6ZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKikKLXsKLX0KLQogSGFuZGxlSGVhcDo6SGFuZGxlSGVhcChKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCiAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fbmV4
dFRvRmluYWxpemUoMCkKQEAgLTczLDYyICs2MCw2IEBAIHZvaWQgSGFuZGxlSGVhcDo6dmlzaXRT
dHJvbmdIYW5kbGVzKEhlYXAKICAgICB9CiB9CiAKLXZvaWQgSGFuZGxlSGVhcDo6dmlzaXRXZWFr
SGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKLXsKLSAgICBTbG90Vmlz
aXRvciYgdmlzaXRvciA9IGhlYXBSb290VmlzaXRvci52aXNpdG9yKCk7Ci0KLSAgICBOb2RlKiBl
bmQgPSBtX3dlYWtMaXN0LmVuZCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2Vha0xpc3Qu
YmVnaW4oKTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBub2RlLT5uZXh0KCkpIHsKLSNpZiBFTkFCTEUo
R0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFpc1ZhbGlkV2Vha05vZGUobm9kZSkpCi0gICAg
ICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IG5vZGUtPnNs
b3QoKS0+YXNDZWxsKCk7Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyID0g
bm9kZS0+d2Vha093bmVyKCk7Ci0gICAgICAgIGlmICghd2Vha093bmVyKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgaWYgKCF3ZWFrT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSwgbm9kZS0+d2Vh
a093bmVyQ29udGV4dCgpLCB2aXNpdG9yKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIGhlYXBSb290VmlzaXRvci52aXNpdChub2RlLT5zbG90KCkpOwotICAgIH0KLX0KLQotdm9p
ZCBIYW5kbGVIZWFwOjpmaW5hbGl6ZVdlYWtIYW5kbGVzKCkKLXsKLSAgICBOb2RlKiBlbmQgPSBt
X3dlYWtMaXN0LmVuZCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2Vha0xpc3QuYmVnaW4o
KTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBtX25leHRUb0ZpbmFsaXplKSB7Ci0gICAgICAgIG1fbmV4
dFRvRmluYWxpemUgPSBub2RlLT5uZXh0KCk7Ci0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0g
ICAgICAgIGlmICghaXNWYWxpZFdlYWtOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsK
LSNlbmRpZgotCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IG5vZGUtPnNsb3QoKS0+YXNDZWxsKCk7
Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGlmIChXZWFrSGFuZGxlT3duZXIqIHdlYWtPd25lciA9IG5vZGUtPndlYWtP
d25lcigpKSB7Ci0gICAgICAgICAgICB3ZWFrT3duZXItPmZpbmFsaXplKEhhbmRsZTxVbmtub3du
Pjo6d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSwgbm9kZS0+d2Vha093bmVyQ29udGV4dCgpKTsKLSAg
ICAgICAgICAgIGlmIChtX25leHRUb0ZpbmFsaXplICE9IG5vZGUtPm5leHQoKSkgLy8gT3duZXIg
ZGVhbGxvY2F0ZWQgbm9kZS4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
I2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBpZiAoIWlzTGl2ZU5vZGUobm9kZSkp
Ci0gICAgICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgICAgICpub2RlLT5zbG90KCkgPSBK
U1ZhbHVlKCk7Ci0gICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUp
OwotICAgICAgICBtX2ltbWVkaWF0ZUxpc3QucHVzaChub2RlKTsKLSAgICB9Ci0gICAgCi0gICAg
bV9uZXh0VG9GaW5hbGl6ZSA9IDA7Ci19Ci0KIHZvaWQgSGFuZGxlSGVhcDo6d3JpdGVCYXJyaWVy
KEhhbmRsZVNsb3Qgc2xvdCwgY29uc3QgSlNWYWx1ZSYgdmFsdWUpCiB7CiAgICAgLy8gRm9yYmlk
IGFzc2lnbm1lbnQgdG8gaGFuZGxlcyBkdXJpbmcgdGhlIGZpbmFsaXphdGlvbiBwaGFzZSwgc2lu
Y2UgaXQgd291bGQgdmlvbGF0ZSBtYW55IEdDIGludmFyaWFudHMuCkBAIC0xNTAsMTUgKzgxLDYg
QEAgdm9pZCBIYW5kbGVIZWFwOjp3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPmlzV2VhaygpKSB7Ci0gICAgICAgIG1fd2Vha0xp
c3QucHVzaChub2RlKTsKLSNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFp
c0xpdmVOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgbV9zdHJvbmdMaXN0LnB1c2gobm9kZSk7CiAjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCiAgICAgaWYgKCFpc0xpdmVOb2RlKG5vZGUpKQpAQCAtMTg4LDI0ICsx
MTAsNiBAQCBib29sIEhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0KLWJvb2wgSGFuZGxlSGVhcDo6aXNWYWxpZFdlYWtOb2Rl
KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFpc0xpdmVOb2RlKG5vZGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFub2RlLT5pc1dlYWsoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9ICpub2RlLT5zbG90KCk7Ci0gICAgaWYgKCF2YWx1ZSB8
fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTQ2VsbCog
Y2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgIGlmICghY2VsbCB8fCAhY2VsbC0+c3RydWN0dXJl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQogI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hh
bmRsZUhlYXAuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsNiBAQCBjbGFzcyBK
U0dsb2JhbERhdGE7CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKLWNsYXNz
IEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+V2Vha0hhbmRsZU93bmVyKCk7Ci0gICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0
KTsKLX07Ci0KIGNsYXNzIEhhbmRsZUhlYXAgewogcHVibGljOgogICAgIHN0YXRpYyBIYW5kbGVI
ZWFwKiBoZWFwRm9yKEhhbmRsZVNsb3QpOwpAQCAtNTgsMjAgKzUxLDEwIEBAIHB1YmxpYzoKICAg
ICBIYW5kbGVTbG90IGFsbG9jYXRlKCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3Qp
OwogCi0gICAgdm9pZCBtYWtlV2VhayhIYW5kbGVTbG90LCBXZWFrSGFuZGxlT3duZXIqID0gMCwg
dm9pZCogY29udGV4dCA9IDApOwotICAgIEhhbmRsZVNsb3QgY29weVdlYWsoSGFuZGxlU2xvdCk7
Ci0KICAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2
b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBmaW5hbGl6
ZVdlYWtIYW5kbGVzKCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmll
cihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7CiAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgYm9vbCBoYXNXZWFrT3duZXIoSGFuZGxlU2xvdCwgV2Vha0hhbmRsZU93bmVyKik7Ci0gICAg
Ym9vbCBoYXNGaW5hbGl6ZXIoSGFuZGxlU2xvdCk7Ci0jZW5kaWYKLQogICAgIHVuc2lnbmVkIHBy
b3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hTdHJvbmdIYW5kbGUoRnVuY3RvciYsIGNvbnN0IEhhc2hDb3VudGVk
U2V0PEpTQ2VsbCo+JiBza2lwU2V0KTsKQEAgLTg1LDEyICs2OCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIEhhbmRsZVNsb3Qgc2xvdCgpOwogICAgICAgICBIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKCk7
CiAKLSAgICAgICAgdm9pZCBtYWtlV2VhayhXZWFrSGFuZGxlT3duZXIqLCB2b2lkKiBjb250ZXh0
KTsKLSAgICAgICAgYm9vbCBpc1dlYWsoKTsKLSAgICAgICAgCi0gICAgICAgIFdlYWtIYW5kbGVP
d25lciogd2Vha093bmVyKCk7Ci0gICAgICAgIHZvaWQqIHdlYWtPd25lckNvbnRleHQoKTsKLQog
ICAgICAgICB2b2lkIHNldFByZXYoTm9kZSopOwogICAgICAgICBOb2RlKiBwcmV2KCk7CiAKQEAg
LTk4LDEyICs3NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5leHQoKTsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFdlYWtIYW5kbGVPd25lciogZW1wdHlXZWFrT3duZXIoKTsKLQogICAg
ICAgICBKU1ZhbHVlIG1fdmFsdWU7CiAgICAgICAgIEhhbmRsZUhlYXAqIG1faGFuZGxlSGVhcDsK
LSAgICAgICAgV2Vha0hhbmRsZU93bmVyKiBtX3dlYWtPd25lcjsKLSAgICAgICAgdm9pZCogbV93
ZWFrT3duZXJDb250ZXh0OwogICAgICAgICBOb2RlKiBtX3ByZXY7CiAgICAgICAgIE5vZGUqIG1f
bmV4dDsKICAgICB9OwpAQCAtMTE0LDcgKzg3LDYgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGdyb3coKTsKICAgICAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikgfHwg
IUFTU0VSVF9ESVNBQkxFRAotICAgIGJvb2wgaXNWYWxpZFdlYWtOb2RlKE5vZGUqKTsKICAgICBi
b29sIGlzTGl2ZU5vZGUoTm9kZSopOwogI2VuZGlmCiAKQEAgLTEyMiw3ICs5NCw2IEBAIHByaXZh
dGU6CiAgICAgQmxvY2tTdGFjazxOb2RlPiBtX2Jsb2NrU3RhY2s7CiAKICAgICBTZW50aW5lbExp
bmtlZExpc3Q8Tm9kZT4gbV9zdHJvbmdMaXN0OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2Rl
PiBtX3dlYWtMaXN0OwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPiBtX2ltbWVkaWF0ZUxp
c3Q7CiAgICAgU2luZ2x5TGlua2VkTGlzdDxOb2RlPiBtX2ZyZWVMaXN0OwogICAgIE5vZGUqIG1f
bmV4dFRvRmluYWxpemU7CkBAIC0xNzUsNDkgKzE0Niw4IEBAIGlubGluZSB2b2lkIEhhbmRsZUhl
YXA6OmRlYWxsb2NhdGUoSGFuZGwKICAgICBtX2ZyZWVMaXN0LnB1c2gobm9kZSk7CiB9CiAKLWlu
bGluZSBIYW5kbGVTbG90IEhhbmRsZUhlYXA6OmNvcHlXZWFrKEhhbmRsZVNsb3Qgb3RoZXIpCi17
Ci0gICAgTm9kZSogbm9kZSA9IHRvTm9kZShhbGxvY2F0ZSgpKTsKLSAgICBub2RlLT5tYWtlV2Vh
ayh0b05vZGUob3RoZXIpLT53ZWFrT3duZXIoKSwgdG9Ob2RlKG90aGVyKS0+d2Vha093bmVyQ29u
dGV4dCgpKTsKLSAgICB3cml0ZUJhcnJpZXIobm9kZS0+c2xvdCgpLCAqb3RoZXIpOwotICAgICpu
b2RlLT5zbG90KCkgPSAqb3RoZXI7Ci0gICAgcmV0dXJuIHRvSGFuZGxlKG5vZGUpOwotfQotCi1p
bmxpbmUgdm9pZCBIYW5kbGVIZWFwOjptYWtlV2VhayhIYW5kbGVTbG90IGhhbmRsZSwgV2Vha0hh
bmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgLy8gRm9yYmlkIGFz
c2lnbm1lbnQgdG8gaGFuZGxlcyBkdXJpbmcgdGhlIGZpbmFsaXphdGlvbiBwaGFzZSwgc2luY2Ug
aXQgd291bGQgdmlvbGF0ZSBtYW55IEdDIGludmFyaWFudHMuCi0gICAgLy8gRmlsZSBhIGJ1ZyB3
aXRoIHN0YWNrIHRyYWNlIGlmIHlvdSBoaXQgdGhpcy4KLSAgICBpZiAobV9uZXh0VG9GaW5hbGl6
ZSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGhhbmRsZSk7Ci0g
ICAgbm9kZS0+bWFrZVdlYWsod2Vha093bmVyLCBjb250ZXh0KTsKLQotICAgIFNlbnRpbmVsTGlu
a2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUpOwotICAgIGlmICghKmhhbmRsZSB8fCAhaGFuZGxl
LT5pc0NlbGwoKSkgewotICAgICAgICBtX2ltbWVkaWF0ZUxpc3QucHVzaChub2RlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fd2Vha0xpc3QucHVzaChub2RlKTsKLX0KLQotI2lm
ICFBU1NFUlRfRElTQUJMRUQKLWlubGluZSBib29sIEhhbmRsZUhlYXA6Omhhc1dlYWtPd25lcihI
YW5kbGVTbG90IGhhbmRsZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIpCi17Ci0gICAgcmV0
dXJuIHRvTm9kZShoYW5kbGUpLT53ZWFrT3duZXIoKSA9PSB3ZWFrT3duZXI7Ci19Ci0KLWlubGlu
ZSBib29sIEhhbmRsZUhlYXA6Omhhc0ZpbmFsaXplcihIYW5kbGVTbG90IGhhbmRsZSkKLXsKLSAg
ICByZXR1cm4gdG9Ob2RlKGhhbmRsZSktPndlYWtPd25lcigpOwotfQotI2VuZGlmCi0KIGlubGlu
ZSBIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKEhhbmRsZUhlYXAqIGhhbmRsZUhlYXApCiAgICAgOiBt
X2hhbmRsZUhlYXAoaGFuZGxlSGVhcCkKLSAgICAsIG1fd2Vha093bmVyKDApCi0gICAgLCBtX3dl
YWtPd25lckNvbnRleHQoMCkKICAgICAsIG1fcHJldigwKQogICAgICwgbV9uZXh0KDApCiB7CkBA
IC0yMjUsOCArMTU1LDYgQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVh
cAogCiBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShXVEY6OlNlbnRpbmVsVGFnKQogICAg
IDogbV9oYW5kbGVIZWFwKDApCi0gICAgLCBtX3dlYWtPd25lcigwKQotICAgICwgbV93ZWFrT3du
ZXJDb250ZXh0KDApCiAgICAgLCBtX3ByZXYoMCkKICAgICAsIG1fbmV4dCgwKQogewpAQCAtMjQy
LDI4ICsxNzAsNiBAQCBpbmxpbmUgSGFuZGxlSGVhcCogSGFuZGxlSGVhcDo6Tm9kZTo6aGFuCiAg
ICAgcmV0dXJuIG1faGFuZGxlSGVhcDsKIH0KIAotaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6Tm9k
ZTo6bWFrZVdlYWsoV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCi17
Ci0gICAgbV93ZWFrT3duZXIgPSB3ZWFrT3duZXIgPyB3ZWFrT3duZXIgOiBlbXB0eVdlYWtPd25l
cigpOwotICAgIG1fd2Vha093bmVyQ29udGV4dCA9IGNvbnRleHQ7Ci19Ci0KLWlubGluZSBib29s
IEhhbmRsZUhlYXA6Ok5vZGU6OmlzV2VhaygpCi17Ci0gICAgcmV0dXJuIG1fd2Vha093bmVyOyAv
LyBUcnVlIGZvciBlbXB0eVdlYWtPd25lcigpLgotfQotCi1pbmxpbmUgV2Vha0hhbmRsZU93bmVy
KiBIYW5kbGVIZWFwOjpOb2RlOjp3ZWFrT3duZXIoKQotewotICAgIHJldHVybiBtX3dlYWtPd25l
ciA9PSBlbXB0eVdlYWtPd25lcigpID8gMCA6IG1fd2Vha093bmVyOyAvLyAwIGZvciBlbXB0eVdl
YWtPd25lcigpLgotfQotCi1pbmxpbmUgdm9pZCogSGFuZGxlSGVhcDo6Tm9kZTo6d2Vha093bmVy
Q29udGV4dCgpCi17Ci0gICAgQVNTRVJUKHdlYWtPd25lcigpKTsKLSAgICByZXR1cm4gbV93ZWFr
T3duZXJDb250ZXh0OwotfQotCiBpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjpOb2RlOjpzZXRQcmV2
KE5vZGUqIHByZXYpCiB7CiAgICAgbV9wcmV2ID0gcHJldjsKQEAgLTI4NCwxMyArMTkwLDYgQEAg
aW5saW5lIEhhbmRsZUhlYXA6Ok5vZGUqIEhhbmRsZUhlYXA6Ok5vZAogICAgIHJldHVybiBtX25l
eHQ7CiB9CiAKLS8vIFNlbnRpbmVsIHRvIGluZGljYXRlIHRoYXQgYSBub2RlIGlzIHdlYWssIGJ1
dCBpdHMgb3duZXIgaGFzIG5vIG1lYW5pbmdmdWwKLS8vIGNhbGxiYWNrcy4gVGhpcyBhbGxvd3Mg
dXMgdG8gb3B0aW1pemUgYnkgc2tpcHBpbmcgc3VjaCBub2Rlcy4KLWlubGluZSBXZWFrSGFuZGxl
T3duZXIqIEhhbmRsZUhlYXA6Ok5vZGU6OmVtcHR5V2Vha093bmVyKCkKLXsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxXZWFrSGFuZGxlT3duZXIqPigtMSk7Ci19Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgSGFuZGxlSGVhcDo6Zm9yRWFjaFN0cm9uZ0hhbmRsZShGdW5j
dG9yJiBmdW5jdG9yLCBjb25zdCBIYXNoQ291bnRlZFNldDxKU0NlbGwqPiYgc2tpcFNldCkKIHsK
ICAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMywxOCArMzEzLDE3IEBAIEhl
YXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEKICAgICA6IG1faGVhcFNpemUo
aGVhcFNpemUpCiAgICAgLCBtX21pbkJ5dGVzUGVyQ3ljbGUoaGVhcFNpemVGb3JIaW50KGhlYXBT
aXplKSkKICAgICAsIG1fbGFzdEZ1bGxHQ1NpemUoMCkKLSAgICAsIG1fd2F0ZXJNYXJrKDApCiAg
ICAgLCBtX2hpZ2hXYXRlck1hcmsobV9taW5CeXRlc1BlckN5Y2xlKQogICAgICwgbV9vcGVyYXRp
b25JblByb2dyZXNzKE5vT3BlcmF0aW9uKQogICAgICwgbV9vYmplY3RTcGFjZSh0aGlzKQogICAg
ICwgbV9zdG9yYWdlU3BhY2UodGhpcykKICAgICAsIG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxk
UXVpdChmYWxzZSkKLSAgICAsIG1fZXh0cmFDb3N0KDApCiAgICAgLCBtX21hcmtMaXN0U2V0KDAp
CiAgICAgLCBtX2FjdGl2aXR5Q2FsbGJhY2soRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3Jl
YXRlKHRoaXMpKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQogICAgICwgbV9zaGFyZWRE
YXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX3Nsb3RWaXNpdG9yKG1fc2hhcmVkRGF0YSkKKyAgICAs
IG1fd2Vha0hlYXAodGhpcykKICAgICAsIG1faGFuZGxlSGVhcChnbG9iYWxEYXRhKQogICAgICwg
bV9pc1NhZmVUb0NvbGxlY3QoZmFsc2UpCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
QEAgLTM3Niw3ICszNzUsNyBAQCB2b2lkIEhlYXA6OmRlc3Ryb3koKQogICAgIGNhbm9uaWNhbGl6
ZUNlbGxMaXZlbmVzc0RhdGEoKTsKICAgICBjbGVhck1hcmtzKCk7CiAKLSAgICBtX2hhbmRsZUhl
YXAuZmluYWxpemVXZWFrSGFuZGxlcygpOworICAgIG1fd2Vha0hlYXAuZmluYWxpemVBbGwoKTsK
ICAgICBtX2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5maW5hbGl6ZVNtYWxsU3RyaW5ncygpOwog
ICAgIHNocmluaygpOwogICAgIG1fc3RvcmFnZVNwYWNlLmRlc3Ryb3koKTsKQEAgLTQ2Niw5ICs0
NjUsNyBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdFNsb3dDYXNlCiAgICAgLy8g
aWYgYSBsYXJnZSB2YWx1ZSBzdXJ2aXZlcyBvbmUgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGVyZSBp
cyBub3QgbXVjaCBwb2ludCB0bwogICAgIC8vIGNvbGxlY3RpbmcgbW9yZSBmcmVxdWVudGx5IGFz
IGxvbmcgYXMgaXQgc3RheXMgYWxpdmUuCiAKLSAgICBpZiAobV9leHRyYUNvc3QgPiBtYXhFeHRy
YUNvc3QgJiYgbV9leHRyYUNvc3QgPiBoaWdoV2F0ZXJNYXJrKCkgLyAyKQotICAgICAgICBjb2xs
ZWN0QWxsR2FyYmFnZSgpOwotICAgIG1fZXh0cmFDb3N0ICs9IGNvc3Q7CisgICAgYWRkVG9XYXRl
ck1hcmsoY29zdCk7CiB9CiAKIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCkBAIC02ODcs
MTIgKzY4NCwxMiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICNlbmRpZgog
ICAgIH0KIAotICAgIC8vIFdlYWsgaGFuZGxlcyBtdXN0IGJlIG1hcmtlZCBsYXN0LCBiZWNhdXNl
IHRoZWlyIG93bmVycyB1c2UgdGhlIHNldCBvZgotICAgIC8vIG9wYXF1ZSByb290cyB0byBkZXRl
cm1pbmUgcmVhY2hhYmlsaXR5LgorICAgIC8vIFdlYWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtl
ZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVwZW5kcyBvbgorICAgIC8vIHRoZSBsaXZl
bmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgogICAgIHsKLSAgICAgICAgR0NQ
SEFTRShWaXNpdGluZ1dlYWtIYW5kbGVzKTsKKyAgICAgICAgR0NQSEFTRShWaXNpdGluZ0xpdmVX
ZWFrSGFuZGxlcyk7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBtX2hhbmRs
ZUhlYXAudmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICAgICAgbV93
ZWFrSGVhcC52aXNpdExpdmVXZWFrSW1wbHMoaGVhcFJvb3RWaXNpdG9yKTsKICAgICAgICAgICAg
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzA1LDYgKzcwMiwyMCBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KKworICAgIHsKKyAgICAgICAgR0NQSEFTRShWaXNpdGluZ0RlYWRXZWFrSGFuZGxlcyk7Cisg
ICAgICAgIG1fd2Vha0hlYXAudmlzaXREZWFkV2Vha0ltcGxzKGhlYXBSb290VmlzaXRvcik7CisK
KyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKHZpc2l0
b3IpOworICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOworI2lmIEVOQUJMRShQ
QVJBTExFTF9HQykKKyAgICAgICAgICAgIHZpc2l0b3IuZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNp
dG9yOjpNYXN0ZXJEcmFpbik7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKwogICAgIEdDQ09V
TlRFUihWaXNpdGVkVmFsdWVDb3VudCwgdmlzaXRvci52aXNpdENvdW50KCkpOwogCiAgICAgdmlz
aXRvci5kb25lQ29weWluZygpOwpAQCAtODA1LDcgKzgxNiw3IEBAIHZvaWQgSGVhcDo6Y29sbGVj
dChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAgICAgCiAgICAgewogICAgICAgICBHQ1BIQVNF
KEZpbmFsaXplV2Vha0hhbmRsZXMpOwotICAgICAgICBtX2hhbmRsZUhlYXAuZmluYWxpemVXZWFr
SGFuZGxlcygpOworICAgICAgICBtX3dlYWtIZWFwLnN3ZWVwKCk7CiAgICAgICAgIG1fZ2xvYmFs
RGF0YS0+c21hbGxTdHJpbmdzLmZpbmFsaXplU21hbGxTdHJpbmdzKCk7CiAgICAgfQogICAgIApA
QCAtODM2LDcgKzg0Nyw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRv
Z2cKICAgICBzaXplX3QgcHJvcG9ydGlvbmFsQnl0ZXMgPSAyICogbmV3U2l6ZTsKICAgICBpZiAo
ZnVsbEdDKSB7CiAgICAgICAgIG1fbGFzdEZ1bGxHQ1NpemUgPSBuZXdTaXplOwotICAgICAgICBz
ZXRIaWdoV2F0ZXJNYXJrKG1heChwcm9wb3J0aW9uYWxCeXRlcywgbV9taW5CeXRlc1BlckN5Y2xl
KSk7CisgICAgICAgIG1faGlnaFdhdGVyTWFyayA9IG1heChwcm9wb3J0aW9uYWxCeXRlcywgbV9t
aW5CeXRlc1BlckN5Y2xlKTsKICAgICB9CiAgICAgZG91YmxlIGxhc3RHQ0VuZFRpbWUgPSBXVEY6
OmN1cnJlbnRUaW1lKCk7CiAgICAgbV9sYXN0R0NMZW5ndGggPSBsYXN0R0NFbmRUaW1lIC0gbGFz
dEdDU3RhcnRUaW1lOwpAQCAtODUyLDggKzg2Myw4IEBAIHZvaWQgSGVhcDo6Y2Fub25pY2FsaXpl
Q2VsbExpdmVuZXNzRGF0YSgKIAogdm9pZCBIZWFwOjpyZXNldEFsbG9jYXRvcnMoKQogewotICAg
IG1fZXh0cmFDb3N0ID0gMDsKICAgICBtX29iamVjdFNwYWNlLnJlc2V0QWxsb2NhdG9ycygpOwor
ICAgIG1fd2Vha0hlYXAucmVzZXRBbGxvY2F0b3IoKTsKIH0KIAogdm9pZCBIZWFwOjpzZXRBY3Rp
dml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxi
YWNrKQpAQCAtOTE0LDE1ICs5MjUsMTUgQEAgdm9pZCBIZWFwOjpyZWxlYXNlRnJlZUJsb2Nrcygp
CiAKIHZvaWQgSGVhcDo6YWRkRmluYWxpemVyKEpTQ2VsbCogY2VsbCwgRmluYWxpemVyIGZpbmFs
aXplcikKIHsKLSAgICBXZWFrPEpTQ2VsbD4gd2VhaygqZ2xvYmFsRGF0YSgpLCBjZWxsLCAmbV9m
aW5hbGl6ZXJPd25lciwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmluYWxpemVyKSk7Ci0gICAg
d2Vhay5sZWFrSGFuZGxlKCk7IC8vIEJhbGFuY2VkIGJ5IEZpbmFsaXplck93bmVyOjpmaW5hbGl6
ZSgpLgorICAgIHdlYWtIZWFwKCktPmFsbG9jYXRlKGNlbGwsICZtX2ZpbmFsaXplck93bmVyLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihmaW5hbGl6ZXIpKTsgLy8gQmFsYW5jZWQgYnkgRmluYWxp
emVyT3duZXI6OmZpbmFsaXplKCkuCiB9CiAKIHZvaWQgSGVhcDo6RmluYWxpemVyT3duZXI6OmZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgV2Vh
azxKU0NlbGw+IHdlYWsoV2VhazxKU0NlbGw+OjpBZG9wdCwgaGFuZGxlKTsKKyAgICBIYW5kbGVT
bG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwogICAgIEZpbmFsaXplciBmaW5hbGl6ZXIgPSByZWlu
dGVycHJldF9jYXN0PEZpbmFsaXplcj4oY29udGV4dCk7Ci0gICAgZmluYWxpemVyKHdlYWsuZ2V0
KCkpOworICAgIGZpbmFsaXplcihzbG90LT5hc0NlbGwoKSk7CisgICAgV2Vha0hlYXA6OmRlYWxs
b2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoc2xvdCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsOCBAQAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiTWFya2Vk
U3BhY2UuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIldlYWtIYW5kbGVP
d25lci5oIgorI2luY2x1ZGUgIldlYWtIZWFwLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyU3Vw
cG9ydC5oIgogI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KQEAgLTEzMywxMSArMTM1LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBl
IGZvckVhY2hQcm90ZWN0ZWRDZWxsKEZ1bmN0b3ImKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVk
Q2VsbCgpOwogCisgICAgICAgIFdlYWtIZWFwKiB3ZWFrSGVhcCgpIHsgcmV0dXJuICZtX3dlYWtI
ZWFwOyB9CiAgICAgICAgIEhhbmRsZUhlYXAqIGhhbmRsZUhlYXAoKSB7IHJldHVybiAmbV9oYW5k
bGVIZWFwOyB9CiAgICAgICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZt
X2hhbmRsZVN0YWNrOyB9CiAKICAgICAgICAgdm9pZCBnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJv
b3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKTsKIAorICAgICAgICB2b2lkIGFkZFRvV2F0ZXJN
YXJrKHNpemVfdCk7CisKICAgICAgICAgZG91YmxlIGxhc3RHQ0xlbmd0aCgpIHsgcmV0dXJuIG1f
bGFzdEdDTGVuZ3RoOyB9CiAKICAgICBwcml2YXRlOgpAQCAtMTU1LDcgKzE2MCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHNpemVfdCB3YXRlck1hcmsoKTsKICAgICAgICAgc2l6ZV90
IGhpZ2hXYXRlck1hcmsoKTsKLSAgICAgICAgdm9pZCBzZXRIaWdoV2F0ZXJNYXJrKHNpemVfdCk7
CiAgICAgICAgIGJvb2wgc2hvdWxkQ29sbGVjdCgpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbWluRXh0cmFDb3N0ID0gMjU2OwpAQCAtMTk5LDcgKzIwMyw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjb25zdCBIZWFwU2l6ZSBtX2hlYXBTaXplOwogICAgICAgICBjb25zdCBz
aXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwogICAgICAgICBzaXplX3QgbV9sYXN0RnVsbEdDU2l6
ZTsKLSAgICAgICAgc2l6ZV90IG1fd2F0ZXJNYXJrOwogICAgICAgICBzaXplX3QgbV9oaWdoV2F0
ZXJNYXJrOwogICAgICAgICAKICAgICAgICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBtX29wZXJhdGlv
bkluUHJvZ3Jlc3M7CkBAIC0yMTgsOCArMjIxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZUYWJsZVNwZWN0cnVtIG1fZGVzdHJveWVkVHlwZUNvdW50czsKICNlbmRpZgogCi0gICAgICAg
IHNpemVfdCBtX2V4dHJhQ29zdDsKLQogICAgICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0
ZWRWYWx1ZXM7CiAgICAgICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogPiBtX3Rl
bXBTb3J0aW5nVmVjdG9yczsKICAgICAgICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+
KiBtX21hcmtMaXN0U2V0OwpAQCAtMjMxLDYgKzIzMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhIG1fc2hhcmVkRGF0YTsKICAgICAgICAgU2xv
dFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKIAorICAgICAgICBXZWFrSGVhcCBtX3dlYWtIZWFwOwog
ICAgICAgICBIYW5kbGVIZWFwIG1faGFuZGxlSGVhcDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9o
YW5kbGVTdGFjazsKICAgICAgICAgREZHQ29kZUJsb2NrcyBtX2RmZ0NvZGVCbG9ja3M7CkBAIC0y
OTMsOSArMjk1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9oaWdoV2F0
ZXJNYXJrOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEhlYXA6OnNldEhpZ2hXYXRlck1hcmso
c2l6ZV90IG5ld0hpZ2hXYXRlck1hcmspCisgICAgaW5saW5lIHZvaWQgSGVhcDo6YWRkVG9XYXRl
ck1hcmsoc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICBtX2hpZ2hXYXRlck1hcmsgPSBuZXdI
aWdoV2F0ZXJNYXJrOworICAgICAgICBtX29iamVjdFNwYWNlLmFkZFRvV2F0ZXJNYXJrKHNpemUp
OworICAgICAgICBpZiAod2F0ZXJNYXJrKCkgPiBoaWdoV2F0ZXJNYXJrKCkpCisgICAgICAgICAg
ICBjb2xsZWN0KERvTm90U3dlZXApOwogICAgIH0KIAogI2lmIEVOQUJMRShHR0MpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAxMTI1
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAgY2xhc3MgU3RydWN0dXJlOwogCiBNYXJrZWRTcGFj
ZTo6TWFya2VkU3BhY2UoSGVhcCogaGVhcCkKICAgICA6IG1fd2F0ZXJNYXJrKDApCi0gICAgLCBt
X251cnNlcnlXYXRlck1hcmsoMCkKICAgICAsIG1faGVhcChoZWFwKQogewogICAgIGZvciAoc2l6
ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNl
bGxTaXplICs9IHByZWNpc2VTdGVwKSB7CkBAIC00OSw3ICs0OCw2IEBAIE1hcmtlZFNwYWNlOjpN
YXJrZWRTcGFjZShIZWFwKiBoZWFwKQogdm9pZCBNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3Jz
KCkKIHsKICAgICBtX3dhdGVyTWFyayA9IDA7Ci0gICAgbV9udXJzZXJ5V2F0ZXJNYXJrID0gMDsK
IAogICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHBy
ZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7CiAgICAgICAgIGFsbG9jYXRv
ckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CiAKICAgICBzaXpl
X3Qgd2F0ZXJNYXJrKCk7Ci0gICAgc2l6ZV90IG51cnNlcnlXYXRlck1hcmsoKTsKKyAgICB2b2lk
IGFkZFRvV2F0ZXJNYXJrKHNpemVfdCk7CiAKICAgICB0eXBlZGVmIEhhc2hTZXQ8TWFya2VkQmxv
Y2sqPjo6aXRlcmF0b3IgQmxvY2tJdGVyYXRvcjsKICAgICAKQEAgLTc3LDYgKzc3LDcgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgc2hyaW5rKCk7CiAgICAgdm9pZCBmcmVlQmxvY2tzKE1hcmtl
ZEJsb2NrKiBoZWFkKTsKKwogICAgIHZvaWQgZGlkQWRkQmxvY2soTWFya2VkQmxvY2sqKTsKICAg
ICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdChNYXJrZWRCbG9jayopOwogCkBAIC0xMDIsNyArMTAz
LDYgQEAgcHJpdmF0ZToKICAgICBTdWJzcGFjZSBtX25vcm1hbFNwYWNlOwogCiAgICAgc2l6ZV90
IG1fd2F0ZXJNYXJrOwotICAgIHNpemVfdCBtX251cnNlcnlXYXRlck1hcms7CiAgICAgSGVhcCog
bV9oZWFwOwogICAgIE1hcmtlZEJsb2NrU2V0IG1fYmxvY2tzOwogfTsKQEAgLTExMiw5ICsxMTIs
OSBAQCBpbmxpbmUgc2l6ZV90IE1hcmtlZFNwYWNlOjp3YXRlck1hcmsoKQogICAgIHJldHVybiBt
X3dhdGVyTWFyazsKIH0KIAotaW5saW5lIHNpemVfdCBNYXJrZWRTcGFjZTo6bnVyc2VyeVdhdGVy
TWFyaygpCitpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6YWRkVG9XYXRlck1hcmsoc2l6ZV90IHNp
emUpCiB7Ci0gICAgcmV0dXJuIG1fbnVyc2VyeVdhdGVyTWFyazsKKyAgICBtX3dhdGVyTWFyayAr
PSBzaXplOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUg
RnVuY3Rvcjo6UmV0dXJuVHlwZSBNYXJrZWRTcGFjZTo6Zm9yRWFjaENlbGwoRnVuY3RvciYgZnVu
Y3RvcikKQEAgLTE5OSw3ICsxOTksNiBAQCBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6ZGlkQWRk
QmxvY2soTWFyCiAKIGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpkaWRDb25zdW1lRnJlZUxpc3Qo
TWFya2VkQmxvY2sqIGJsb2NrKQogewotICAgIG1fbnVyc2VyeVdhdGVyTWFyayArPSBibG9jay0+
Y2FwYWNpdHkoKSAtIGJsb2NrLT5zaXplKCk7CiAgICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNh
cGFjaXR5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NXZWFr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFzc1dlYWsuaAko
cmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFzc1dlYWsu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBQYXNzV2Vha19oCiAj
ZGVmaW5lIFBhc3NXZWFrX2gKIAorI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW5jbHVkZSAiSGFuZGxlLmgiCiAjaW5jbHVkZSA8d3RmL051bGxQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgogCkBAIC0zNSw2MSArMzUsMTY0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1dlYWs7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNz
V2VhazxUPiBhZG9wdFdlYWsoSGFuZGxlU2xvdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNz
V2VhazxUPiBhZG9wdFdlYWsoV2Vha0ltcGwqKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgUGFzc1dlYWsgOiBwdWJsaWMgSGFuZGxlPFQ+IHsKLSAgICB1c2luZyBIYW5kbGU8VD46OnNs
b3Q7Ci0gICAgdXNpbmcgSGFuZGxlPFQ+OjpzZXRTbG90OwordGVtcGxhdGU8dHlwZW5hbWUgQmFz
ZSwgdHlwZW5hbWUgVD4gY2xhc3MgV2Vha0ltcGxBY2Nlc3NvciB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBUKiBHZXRUeXBlOworCisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0OworICAgIFQmIG9w
ZXJhdG9yKigpIGNvbnN0OworICAgIEdldFR5cGUgZ2V0KCkgY29uc3Q7CisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgYm9vbCB3YXMoR2V0VHlwZSkgY29uc3Q7CisjZW5kaWYKK307CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEJhc2U+IGNsYXNzIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93
bj4gewogcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5
cGUgRXh0ZXJuYWxUeXBlOworICAgIHR5cGVkZWYgSlNWYWx1ZSBHZXRUeXBlOwogCi0gICAgUGFz
c1dlYWsoKSA6IEhhbmRsZTxUPigpIHsgfQotICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KSA6
IEhhbmRsZTxUPigpIHsgfQorICAgIGNvbnN0IEpTVmFsdWUqIG9wZXJhdG9yLT4oKSBjb25zdDsK
KyAgICBjb25zdCBKU1ZhbHVlJiBvcGVyYXRvciooKSBjb25zdDsKKyAgICBHZXRUeXBlIGdldCgp
IGNvbnN0OworfTsKIAotICAgIFBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0
ZXJuYWxUeXBlIGV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpLCBXZWFrSGFuZGxlT3duZXIq
IHdlYWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQotICAgICAgICA6IEhhbmRsZTxUPihn
bG9iYWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpKQotICAgIHsKLSAgICAgICAg
SGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5tYWtlV2VhayhzbG90KCksIHdlYWtPd25lciwg
Y29udGV4dCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBIYW5kbGVUeXBlczxUPjo6dG9KU1Zh
bHVlKGV4dGVybmFsVHlwZSk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+
d3JpdGVCYXJyaWVyKHNsb3QoKSwgdmFsdWUpOwotICAgICAgICAqc2xvdCgpID0gdmFsdWU7Ci0g
ICAgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1dlYWsgOiBwdWJsaWMgV2Vha0lt
cGxBY2Nlc3NvcjxQYXNzV2VhazxUPiwgVD4geworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBX
ZWFrSW1wbEFjY2Vzc29yPFBhc3NXZWFrPFQ+LCBUPjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFdl
YWtJbXBsQWNjZXNzb3I8UGFzc1dlYWs8VD4sIFQ+OjpHZXRUeXBlIEdldFR5cGU7CisKKyAgICBQ
YXNzV2VhaygpOworICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBQYXNzV2VhayhK
U0dsb2JhbERhdGEmLCBHZXRUeXBlID0gR2V0VHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqID0gMCwg
dm9pZCogY29udGV4dCA9IDApOwogCiAgICAgLy8gSXQgc29tZXdoYXQgYnJlYWtzIHRoZSB0eXBl
IHN5c3RlbSB0byBhbGxvdyB0cmFuc2ZlciBvZiBvd25lcnNoaXAgb3V0IG9mCiAgICAgLy8gYSBj
b25zdCBQYXNzV2Vhay4gSG93ZXZlciwgaXQgbWFrZXMgaXQgbXVjaCBlYXNpZXIgdG8gd29yayB3
aXRoIFBhc3NXZWFrCiAgICAgLy8gdGVtcG9yYXJpZXMsIGFuZCB3ZSBkb24ndCBoYXZlIGEgbmVl
ZCB0byB1c2UgcmVhbCBjb25zdCBQYXNzV2Vha3MgYW55d2F5LgotICAgIFBhc3NXZWFrKGNvbnN0
IFBhc3NXZWFrJiBvKSA6IEhhbmRsZTxUPihvLmxlYWtIYW5kbGUoKSkgeyB9Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gUGFzc1dlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG8pIDogSGFuZGxlPFQ+
KG8ubGVha0hhbmRsZSgpKSB7IH0KKyAgICBQYXNzV2Vhayhjb25zdCBQYXNzV2VhayYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+Jik7CisKKyAg
ICB+UGFzc1dlYWsoKTsKIAotICAgIH5QYXNzV2VhaygpCi0gICAgewotICAgICAgICBpZiAoIXNs
b3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihz
bG90KCkpLT5kZWFsbG9jYXRlKHNsb3QoKSk7Ci0gICAgICAgIHNldFNsb3QoMCk7Ci0gICAgfQor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CiAKLSAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29u
c3QgeyByZXR1cm4gIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdChzbG90KCkpOyB9CisgICAg
Ly8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRv
IGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgSlNWYWx1
ZSAoUGFzc1dlYWs6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNp
ZmllZEJvb2xUeXBlKigpIGNvbnN0OwogCi0gICAgSGFuZGxlU2xvdCBsZWFrSGFuZGxlKCkgY29u
c3QgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdlYWtJbXBsKiBsZWFrSW1wbCgpIGNvbnN0IFdB
Uk5fVU5VU0VEX1JFVFVSTjsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgUGFzc1dlYWsgYWRvcHRX
ZWFrPFQ+KEhhbmRsZVNsb3QpOworICAgIGZyaWVuZCBQYXNzV2VhayBhZG9wdFdlYWs8VD4oV2Vh
a0ltcGwqKTsKKyAgICBleHBsaWNpdCBQYXNzV2VhayhXZWFrSW1wbCopOwogCi0gICAgZXhwbGlj
aXQgUGFzc1dlYWsoSGFuZGxlU2xvdCBzbG90KSA6IEhhbmRsZTxUPihzbG90KSB7IH0KKyAgICBX
ZWFrSW1wbCogbV9pbXBsOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEhhbmRs
ZVNsb3QgUGFzc1dlYWs8VD46OmxlYWtIYW5kbGUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
QmFzZSwgdHlwZW5hbWUgVD4gaW5saW5lIFQqIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVD46Om9w
ZXJhdG9yLT4oKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4o
dGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGlubGluZSBUJiBXZWFrSW1w
bEFjY2Vzc29yPEJhc2UsIFQ+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBC
YXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0
dXJuICpqc0Nhc3Q8VCo+KHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5q
c1ZhbHVlKCkuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBX
ZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+OjpnZXQoKSBjb25zdAoreworICAgIGlmICghc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwgfHwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
ZSo+KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgIHJl
dHVybiBHZXRUeXBlKCk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9CisKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBUPiBpbmxpbmUg
Ym9vbCBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+Ojp3YXModHlwZW5hbWUgV2Vha0ltcGxBY2Nl
c3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4ganNDYXN0
PFQqPihzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+anNWYWx1ZSgpLmFz
Q2VsbCgpKSA9PSBvdGhlcjsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBp
bmxpbmUgY29uc3QgSlNWYWx1ZSogV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBVbmtub3duPjo6b3Bl
cmF0b3ItPigpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0
aGlzKS0+bV9pbXBsICYmIHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5z
dGF0ZSgpID09IFdlYWtJbXBsOjpMaXZlKTsKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PGNvbnN0
IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhc2U+IGlubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25v
d24+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBC
YXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1f
aW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2U+IGlubGluZSB0eXBlbmFtZSBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25v
d24+OjpHZXRUeXBlIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93bj46OmdldCgpIGNvbnN0
Cit7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCB8fCBz
dGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1w
bDo6TGl2ZSkKKyAgICAgICAgcmV0dXJuIEdldFR5cGUoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2VhaygpCisgICAgOiBtX2ltcGwo
MCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNz
V2VhayhzdGQ6Om51bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdHlwZW5hbWUgUGFzc1dlYWs8VD46OkdldFR5cGUgZ2V0VHlwZSwgV2Vha0hhbmRs
ZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgOiBtX2ltcGwoZ2xvYmFsRGF0
YS5oZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKGdldFR5cGUsIHdlYWtPd25lciwgY29udGV4dCkp
Cit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxUPjo6UGFzc1dl
YWsoY29uc3QgUGFzc1dlYWsmIG8pCisgICAgOiBtX2ltcGwoby5sZWFrSW1wbCgpKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc1dl
YWs8VD46OlBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvKQorICAgIDogbV9pbXBsKG8ubGVh
a0ltcGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+
Ojp+UGFzc1dlYWsoKQoreworICAgIGlmICghbV9pbXBsKQorICAgICAgICByZXR1cm47CisgICAg
V2Vha0hlYXA6OmRlYWxsb2NhdGUobV9pbXBsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIGJvb2wgUGFzc1dlYWs8VD46Om9wZXJhdG9yISgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFtX2ltcGwgfHwgbV9pbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlIHx8ICFtX2ltcGwt
PmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+
OjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KCEhKnRoaXMpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKFdlYWtJbXBsKiBp
bXBsKQorOiBtX2ltcGwoaW1wbCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IFdlYWtJbXBsKiBQYXNzV2VhazxUPjo6bGVha0ltcGwoKSBjb25zdAogewotICAgIEhhbmRsZVNs
b3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICBjb25zdF9jYXN0PFBhc3NXZWFrPFQ+Kj4odGhp
cyktPnNldFNsb3QoMCk7Ci0gICAgcmV0dXJuIHNsb3Q7CisgICAgV2Vha0ltcGwqIHRtcCA9IDA7
CisgICAgc3RkOjpzd2FwKHRtcCwgY29uc3RfY2FzdDxXZWFrSW1wbComPihtX2ltcGwpKTsKKyAg
ICByZXR1cm4gdG1wOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNzV2VhazxUPiBhZG9w
dFdlYWsoSGFuZGxlU2xvdCBzbG90KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1dlYWs8VD4g
aW5saW5lIGFkb3B0V2VhayhXZWFrSW1wbCogaW1wbCkKIHsKLSAgICByZXR1cm4gUGFzc1dlYWs8
VD4oc2xvdCk7CisgICAgcmV0dXJuIFBhc3NXZWFrPFQ+KGltcGwpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NX
ZWFrPFQ+JiBhLCBjb25zdCBQYXNzV2VhazxVPiYgYikgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdHJvbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdHJvbmcuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Ryb25nLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDExICs4MSwxOSBAQCBwdWJsaWM6
CiAgICAgICAgIGNsZWFyKCk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhc2xvdCgpIHx8ICEqc2xvdCgpOyB9CisKKyAgICAvLyBUaGlzIGNvbnZlcnNpb24g
b3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90
aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNlOjoqVW5z
cGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBj
b25zdCB7IHJldHVybiAhISp0aGlzID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xU
eXBlKj4oMSkgOiAwOyB9CisKICAgICB2b2lkIHN3YXAoU3Ryb25nJiBvdGhlcikKICAgICB7CiAg
ICAgICAgIEhhbmRsZTxUPjo6c3dhcChvdGhlcik7CiAgICAgfQogCisgICAgRXh0ZXJuYWxUeXBl
IGdldCgpIGNvbnN0IHsgcmV0dXJuIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdCh0aGlzLT5z
bG90KCkpOyB9CisKICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBFeHRlcm5hbFR5cGUpOwog
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IFN0cm9uZyYgb3BlcmF0b3I9KGNvbnN0IFN0cm9u
ZzxVPiYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCShyZXZpc2lvbiAx
MTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDEwOSArMjcsMTI5IEBACiAjZGVmaW5lIFdlYWtfaAogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlICJIYW5kbGUuaCIKLSNpbmNsdWRlICJIYW5kbGVIZWFw
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiUGFzc1dlYWsuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLS8vIEEgd2Vha2x5IHJlZmVyZW5jZWQgaGFuZGxlIHRoYXQgYmVj
b21lcyAwIHdoZW4gdGhlIHZhbHVlIGl0IHBvaW50cyB0byBpcyBnYXJiYWdlIGNvbGxlY3RlZC4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIEhhbmRsZTxUPiB7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIFdlYWtJbXBsQWNjZXNzb3I8
V2VhazxUPiwgVD4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWspOwotCi0gICAgdXNp
bmcgSGFuZGxlPFQ+OjpzbG90OwotICAgIHVzaW5nIEhhbmRsZTxUPjo6c2V0U2xvdDsKLQogcHVi
bGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5cGUgRXh0ZXJu
YWxUeXBlOworICAgIGZyaWVuZCBjbGFzcyBXZWFrSW1wbEFjY2Vzc29yPFdlYWs8VD4sIFQ+Owor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxXZWFrPFQ+LCBUPjo6R2V0VHlw
ZSBHZXRUeXBlOwogCi0gICAgV2VhaygpCi0gICAgICAgIDogSGFuZGxlPFQ+KCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgV2VhayhzdGQ6Om51bGxwdHJfdCkKLSAgICAgICAgOiBIYW5kbGU8VD4oKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0ZXJu
YWxUeXBlIGV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqIHdl
YWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQotICAgICAgICA6IEhhbmRsZTxUPihnbG9i
YWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpKQotICAgIHsKLSAgICAgICAgSGFu
ZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5tYWtlV2VhayhzbG90KCksIHdlYWtPd25lciwgY29u
dGV4dCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBIYW5kbGVUeXBlczxUPjo6dG9KU1ZhbHVl
KGV4dGVybmFsVHlwZSk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+d3Jp
dGVCYXJyaWVyKHNsb3QoKSwgdmFsdWUpOwotICAgICAgICAqc2xvdCgpID0gdmFsdWU7Ci0gICAg
fQotCi0gICAgZW51bSBBZG9wdFRhZyB7IEFkb3B0IH07Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gV2VhayhBZG9wdFRhZywgSGFuZGxlPFU+IGhhbmRsZSkKLSAgICAgICAgOiBIYW5kbGU8VD4o
aGFuZGxlLnNsb3QoKSkKLSAgICB7Ci0gICAgICAgIHZhbGlkYXRlQ2VsbChnZXQoKSk7Ci0gICAg
fQorICAgIFdlYWsoKTsKKyAgICBXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBXZWFrKEpTR2xv
YmFsRGF0YSYsIEdldFR5cGUgPSBHZXRUeXBlKCksIFdlYWtIYW5kbGVPd25lciogPSAwLCB2b2lk
KiBjb250ZXh0ID0gMCk7CiAKICAgICBlbnVtIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZyB7IEhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSB9OwotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBzbG90KCkgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KLSAg
ICBXZWFrKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZykKLSAgICAgICAgOiBIYW5kbGU8VD4oaGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkpCi0gICAgewotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IFdlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG90aGVyKQotICAgICAgICA6IEhhbmRsZTxU
PihvdGhlci5sZWFrSGFuZGxlKCkpCi0gICAgewotICAgIH0KLQotICAgIH5XZWFrKCkKLSAgICB7
Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwKFdlYWsmIG90aGVyKQot
ICAgIHsKLSAgICAgICAgSGFuZGxlPFQ+Ojpzd2FwKG90aGVyKTsKLSAgICB9CisgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0OworICAgIFdlYWsoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVGFnKTsKIAotICAgIFdlYWsmIG9wZXJhdG9yPShjb25zdCBQYXNzV2VhazxUPiYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFdlYWsoY29uc3QgUGFzc1dlYWs8VT4mKTsKIAotICAg
IEV4dGVybmFsVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiAgSGFuZGxlVHlwZXM8VD46OmdldEZy
b21TbG90KHNsb3QoKSk7IH0KLSAgICAKLSAgICBQYXNzV2VhazxUPiByZWxlYXNlKCkgeyBQYXNz
V2VhazxUPiB0bXAgPSBhZG9wdFdlYWs8VD4oc2xvdCgpKTsgc2V0U2xvdCgwKTsgcmV0dXJuIHRt
cDsgfQorICAgIH5XZWFrKCk7CiAKLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIGlm
ICghc2xvdCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFw
Rm9yKHNsb3QoKSktPmRlYWxsb2NhdGUoc2xvdCgpKTsKLSAgICAgICAgc2V0U2xvdCgwKTsKLSAg
ICB9CisgICAgdm9pZCBzd2FwKFdlYWsmKTsKKyAgICBXZWFrJiBvcGVyYXRvcj0oY29uc3QgUGFz
c1dlYWs8VD4mKTsKICAgICAKLSAgICBIYW5kbGVTbG90IGxlYWtIYW5kbGUoKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+aGFzRmluYWxpemVyKHNs
b3QoKSkpOwotICAgICAgICBIYW5kbGVTbG90IHJlc3VsdCA9IHNsb3QoKTsKLSAgICAgICAgc2V0
U2xvdCgwKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdDsKKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1w
bGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4K
KyAgICB0eXBlZGVmIEpTVmFsdWUgKEhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsK
KyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0OwogCisgICAgUGFzc1dl
YWs8VD4gcmVsZWFzZSgpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKIHByaXZhdGU6Ci0gICAg
c3RhdGljIEhhbmRsZVNsb3QgaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxIYW5kbGVTbG90PigtMSk7IH0KKyAgICBzdGF0aWMgV2Vha0ltcGwqIGhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOworCisgICAgV2Vha0ltcGwqIG1faW1wbDsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpXZWFrKCkKKyAgICA6IG1faW1wbCgwKQor
eworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2VhayhzdGQ6Om51
bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgV2VhazxUPjo6V2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHR5cGVuYW1lIFdl
YWs8VD46OkdldFR5cGUgZ2V0VHlwZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQq
IGNvbnRleHQpCisgICAgOiBtX2ltcGwoZ2xvYmFsRGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9j
YXRlKGdldFR5cGUsIHdlYWtPd25lciwgY29udGV4dCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBib29sIFdlYWs8VD46OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9pbXBsID09IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2Vhayh0eXBlbmFtZSBXZWFr
PFQ+OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCisgICAgOiBtX2ltcGwoaGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVu
YW1lIFU+ICBpbmxpbmUgV2VhazxUPjo6V2Vhayhjb25zdCBQYXNzV2VhazxVPiYgb3RoZXIpCisg
ICAgOiBtX2ltcGwob3RoZXIubGVha0ltcGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIFdlYWs8VD46On5XZWFrKCkKK3sKKyAgICBjbGVhcigpOworfQorCiB0ZW1wbGF0
ZTxjbGFzcyBUPiBpbmxpbmUgdm9pZCBzd2FwKFdlYWs8VD4mIGEsIFdlYWs8VD4mIGIpCiB7CiAg
ICAgYS5zd2FwKGIpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBXZWFr
PFQ+Ojpzd2FwKFdlYWsmIG90aGVyKQoreworICAgIHN0ZDo6c3dhcChtX2ltcGwsIG90aGVyLm1f
aW1wbCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+JiBXZWFrPFQ+
OjpvcGVyYXRvcj0oY29uc3QgUGFzc1dlYWs8VD4mIG8pCiB7CiAgICAgY2xlYXIoKTsKLSAgICBz
ZXRTbG90KG8ubGVha0hhbmRsZSgpKTsKKyAgICBtX2ltcGwgPSBvLmxlYWtJbXBsKCk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFr
PFQ+OjpvcGVyYXRvciEoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pbXBsIHx8ICFtX2ltcGwt
PmpzVmFsdWUoKSB8fCBtX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmU7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZp
ZWRCb29sVHlwZSo+KCEhKnRoaXMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
UGFzc1dlYWs8VD4gV2VhazxUPjo6cmVsZWFzZSgpCit7CisgICAgUGFzc1dlYWs8VD4gdG1wID0g
YWRvcHRXZWFrPFQ+KG1faW1wbCk7CisgICAgbV9pbXBsID0gMDsKKyAgICByZXR1cm4gdG1wOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBXZWFrPFQ+OjpjbGVhcigpCit7
CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybjsKKyAgICBXZWFrSGVhcDo6ZGVhbGxv
Y2F0ZShtX2ltcGwpOworICAgIG1faW1wbCA9IDA7Cit9CisgICAgCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgV2Vha0ltcGwqIFdlYWs8VD46Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpCit7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0ltcGwqPigtMSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTE1MSw3ICsxNzEsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czxKCiAgICAgc3RhdGljIFBhc3NPdXRU
eXBlIHBhc3NPdXQoU3RvcmFnZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7
IH0KICAgICBzdGF0aWMgUGFzc091dFR5cGUgcGFzc091dChFbXB0eVZhbHVlVHlwZSkgeyByZXR1
cm4gUGFzc091dFR5cGUoKTsgfQogCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBTdG9yYWdlVHlwZTo6
RXh0ZXJuYWxUeXBlIFBlZWtUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgU3RvcmFnZVR5cGU6
OkdldFR5cGUgUGVla1R5cGU7CiAgICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoY29uc3QgU3RvcmFn
ZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5nZXQoKTsgfQogICAgIHN0YXRpYyBQZWVrVHlw
ZSBwZWVrKEVtcHR5VmFsdWVUeXBlKSB7IHJldHVybiBQZWVrVHlwZSgpOyB9CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2Vha0Jsb2NrLmgiCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSGVhcFJvb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJTY29wZUNoYWluLmgi
CisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitXZWFrQmxvY2sq
IFdlYWtCbG9jazo6Y3JlYXRlKCkKK3sKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2Nh
dGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoYmxvY2tTaXplLCBibG9ja1Np
emUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKKyAgICBpZiAoIXN0YXRpY19jYXN0PGJv
b2w+KGFsbG9jYXRpb24pKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBuZXcgKE5vdE51
bGwsIGFsbG9jYXRpb24uYmFzZSgpKSBXZWFrQmxvY2soYWxsb2NhdGlvbik7Cit9CisKK3ZvaWQg
V2Vha0Jsb2NrOjpkZXN0cm95KFdlYWtCbG9jayogYmxvY2spCit7CisgICAgYmxvY2stPm1fYWxs
b2NhdGlvbi5kZWFsbG9jYXRlKCk7Cit9CisKK1dlYWtCbG9jazo6V2Vha0Jsb2NrKFBhZ2VBbGxv
Y2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbikKKyAgICA6IEhlYXBCbG9jayhhbGxvY2F0aW9uKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAgICBuZXcg
KE5vdE51bGwsIHdlYWtJbXBsKSBXZWFrSW1wbDsKKyAgICAgICAgYWRkVG9GcmVlTGlzdCgmbV9z
d2VlcFJlc3VsdC5mcmVlTGlzdCwgd2Vha0ltcGwpOworICAgIH0KKworICAgIEFTU0VSVCghbV9z
d2VlcFJlc3VsdC5pc051bGwoKSAmJiBtX3N3ZWVwUmVzdWx0LmJsb2NrSXNGcmVlKTsKK30KKwor
dm9pZCBXZWFrQmxvY2s6OmZpbmFsaXplQWxsKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHdlYWtJbXBsQ291bnQoKTsgKytpKSB7CisgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9
ICZ3ZWFrSW1wbHMoKVtpXTsKKyAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID49IFdlYWtJ
bXBsOjpGaW5hbGl6ZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgd2Vha0ltcGwt
PnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKKyAgICAgICAgZmluYWxpemUod2Vha0ltcGwpOwor
ICAgIH0KK30KKwordm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKK3sKKyAgICBpZiAoIW1fc3dlZXBS
ZXN1bHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN3ZWVwUmVzdWx0IHN3ZWVw
UmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kp
IHsKKyAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAg
ICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkRlYWQpCisgICAgICAgICAgICBm
aW5hbGl6ZSh3ZWFrSW1wbCk7CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA9PSBXZWFr
SW1wbDo6RGVhbGxvY2F0ZWQpCisgICAgICAgICAgICBhZGRUb0ZyZWVMaXN0KCZzd2VlcFJlc3Vs
dC5mcmVlTGlzdCwgd2Vha0ltcGwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzd2VlcFJl
c3VsdC5ibG9ja0lzRnJlZSA9IGZhbHNlOworICAgIH0KKworICAgIG1fc3dlZXBSZXN1bHQgPSBz
d2VlcFJlc3VsdDsKKyAgICBBU1NFUlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOworfQorCit2
b2lkIFdlYWtCbG9jazo6dmlzaXRMaXZlV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYgaGVhcFJv
b3RWaXNpdG9yKQoreworICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSB2
aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCisgICAgaWYgKCFtX3N3ZWVwUmVzdWx0LmlzTnVs
bCgpICYmIG1fc3dlZXBSZXN1bHQuYmxvY2tJc0ZyZWUpCisgICAgICAgIHJldHVybjsKKworICAg
IFNsb3RWaXNpdG9yJiB2aXNpdG9yID0gaGVhcFJvb3RWaXNpdG9yLnZpc2l0b3IoKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
V2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAgICBpZiAod2Vha0lt
cGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBKU1ZhbHVlJiBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKKyAg
ICAgICAgaWYgKCFqc1ZhbHVlIHx8ICFqc1ZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgSlNDZWxsKiBqc0NlbGwgPSBqc1ZhbHVlLmFzQ2VsbCgpOworICAg
ICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoanNDZWxsKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyID0gd2Vha0ltcGwtPndl
YWtIYW5kbGVPd25lcigpOworICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lcikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpT
VmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZjb25zdF9j
YXN0PEpTVmFsdWUmPihqc1ZhbHVlKSk7CisgICAgfQorfQorCit2b2lkIFdlYWtCbG9jazo6dmlz
aXREZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpCit7CisgICAgLy8gSWYgYSBibG9jayBp
cyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUgYW55IGVmZmVjdC4KKyAgICBp
ZiAoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkgJiYgbV9zd2VlcFJlc3VsdC5ibG9ja0lzRnJlZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWFrSW1wbENv
dW50KCk7ICsraSkgeworICAgICAgICBXZWFrSW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxzKClb
aV07CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA+IFdlYWtJbXBsOjpEZWFkKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgSlNWYWx1ZSYganNWYWx1ZSA9IHdl
YWtJbXBsLT5qc1ZhbHVlKCk7CisgICAgICAgIGlmICghanNWYWx1ZSB8fCAhanNWYWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTQ2VsbCoganNDZWxsID0g
anNWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGpzQ2VsbCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkRlYWQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vha0Jsb2NrX2gKKyNkZWZpbmUgV2Vha0Jsb2NrX2gK
KworI2luY2x1ZGUgIkhlYXBCbG9jay5oIgorI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgor
I2luY2x1ZGUgIldlYWtJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4K
KyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcFJvb3RWaXNpdG9y
OworY2xhc3MgSlNWYWx1ZTsKK2NsYXNzIFdlYWtIYW5kbGVPd25lcjsKKworY2xhc3MgV2Vha0Js
b2NrIDogcHVibGljIEhlYXBCbG9jayB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBibG9ja1NpemUgPSA0ICogS0I7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja01hc2sg
PSB+KGJsb2NrU2l6ZSAtIDEpOworCisgICAgc3RydWN0IEZyZWVDZWxsIHsKKyAgICAgICAgRnJl
ZUNlbGwqIG5leHQ7CisgICAgfTsKKworICAgIHN0cnVjdCBTd2VlcFJlc3VsdCB7CisgICAgICAg
IFN3ZWVwUmVzdWx0KCk7CisgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBibG9ja0lzRnJlZTsKKyAgICAgICAgRnJlZUNlbGwqIGZyZWVMaXN0OworICAgIH07CisK
KyAgICBzdGF0aWMgV2Vha0Jsb2NrKiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KFdlYWtCbG9jayopOworCisgICAgc3RhdGljIFdlYWtCbG9jayogYmxvY2tGb3IoV2Vha0ltcGwq
KTsKKyAgICBzdGF0aWMgV2Vha0ltcGwqIGFzV2Vha0ltcGwoRnJlZUNlbGwqKTsKKworICAgIHZv
aWQgc3dlZXAoKTsKKyAgICBjb25zdCBTd2VlcFJlc3VsdCYgc3dlZXBSZXN1bHQoKTsKKyAgICBT
d2VlcFJlc3VsdCB0YWtlU3dlZXBSZXN1bHQoKTsKKworICAgIHZvaWQgZGVhbGxvY2F0ZShXZWFr
SW1wbCopOworCisgICAgdm9pZCB2aXNpdExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdERlYWRXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisKKyAgICB2
b2lkIGZpbmFsaXplQWxsKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEZyZWVDZWxsKiBhc0Zy
ZWVDZWxsKFdlYWtJbXBsKik7CisKKyAgICBXZWFrQmxvY2soUGFnZUFsbG9jYXRpb25BbGlnbmVk
Jik7CisgICAgV2Vha0ltcGwqIGZpcnN0V2Vha0ltcGwoKTsKKyAgICB2b2lkIGZpbmFsaXplKFdl
YWtJbXBsKik7CisgICAgV2Vha0ltcGwqIHdlYWtJbXBscygpOworICAgIHNpemVfdCB3ZWFrSW1w
bENvdW50KCk7CisgICAgdm9pZCBhZGRUb0ZyZWVMaXN0KEZyZWVDZWxsKiosIFdlYWtJbXBsKik7
CisKKyAgICBTd2VlcFJlc3VsdCBtX3N3ZWVwUmVzdWx0OworfTsKKworaW5saW5lIFdlYWtCbG9j
azo6U3dlZXBSZXN1bHQ6OlN3ZWVwUmVzdWx0KCkKKyAgICA6IGJsb2NrSXNGcmVlKHRydWUpCisg
ICAgLCBmcmVlTGlzdCgwKQoreworICAgIEFTU0VSVChpc051bGwoKSk7Cit9CisKK2lubGluZSBi
b29sIFdlYWtCbG9jazo6U3dlZXBSZXN1bHQ6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGJsb2NrSXNGcmVlICYmICFmcmVlTGlzdDsgLy8gVGhpcyBzdGF0ZSBpcyBpbXBvc3NpYmxlLCBz
byB3ZSBjYW4gdXNlIGl0IHRvIG1lYW4gbnVsbC4KK30KKworaW5saW5lIFdlYWtCbG9jayogV2Vh
a0Jsb2NrOjpibG9ja0ZvcihXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8V2Vha0Jsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHdlYWtJ
bXBsKSAmIGJsb2NrTWFzayk7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0Jsb2NrOjphc1dl
YWtJbXBsKEZyZWVDZWxsKiBmcmVlQ2VsbCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxXZWFrSW1wbCo+KGZyZWVDZWxsKTsKK30KKworaW5saW5lIFdlYWtCbG9jazo6U3dlZXBSZXN1
bHQgV2Vha0Jsb2NrOjp0YWtlU3dlZXBSZXN1bHQoKQoreworICAgIFN3ZWVwUmVzdWx0IHRtcDsK
KyAgICBzdGQ6OnN3YXAodG1wLCBtX3N3ZWVwUmVzdWx0KTsKKyAgICBBU1NFUlQobV9zd2VlcFJl
c3VsdC5pc051bGwoKSk7CisgICAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIGNvbnN0IFdlYWtC
bG9jazo6U3dlZXBSZXN1bHQmIFdlYWtCbG9jazo6c3dlZXBSZXN1bHQoKQoreworICAgIHJldHVy
biBtX3N3ZWVwUmVzdWx0OworfQorCitpbmxpbmUgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0Js
b2NrOjphc0ZyZWVDZWxsKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxGcmVlQ2VsbCo+KHdlYWtJbXBsKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Js
b2NrOjpkZWFsbG9jYXRlKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICB3ZWFrSW1wbC0+c2V0
U3RhdGUoV2Vha0ltcGw6OkRlYWxsb2NhdGVkKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Jsb2Nr
OjpmaW5hbGl6ZShXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgQVNTRVJUKHdlYWtJbXBsLT5z
dGF0ZSgpID09IFdlYWtJbXBsOjpEZWFkKTsKKyAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkZpbmFsaXplZCk7CisgICAgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIgPSB3
ZWFrSW1wbC0+d2Vha0hhbmRsZU93bmVyKCk7CisgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICB3ZWFrSGFuZGxlT3duZXItPmZpbmFsaXplKEhhbmRsZTxVbmtu
b3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KHdlYWtJbXBsLT5qc1ZhbHVlKCkp
KSwgd2Vha0ltcGwtPmNvbnRleHQoKSk7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0Jsb2Nr
Ojp3ZWFrSW1wbHMoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4o
dGhpcykgKyAoKHNpemVvZihXZWFrQmxvY2spICsgc2l6ZW9mKFdlYWtJbXBsKSAtIDEpIC8gc2l6
ZW9mKFdlYWtJbXBsKSk7Cit9CisKK2lubGluZSBzaXplX3QgV2Vha0Jsb2NrOjp3ZWFrSW1wbENv
dW50KCkKK3sKKyAgICByZXR1cm4gKGJsb2NrU2l6ZSAvIHNpemVvZihXZWFrSW1wbCkpIC0gKChz
aXplb2YoV2Vha0Jsb2NrKSArIHNpemVvZihXZWFrSW1wbCkgLSAxKSAvIHNpemVvZihXZWFrSW1w
bCkpOworfQorCitpbmxpbmUgdm9pZCBXZWFrQmxvY2s6OmFkZFRvRnJlZUxpc3QoRnJlZUNlbGwq
KiBmcmVlTGlzdCwgV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIEFTU0VSVCh3ZWFrSW1wbC0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6RGVhbGxvY2F0ZWQpOworICAgIEZyZWVDZWxsKiBmcmVlQ2Vs
bCA9IGFzRnJlZUNlbGwod2Vha0ltcGwpOworICAgIEFTU0VSVCghKmZyZWVMaXN0IHx8ICgoY2hh
ciopKmZyZWVMaXN0ID4gKGNoYXIqKXRoaXMgJiYgKGNoYXIqKSpmcmVlTGlzdCA8IChjaGFyKil0
aGlzICsgYmxvY2tTaXplKSk7CisgICAgQVNTRVJUKChjaGFyKilmcmVlQ2VsbCA+IChjaGFyKil0
aGlzICYmIChjaGFyKilmcmVlQ2VsbCA8IChjaGFyKil0aGlzICsgYmxvY2tTaXplKTsKKyAgICBm
cmVlQ2VsbC0+bmV4dCA9ICpmcmVlTGlzdDsKKyAgICAqZnJlZUxpc3QgPSBmcmVlQ2VsbDsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBXZWFrQmxvY2tfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIFNsb3RWaXNpdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgSGFuZGxlOwor
CitXZWFrSGFuZGxlT3duZXI6On5XZWFrSGFuZGxlT3duZXIoKQoreworfQorCitib29sIFdlYWtI
YW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2
b2lkKiwgU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWFr
SGFuZGxlT3duZXI6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCopCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hh
bmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrSGFuZGxlT3duZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2Vha0hhbmRsZU93bmVyX2gKKyNkZWZpbmUgV2Vha0hhbmRsZU93bmVy
X2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU2xv
dFZpc2l0b3I7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CisgICAgdmlydHVhbCBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4
dCwgU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gV2Vha0hhbmRsZU93bmVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtIZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGVhcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGVhcC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYWtIZWFwLmgiCisKKyNpbmNsdWRlICJIZWFw
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitXZWFrSGVhcDo6fldlYWtIZWFwKCkKK3sKKyAgICBX
ZWFrQmxvY2sqIG5leHQgPSAwOworICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19j
YXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsK
KyAgICAgICAgbmV4dCA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpOwor
ICAgICAgICBXZWFrQmxvY2s6OmRlc3Ryb3koYmxvY2spOworICAgIH0KKyAgICBtX2Jsb2Nrcy5j
bGVhcigpOworfQorCit2b2lkIFdlYWtIZWFwOjpmaW5hbGl6ZUFsbCgpCit7CisgICAgZm9yIChX
ZWFrQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3MuaGVhZCgp
KTsgYmxvY2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4oYmxvY2stPm5leHQoKSkp
CisgICAgICAgIGJsb2NrLT5maW5hbGl6ZUFsbCgpOworfQorCit2b2lkIFdlYWtIZWFwOjp2aXNp
dExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoV2Vh
a0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7
IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpKQor
ICAgICAgICBibG9jay0+dmlzaXRMaXZlV2Vha0ltcGxzKHZpc2l0b3IpOworfQorCit2b2lkIFdl
YWtIZWFwOjp2aXNpdERlYWRXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxv
Y2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2Nr
LT5uZXh0KCkpKQorICAgICAgICBibG9jay0+dmlzaXREZWFkV2Vha0ltcGxzKHZpc2l0b3IpOwor
fQorCit2b2lkIFdlYWtIZWFwOjpzd2VlcCgpCit7CisgICAgV2Vha0Jsb2NrKiBuZXh0OworICAg
IGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tz
LmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHN0YXRpY19j
YXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpOworCisgICAgICAgIC8vIElmIGEgYmxvY2sg
aXMgY29tcGxldGVseSBlbXB0eSwgYSBuZXcgc3dlZXAgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0Lgor
ICAgICAgICBpZiAoIWJsb2NrLT5zd2VlcFJlc3VsdCgpLmlzTnVsbCgpICYmIGJsb2NrLT5zd2Vl
cFJlc3VsdCgpLmJsb2NrSXNGcmVlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
YmxvY2stPnRha2VTd2VlcFJlc3VsdCgpOyAvLyBGb3JjZSBhIG5ldyBzd2VlcCBieSBkaXNjYXJk
aW5nIHRoZSBsYXN0IHN3ZWVwLgorICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICB9Cit9CisK
K3ZvaWQgV2Vha0hlYXA6OnJlc2V0QWxsb2NhdG9yKCkKK3sKKyAgICBtX2FsbG9jYXRvciA9IDA7
CisgICAgbV9uZXh0QWxsb2NhdG9yID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3Mu
aGVhZCgpKTsKK30KKworV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OmZpbmRBbGxvY2F0
b3IoKQoreworICAgIGlmIChXZWFrQmxvY2s6OkZyZWVDZWxsKiBhbGxvY2F0b3IgPSB0cnlGaW5k
QWxsb2NhdG9yKCkpCisgICAgICAgIHJldHVybiBhbGxvY2F0b3I7CisKKyAgICBtX2hlYXAtPmFk
ZFRvV2F0ZXJNYXJrKFdlYWtCbG9jazo6YmxvY2tTaXplKTsKKworICAgIC8vIGFkZFRvV2F0ZXJN
YXJrKCkgbWF5IGNhdXNlIGEgR0MsIHNvIHRyeSBhZ2Fpbi4KKyAgICBpZiAoV2Vha0Jsb2NrOjpG
cmVlQ2VsbCogYWxsb2NhdG9yID0gdHJ5RmluZEFsbG9jYXRvcigpKQorICAgICAgICByZXR1cm4g
YWxsb2NhdG9yOworCisgICAgcmV0dXJuIGFkZEFsbG9jYXRvcigpOworfQorCitXZWFrQmxvY2s6
OkZyZWVDZWxsKiBXZWFrSGVhcDo6dHJ5RmluZEFsbG9jYXRvcigpCit7CisgICAgd2hpbGUgKG1f
bmV4dEFsbG9jYXRvcikgeworICAgICAgICBXZWFrQmxvY2sqIGJsb2NrID0gbV9uZXh0QWxsb2Nh
dG9yOworICAgICAgICBtX25leHRBbGxvY2F0b3IgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPiht
X25leHRBbGxvY2F0b3ItPm5leHQoKSk7CisKKyAgICAgICAgYmxvY2stPnN3ZWVwKCk7CisgICAg
ICAgIFdlYWtCbG9jazo6U3dlZXBSZXN1bHQgc3dlZXBSZXN1bHQgPSBibG9jay0+dGFrZVN3ZWVw
UmVzdWx0KCk7CisgICAgICAgIGlmIChzd2VlcFJlc3VsdC5mcmVlTGlzdCkKKyAgICAgICAgICAg
IHJldHVybiBzd2VlcFJlc3VsdC5mcmVlTGlzdDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OmFkZEFsbG9jYXRvcigpCit7CisgICAg
V2Vha0Jsb2NrKiBibG9jayA9IFdlYWtCbG9jazo6Y3JlYXRlKCk7CisgICAgbV9ibG9ja3MuYXBw
ZW5kKGJsb2NrKTsKKyAgICBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0IHN3ZWVwUmVzdWx0ID0gYmxv
Y2stPnRha2VTd2VlcFJlc3VsdCgpOworICAgIEFTU0VSVCghc3dlZXBSZXN1bHQuaXNOdWxsKCkg
JiYgc3dlZXBSZXN1bHQuZnJlZUxpc3QpOworICAgIHJldHVybiBzd2VlcFJlc3VsdC5mcmVlTGlz
dDsKK30KKwordm9pZCBXZWFrSGVhcDo6cmVtb3ZlQWxsb2NhdG9yKFdlYWtCbG9jayogYmxvY2sp
Cit7CisgICAgbV9ibG9ja3MucmVtb3ZlKGJsb2NrKTsKKyAgICBXZWFrQmxvY2s6OmRlc3Ryb3ko
YmxvY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0hlYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtIZWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYWtIZWFwX2gKKyNkZWZpbmUgV2Vha0hlYXBfaAorCisjaW5jbHVkZSAiV2Vh
a0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgV2Vha0lt
cGw7CisKK2NsYXNzIFdlYWtIZWFwIHsKK3B1YmxpYzoKKyAgICBXZWFrSGVhcChIZWFwKik7Cisg
ICAgdm9pZCBmaW5hbGl6ZUFsbCgpOworICAgIH5XZWFrSGVhcCgpOworCisgICAgV2Vha0ltcGwq
IGFsbG9jYXRlKEpTVmFsdWUsIFdlYWtIYW5kbGVPd25lciogPSAwLCB2b2lkKiBjb250ZXh0ID0g
MCk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShXZWFrSW1wbCopOworCisgICAgdm9pZCB2
aXNpdExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdERlYWRX
ZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisKKyAgICB2b2lkIHN3ZWVwKCk7CisgICAgdm9p
ZCByZXNldEFsbG9jYXRvcigpOworCitwcml2YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFdl
YWtCbG9jazo6RnJlZUNlbGwqIGZpbmRBbGxvY2F0b3IoKTsKKyAgICBXZWFrQmxvY2s6OkZyZWVD
ZWxsKiB0cnlGaW5kQWxsb2NhdG9yKCk7CisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWRkQWxs
b2NhdG9yKCk7CisgICAgdm9pZCByZW1vdmVBbGxvY2F0b3IoV2Vha0Jsb2NrKik7CisKKyAgICBX
ZWFrQmxvY2s6OkZyZWVDZWxsKiBtX2FsbG9jYXRvcjsKKyAgICBXZWFrQmxvY2sqIG1fbmV4dEFs
bG9jYXRvcjsKKyAgICBEb3VibHlMaW5rZWRMaXN0PEhlYXBCbG9jaz4gbV9ibG9ja3M7CisgICAg
SGVhcCogbV9oZWFwOworfTsKKworaW5saW5lIFdlYWtIZWFwOjpXZWFrSGVhcChIZWFwKiBoZWFw
KQorICAgIDogbV9hbGxvY2F0b3IoMCkKKyAgICAsIG1fbmV4dEFsbG9jYXRvcigwKQorICAgICwg
bV9oZWFwKGhlYXApCit7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0hlYXA6OmFsbG9jYXRl
KEpTVmFsdWUganNWYWx1ZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIsIHZvaWQq
IGNvbnRleHQpCit7CisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWxsb2NhdG9yID0gbV9hbGxv
Y2F0b3I7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIGFsbG9jYXRvciA9IGZpbmRBbGxv
Y2F0b3IoKTsKKyAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvci0+bmV4dDsKKworICAgIFdlYWtJ
bXBsKiB3ZWFrSW1wbCA9IFdlYWtCbG9jazo6YXNXZWFrSW1wbChhbGxvY2F0b3IpOworICAgIHJl
dHVybiBuZXcgKE5vdE51bGwsIHdlYWtJbXBsKSBXZWFrSW1wbChqc1ZhbHVlLCB3ZWFrSGFuZGxl
T3duZXIsIGNvbnRleHQpOworfQorCitpbmxpbmUgdm9pZCBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShX
ZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgV2Vha0Jsb2NrOjpibG9ja0Zvcih3ZWFrSW1wbCkt
PmRlYWxsb2NhdGUod2Vha0ltcGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFdlYWtIZWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0ltcGwuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBsLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWFrSW1w
bF9oCisjZGVmaW5lIFdlYWtJbXBsX2gKKworI2luY2x1ZGUgIkpTVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFdlYWtIYW5kbGVPd25lcjsKKworY2xhc3MgV2Vha0ltcGwgewor
cHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBMaXZlICAgICAgICA9IDB4MCwKKyAg
ICAgICAgRGVhZCAgICAgICAgPSAweDEsCisgICAgICAgIEZpbmFsaXplZCAgID0gMHgyLAorICAg
ICAgICBEZWFsbG9jYXRlZCA9IDB4MworICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAgICAgU3Rh
dGVNYXNrICAgPSAweDMKKyAgICB9OworCisgICAgV2Vha0ltcGwoKTsKKyAgICBXZWFrSW1wbChK
U1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqLCB2b2lkKiBjb250ZXh0KTsKKworICAgIFN0YXRlIHN0
YXRlKCk7CisgICAgdm9pZCBzZXRTdGF0ZShTdGF0ZSk7CisKKyAgICBjb25zdCBKU1ZhbHVlJiBq
c1ZhbHVlKCk7CisgICAgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIoKTsKKyAgICB2
b2lkKiBjb250ZXh0KCk7CisKKyAgICBzdGF0aWMgV2Vha0ltcGwqIGFzV2Vha0ltcGwoSlNWYWx1
ZSopOworCitwcml2YXRlOgorICAgIGNvbnN0IEpTVmFsdWUgbV9qc1ZhbHVlOworICAgIFdlYWtI
YW5kbGVPd25lciogbV93ZWFrSGFuZGxlT3duZXI7CisgICAgdm9pZCogbV9jb250ZXh0OworfTsK
KworaW5saW5lIFdlYWtJbXBsOjpXZWFrSW1wbCgpCisgICAgOiBtX3dlYWtIYW5kbGVPd25lcigw
KQorICAgICwgbV9jb250ZXh0KDApCit7CisgICAgc2V0U3RhdGUoRGVhbGxvY2F0ZWQpOworfQor
CitpbmxpbmUgV2Vha0ltcGw6OldlYWtJbXBsKEpTVmFsdWUganNWYWx1ZSwgV2Vha0hhbmRsZU93
bmVyKiB3ZWFrSGFuZGxlT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgOiBtX2pzVmFsdWUoanNW
YWx1ZSkKKyAgICAsIG1fd2Vha0hhbmRsZU93bmVyKHdlYWtIYW5kbGVPd25lcikKKyAgICAsIG1f
Y29udGV4dChjb250ZXh0KQoreworICAgIEFTU0VSVChzdGF0ZSgpID09IExpdmUpOworfQorCitp
bmxpbmUgV2Vha0ltcGw6OlN0YXRlIFdlYWtJbXBsOjpzdGF0ZSgpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFN0YXRlPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxl
T3duZXIpICYgU3RhdGVNYXNrKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0ltcGw6OnNldFN0YXRl
KFdlYWtJbXBsOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUgPj0gdGhpcy0+c3Rh
dGUoKSk7CisgICAgbV93ZWFrSGFuZGxlT3duZXIgPSByZWludGVycHJldF9jYXN0PFdlYWtIYW5k
bGVPd25lcio+KChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxlT3duZXIp
ICYgflN0YXRlTWFzaykgfCBzdGF0ZSk7Cit9CisKK2lubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFr
SW1wbDo6anNWYWx1ZSgpCit7CisgICAgcmV0dXJuIG1fanNWYWx1ZTsKK30KKworaW5saW5lIFdl
YWtIYW5kbGVPd25lciogV2Vha0ltcGw6OndlYWtIYW5kbGVPd25lcigpCit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0hhbmRsZU93bmVyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihtX3dlYWtIYW5kbGVPd25lcikgJiB+U3RhdGVNYXNrKSk7Cit9CisKK2lubGluZSB2
b2lkKiBXZWFrSW1wbDo6Y29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dDsKK30KKwor
aW5saW5lIFdlYWtJbXBsKiBXZWFrSW1wbDo6YXNXZWFrSW1wbChKU1ZhbHVlKiBzbG90KQorewor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4ocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc2xvdCkgKyBPQkpFQ1RfT0ZGU0VUT0YoV2Vha0ltcGwsIG1fanNWYWx1ZSkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFdlYWtJbXBsX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU3
NSw3ICszNTc1LDcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpbwog
TmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYykKIHsKICAgICBIb3N0RnVuY3Rpb25TdHViTWFw
OjpBZGRSZXN1bHQgZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmFkZChmdW5jdGlvbiwg
UGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7Ci0gICAgaWYgKCEqZW50cnkuaXRlcmF0b3It
PnNlY29uZCkgeworICAgIGlmICghZW50cnkuaXRlcmF0b3ItPnNlY29uZCkgewogICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZTsKICAgICAgICAgaWYgKGdlbmVyYXRvcikgewogICAg
ICAgICAgICAgaWYgKGdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsNyArMzUx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1l
IEZyb20+CiAgICAgaW5saW5lIFRvIGpzQ2FzdChGcm9tKiBmcm9tKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGZyb20tPmluaGVyaXRzKCZXVEY6OlJlbW92ZVBvaW50ZXI8VG8+OjpUeXBlOjpzX2lu
Zm8pKTsKKyAgICAgICAgQVNTRVJUKCFmcm9tIHx8IGZyb20tPmluaGVyaXRzKCZXVEY6OlJlbW92
ZVBvaW50ZXI8VG8+OjpUeXBlOjpzX2luZm8pKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFRvPihmcm9tKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3
IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWQKICAgICAgICAgLy8g
VGhlcmUgYWxyZWFkeSBpcyBhbiBlbnRyeSEgLSB3ZSBzaG91bGQgb25seSBoaXQgdGhpcyB3aGVu
IGRlc3BlY2lmeWluZy4KICAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci5nZXQoKS5zZWNv
bmQtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOwogICAgICAgICBBU1NFUlQoIXN0cnVjdHVy
ZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7Ci0gICAgICAgIG1hcCgpLT5zZXQocmVzdWx0
Lml0ZXJhdG9yLCBzdHJ1Y3R1cmUpOworICAgICAgICBtYXAoKS0+c2V0KGdsb2JhbERhdGEsIHJl
c3VsdC5pdGVyYXRvci5nZXQoKS5maXJzdCwgc3RydWN0dXJlKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNDZWxsOwogY2xhc3Mg
U3RydWN0dXJlOwogCiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewpAQCAtODMsMTAg
Kzg0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICAgICAgaWYgKCFzbG90KQor
ICAgICAgICBXZWFrSW1wbCogaW1wbCA9IHRoaXMtPndlYWtJbXBsKCk7CisgICAgICAgIGlmICgh
aW1wbCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihz
bG90KS0+ZGVhbGxvY2F0ZShzbG90KTsKKyAgICAgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUoaW1w
bCk7CiAgICAgfQogCiAgICAgaW5saW5lIHZvaWQgYWRkKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSopOwpAQCAtMTA1LDE4ICsxMDYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VHJhbnNpdGlvbk1hcCo+KG1fZGF0YSk7CiAgICAgfQogCi0gICAgSGFuZGxl
U2xvdCBzbG90KCkgY29uc3QKKyAgICBXZWFrSW1wbCogd2Vha0ltcGwoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwotICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxIYW5kbGVTbG90PihtX2RhdGEgJiB+VXNpbmdTaW5nbGVTbG90RmxhZyk7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4obV9kYXRhICYgflVz
aW5nU2luZ2xlU2xvdEZsYWcpOwogICAgIH0KIAogICAgIHZvaWQgc2V0TWFwKFRyYW5zaXRpb25N
YXAqIG1hcCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCkpCi0gICAg
ICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5kZWFsbG9jYXRlKHNsb3QpOworICAg
ICAgICBpZiAoV2Vha0ltcGwqIGltcGwgPSB0aGlzLT53ZWFrSW1wbCgpKQorICAgICAgICAgICAg
V2Vha0hlYXA6OmRlYWxsb2NhdGUoaW1wbCk7CiAKICAgICAgICAgLy8gVGhpcyBpbXBsaWNpdGx5
IGNsZWFycyB0aGUgZmxhZyB0aGF0IGluZGljYXRlcyB3ZSdyZSB1c2luZyBhIHNpbmdsZSB0cmFu
c2l0aW9uCiAgICAgICAgIG1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1hcCk7
CkBAIC0xMjcsOSArMTI4LDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmUqIHNpbmdsZVRyYW5z
aXRpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkp
OwotICAgICAgICBpZiAoSGFuZGxlU2xvdCBzbG90ID0gdGhpcy0+c2xvdCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoKnNsb3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
U3RydWN0dXJlKj4oc2xvdC0+YXNDZWxsKCkpOworICAgICAgICBpZiAoV2Vha0ltcGwqIGltcGwg
PSB0aGlzLT53ZWFrSW1wbCgpKSB7CisgICAgICAgICAgICBpZiAoaW1wbC0+c3RhdGUoKSA9PSBX
ZWFrSW1wbDo6TGl2ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxT
dHJ1Y3R1cmUqPihpbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KQEAgLTEzNywxNCArMTM4LDEwIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXRTaW5nbGVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7
Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICAgICAgaWYgKCFz
bG90KSB7Ci0gICAgICAgICAgICBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+
YWxsb2NhdGUoKTsKLSAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPm1ha2VX
ZWFrKHNsb3QsIDAsIDApOwotICAgICAgICAgICAgbV9kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oc2xvdCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwotICAgICAgICB9Ci0gICAgICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihzbG90LCByZWludGVycHJl
dF9jYXN0PEpTQ2VsbCo+KHN0cnVjdHVyZSkpOwotICAgICAgICAqc2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SlNDZWxsKj4oc3RydWN0dXJlKTsKKyAgICAgICAgaWYgKFdlYWtJbXBsKiBpbXBsID0g
dGhpcy0+d2Vha0ltcGwoKSkKKyAgICAgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwp
OworICAgICAgICBXZWFrSW1wbCogaW1wbCA9IGdsb2JhbERhdGEuaGVhcC53ZWFrSGVhcCgpLT5h
bGxvY2F0ZShyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHN0cnVjdHVyZSkpOworICAgICAgICBt
X2RhdGEgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbXBsKSB8IFVzaW5nU2luZ2xlU2xv
dEZsYWc7CiAgICAgfQogCiAgICAgaW50cHRyX3QgbV9kYXRhOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIGNsYXNzIFdlYWtHQ01hcCA6IHByaXZhdGUgV2Vha0hhbmRsZU93bmUKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWFr
R0NNYXApOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5cGUsIEhhbmRsZVNsb3QsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZz4gTWFwVHlwZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSwg
V2Vha0ltcGwqLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IE1hcFR5cGU7CiAgICAgdHlwZWRlZiB0
eXBlbmFtZSBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlw
ZTsKICAgICB0eXBlZGVmIHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIG1hcF9pdGVyYXRvcjsK
IApAQCAtNjQsOCArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgc3RkOjpwYWlyPEtleVR5cGUsIEV4dGVybmFsVHlwZT4gZ2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RkOjptYWtlX3BhaXIobV9pdGVyYXRvci0+Zmlyc3QsIEhhbmRsZVR5cGVzPE1h
cHBlZFR5cGU+OjpnZXRGcm9tU2xvdChtX2l0ZXJhdG9yLT5zZWNvbmQpKTsgfQotICAgICAgICBz
dGQ6OnBhaXI8S2V5VHlwZSwgSGFuZGxlU2xvdD4gZ2V0U2xvdCgpIGNvbnN0IHsgcmV0dXJuICpt
X2l0ZXJhdG9yOyB9CisgICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5cGU+IGdl
dCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0LCBIYW5k
bGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJm1f
aXRlcmF0b3ItPnNlY29uZC0+anNWYWx1ZSgpKSkpOyB9CiAgICAgICAgIAogICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3IrKygpIHsgKyttX2l0ZXJhdG9yOyByZXR1cm4gKnRoaXM7IH0KICAgICAg
ICAgCkBAIC05MCw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1hcF9pdGVyYXRv
ciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICAgICAgZm9yIChtYXBfaXRlcmF0b3IgcHRyID0gbV9t
YXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICBIYW5kbGVIZWFwOjpo
ZWFwRm9yKHB0ci0+c2Vjb25kKS0+ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CisgICAgICAgICAg
ICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CiAgICAgICAgIG1fbWFwLmNsZWFy
KCk7CiAgICAgfQogCkBAIC0xMDcsNjQgKzEwNiw0MiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmUoaXRlcmF0b3IgaXRlcikKICAgICB7CiAgICAgICAgIEFTU0VSVChpdGVyLm1faXRlcmF0b3Ig
IT0gbV9tYXAuZW5kKCkpOwotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSBpdGVyLm1faXRlcmF0
b3ItPnNlY29uZDsKLSAgICAgICAgQVNTRVJUKHNsb3QpOwotICAgICAgICBIYW5kbGVIZWFwOjpo
ZWFwRm9yKHNsb3QpLT5kZWFsbG9jYXRlKHNsb3QpOworICAgICAgICBXZWFrSW1wbCogaW1wbCA9
IGl0ZXIubV9pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBBU1NFUlQoaW1wbCk7CisgICAgICAg
IFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgICAgICBtX21hcC5yZW1vdmUoaXRlci5t
X2l0ZXJhdG9yKTsKICAgICB9CiAKICAgICBFeHRlcm5hbFR5cGUgZ2V0KGNvbnN0IEtleVR5cGUm
IGtleSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBl
Pjo6Z2V0RnJvbVNsb3QobV9tYXAuZ2V0KGtleSkpOwotICAgIH0KLQotICAgIEhhbmRsZVNsb3Qg
Z2V0U2xvdChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9tYXAuZ2V0KGtleSk7CisgICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6
Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJm1fbWFwLmdldChrZXkpLT5qc1ZhbHVl
KCkpKTsKICAgICB9CiAKICAgICBBZGRSZXN1bHQgYWRkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAgewogICAgICAg
ICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7
Ci0gICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgSGFuZGxlU2xv
dCBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gc2xvdDsKLSAgICAgICAgICAgIEhhbmRs
ZUhlYXA6OmhlYXBGb3Ioc2xvdCktPm1ha2VXZWFrKHNsb3QsIHRoaXMsIEZpbmFsaXplckNhbGxi
YWNrOjpmaW5hbGl6ZXJDb250ZXh0Rm9yKGtleSkpOwotICAgICAgICAgICAgSGFuZGxlSGVhcDo6
aGVhcEZvcihzbG90KS0+d3JpdGVCYXJyaWVyKHNsb3QsIHZhbHVlKTsKLSAgICAgICAgICAgICpz
bG90ID0gdmFsdWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBnbG9iYWxEYXRhLmhlYXAud2Vh
a0hlYXAoKS0+YWxsb2NhdGUodmFsdWUsIHRoaXMsIEZpbmFsaXplckNhbGxiYWNrOjpmaW5hbGl6
ZXJDb250ZXh0Rm9yKGtleSkpOworCiAgICAgICAgIC8vIFdlYWtHQ01hcCBleHBvc2VzIGEgZGlm
ZmVyZW50IGl0ZXJhdG9yLCBzbyB3ZSBuZWVkIHRvIHdyYXAgaXQgYW5kIGNyZWF0ZSBvdXIgb3du
IEFkZFJlc3VsdC4KICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChpdGVyYXRvcihyZXN1bHQuaXRl
cmF0b3IpLCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0KGl0
ZXJhdG9yIGl0ZXIsIEV4dGVybmFsVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEhhbmRsZVNs
b3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+c2Vjb25kOwotICAgICAgICBBU1NFUlQoc2xvdCk7
Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihzbG90LCB2
YWx1ZSk7Ci0gICAgICAgICpzbG90ID0gdmFsdWU7Ci0gICAgfQogCiAgICAgdm9pZCBzZXQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBLZXlUeXBlJiBrZXksIEV4dGVybmFsVHlwZSB2
YWx1ZSkKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQg
PSBtX21hcC5hZGQoa2V5LCAwKTsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAg
ICAgICAgc2xvdCA9IGdsb2JhbERhdGEuaGVhcC5oYW5kbGVIZWFwKCktPmFsbG9jYXRlKCk7Ci0g
ICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5tYWtlV2VhayhzbG90LCB0aGlz
LCBrZXkpOwotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBzbG90OwotICAg
ICAgICB9Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihz
bG90LCB2YWx1ZSk7Ci0gICAgICAgICpzbG90ID0gdmFsdWU7CisgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCisgICAgICAgICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gZ2xvYmFs
RGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxs
YmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKICAgICB9CiAKICAgICBFeHRlcm5hbFR5
cGUgdGFrZShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgewotICAgICAgICBIYW5kbGVTbG90IHNs
b3QgPSBtX21hcC50YWtlKGtleSk7Ci0gICAgICAgIGlmICghc2xvdCkKKyAgICAgICAgV2Vha0lt
cGwqIGltcGwgPSBtX21hcC50YWtlKGtleSk7CisgICAgICAgIGlmICghaW1wbCkKICAgICAgICAg
ICAgIHJldHVybiBIYXNoVHJhaXRzPEV4dGVybmFsVHlwZT46OmVtcHR5VmFsdWUoKTsKLSAgICAg
ICAgRXh0ZXJuYWxUeXBlIHJlc3VsdCA9IEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9t
U2xvdChzbG90KTsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0
ZShzbG90KTsKKyAgICAgICAgRXh0ZXJuYWxUeXBlIHJlc3VsdCA9IEhhbmRsZVR5cGVzPE1hcHBl
ZFR5cGU+OjpnZXRGcm9tU2xvdChjb25zdF9jYXN0PEpTVmFsdWUqPigmaW1wbC0+anNWYWx1ZSgp
KSk7CisgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIApAQCAtMTgxLDkgKzE1OCw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNv
bnRleHQpCiAgICAgewotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSBtX21hcC50YWtlKEZpbmFs
aXplckNhbGxiYWNrOjprZXlGb3JGaW5hbGl6ZXIoY29udGV4dCwgSGFuZGxlVHlwZXM8TWFwcGVk
VHlwZT46OmdldEZyb21TbG90KGhhbmRsZS5zbG90KCkpKSk7Ci0gICAgICAgIEFTU0VSVChzbG90
KTsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShzbG90KTsK
KyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSBtX21hcC50YWtlKEZpbmFsaXplckNhbGxiYWNrOjpr
ZXlGb3JGaW5hbGl6ZXIoY29udGV4dCwgSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21T
bG90KGhhbmRsZS5zbG90KCkpKSk7CisgICAgICAgIEFTU0VSVChpbXBsKTsKKyAgICAgICAgV2Vh
a0hlYXA6OmRlYWxsb2NhdGUoaW1wbCk7CiAgICAgfQogCiAgICAgTWFwVHlwZSBtX21hcDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjU4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAzLTI5ICBHZW9mZnJleSBH
YXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmlyc3Qgc3RlcCB0b3dhcmQgaW5j
cmVtZW50YWwgV2VhazxUPiBmaW5hbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBXZWJDb3JlIGZvciBXZWFrPFQ+IEFQSSBjaGFu
Z2VzLgorCisgICAgICAgICogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU3RyaW5nT3duZXI6OmZpbmFsaXplKTogV2UncmUgbm90IGFsbG93ZWQg
dG8gZ2V0KCkgYSBkZWFkIFdlYWs8VD4KKyAgICAgICAgYW55bW9yZSwgc28gdXNlIHRoZSBkZWJ1
Zy1vbmx5IHdhcygpIGhlbHBlciBmdW5jdGlvbiBpbnN0ZWFkLgorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjp1bmNhY2hlV3JhcHBlcik6
IERpdHRvLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmg6CisgICAgICAg
IChXZWJDb3JlOjpzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
ZWFySW5saW5lQ2FjaGVkV3JhcHBlcik6IFdlJ3JlIG5vdCBhbGxvd2VkIHRvIGdldCgpIGEgZGVh
ZAorICAgICAgICBXZWFrPFQ+LCBzbyBJIGhhZCB0byBwdXNoIGRvd24gdGhlc2UgQVNTRVJUcyBp
bnRvIFNjcmlwdFdyYXBwYWJsZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVGaWx0ZXJDb25kaXRpb246
OmFjY2VwdE5vZGUpOiBVcGRhdGVkIGZvciBub24tSGFuZGxlLW5lc3MKKyAgICAgICAgb2YgV2Vh
azxUPi4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0V3JhcHBhYmxlOjpzZXRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdFdyYXBwYWJsZTo6Y2xlYXJXcmFwcGVyKTogVXNlIHdhcygpLCBhcyBhYm92ZS4K
KwogMjAxMi0wMy0yOSAgQmVhciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CiAKICAgICAg
ICAgVXBkYXRlIENTUyBFeGNsdXNpb24gd3JhcC1mbG93IHZhbHVlcyBsZWZ0ICYgcmlnaHQgdG8g
c3RhcnQgJiBlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJX
b3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3Jh
cHBlcldvcmxkLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCB2b2lkIEpTU3RyaW5nT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlCiB7CiAgICAgSlNTdHJp
bmcqIGpzU3RyaW5nID0gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihoYW5kbGUuZ2V0KCkuYXNDZWxs
KCkpOwogICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBs
Kj4oY29udGV4dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChqc1N0cmluZywgbV93b3JsZC0+bV9zdHJp
bmdDYWNoZS5maW5kKHN0cmluZ0ltcGwpLT5zZWNvbmQuZ2V0KCkgPT0ganNTdHJpbmcpOworICAg
IEFTU0VSVF9VTlVTRUQoanNTdHJpbmcsIG1fd29ybGQtPm1fc3RyaW5nQ2FjaGUuZmluZChzdHJp
bmdJbXBsKS0+c2Vjb25kLndhcyhqc1N0cmluZykpOwogICAgIG1fd29ybGQtPm1fc3RyaW5nQ2Fj
aGUucmVtb3ZlKHN0cmluZ0ltcGwpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAs
NyBAQCBlbnVtIFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgIHsKICAgICAgICAgaWYgKGNs
ZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJzLmZpbmQoZG9t
T2JqZWN0KS0+c2Vjb25kLmdldCgpID09IHdyYXBwZXIpOworICAgICAgICBBU1NFUlQod29ybGQt
Pm1fd3JhcHBlcnMuZmluZChkb21PYmplY3QpLT5zZWNvbmQud2FzKHdyYXBwZXIpKTsKICAgICAg
ICAgd29ybGQtPm1fd3JhcHBlcnMucmVtb3ZlKGRvbU9iamVjdCk7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmgJKHJldmlzaW9uIDEx
MjU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIGlubGluZSBib29sIHNldElubGluZUNhY2hlZFdy
YXBwZXIoRE9NV3IKIHsKICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgQVNTRVJUKCFub2RlLT53cmFwcGVyKCkpOwogICAgIG5vZGUtPnNldFdy
YXBwZXIoKndvcmxkLT5nbG9iYWxEYXRhKCksIHdyYXBwZXIsIHdyYXBwZXJPd25lcih3b3JsZCwg
bm9kZSksIHdyYXBwZXJDb250ZXh0KHdvcmxkLCBub2RlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC01MSw4ICs1MCw3IEBAIGlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T00KIHsKICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgQVNTRVJUX1VOVVNFRCh3cmFwcGVyLCBub2RlLT53cmFwcGVyKCkgPT0gd3JhcHBlcik7
Ci0gICAgbm9kZS0+Y2xlYXJXcmFwcGVyKCk7CisgICAgbm9kZS0+Y2xlYXJXcmFwcGVyKHdyYXBw
ZXIpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgc2hvcnQgSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uOjphY2NlcHROb2RlKAogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAKLSAgICBpZiAoIW1fZmlsdGVyLmlzT2JqZWN0KCkpCisgICAgaWYgKCFtX2ZpbHRl
ciB8fCAhbV9maWx0ZXItPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpG
SUxURVJfQUNDRVBUOwogCiAgICAvLyBUaGUgZXhlYyBhcmd1bWVudCBoZXJlIHNob3VsZCBvbmx5
IGJlIG51bGwgaWYgdGhpcyB3YXMgY2FsbGVkIGZyb20gYQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxMSArNDUsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRXcmFwcGVyKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIsIEpTQzo6V2Vh
a0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQpCiAgICAgeworICAgICAg
ICBBU1NFUlQoIW1fd3JhcHBlcik7CiAgICAgICAgIG1fd3JhcHBlciA9IEpTQzo6UGFzc1dlYWs8
SlNET01XcmFwcGVyPihnbG9iYWxEYXRhLCB3cmFwcGVyLCB3cmFwcGVyT3duZXIsIGNvbnRleHQp
OwogICAgIH0KIAotICAgIHZvaWQgY2xlYXJXcmFwcGVyKCkKKyAgICB2b2lkIGNsZWFyV3JhcHBl
cihKU0RPTVdyYXBwZXIqIHdyYXBwZXIpCiAgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHdy
YXBwZXIsIG1fd3JhcHBlci53YXMod3JhcHBlcikpOwogICAgICAgICBtX3dyYXBwZXIuY2xlYXIo
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjU4NykKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAz
LTI5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmlyc3Qg
c3RlcCB0b3dhcmQgaW5jcmVtZW50YWwgV2VhazxUPiBmaW5hbGl6YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjcwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBmb3IgQVBJIGNoYW5n
ZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmZpbmFsaXpl
KToKKwogMjAxMi0wMy0yOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjExMjU1My4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blByb2Nlc3NDb25uZWN0aW9uLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5
c3RlbS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1l
L1Njb3BlQ2hhaW4uaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0
TWFwOjpmaW5hbGl6ZShKU0M6OkgKIHsKICAgICBIYXNoTWFwPE5QT2JqZWN0KiwgSlNDOjpXZWFr
PEpTTlBPYmplY3Q+ID46Oml0ZXJhdG9yIGZvdW5kID0gbV9qc05QT2JqZWN0cy5maW5kKHN0YXRp
Y19jYXN0PE5QT2JqZWN0Kj4oY29udGV4dCkpOwogICAgIEFTU0VSVChmb3VuZCAhPSBtX2pzTlBP
YmplY3RzLmVuZCgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgYXNPYmplY3QoaGFuZGxl
LmdldCgpKSA9PSBmb3VuZC0+c2Vjb25kKTsKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgYXNP
YmplY3QoaGFuZGxlLmdldCgpKSA9PSBmb3VuZC0+c2Vjb25kLmdldCgpKTsKICAgICBKU05QT2Jq
ZWN0KiBvYmplY3QgPSBmb3VuZC0+c2Vjb25kLmdldCgpOwogICAgIG1fanNOUE9iamVjdHMucmVt
b3ZlKGZvdW5kKTsKICAgICBhZGRUb0ludmFsaWRhdGlvblF1ZXVlKG9iamVjdC0+bGVha05QT2Jq
ZWN0KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05ldHNjYXBlUGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQ
bHVnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9IVFRQSGVhZGVyTWFwLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9LVVJMLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvU2NvcGVDaGFpbi5oPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135199</attachid>
            <date>2012-04-02 14:59:02 -0700</date>
            <delta_ts>2012-04-02 16:15:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82670-20120402145758.patch</filename>
            <type>text/plain</type>
            <size>104990</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MiBA
QAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyBhIFdlYWs8VD4gaGVhcCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBpbmNyZW1l
bnRhbAorICAgICAgICBmaW5hbGl6YXRpb24sIHdoaWxlIG1ha2luZyBhcyBmZXcgYmVoYXZpb3Ig
Y2hhbmdlcyBhcyBwb3NzaWJsZS4gVGhlIGJlaGF2aW9yCisgICAgICAgIGNoYW5nZXMgaXQgbWFr
ZXMgYXJlOgorCisgICAgICAgICgqKSBXZWFrPFQ+J3MgcmF3IEpTVmFsdWUgbm8gbG9uZ2VyIHJl
dmVydHMgdG8gSlNWYWx1ZSgpIGF1dG9tYXRpY2FsbHkgLS0KKyAgICAgICAgaW5zdGVhZCwgYSBz
ZXBhcmF0ZSBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBKU1ZhbHVlIGlzIG5vIGxvbmdlciB2YWxp
ZC4KKyAgICAgICAgKFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgSlNWYWx1ZSBjYW4gYmUg
cHJlc2VydmVkIGZvciBsYXRlciBmaW5hbGl6YXRpb24uKQorICAgICAgICBPYmplY3RzIGRlYWxp
bmcgd2l0aCBXZWFrSW1wbHMgZGlyZWN0bHkgbXVzdCBjaGFuZ2UgdG8gY2hlY2sgdGhlIGZsYWcu
CisKKyAgICAgICAgKCopIFdlYWs8VD4gaXMgbm8gbG9uZ2VyIGEgc3ViY2xhc3Mgb2YgSGFuZGxl
PFQ+LgorCisgICAgICAgICgqKSBET00gR0MgcGVyZm9ybWFuY2UgaXMgZGlmZmVyZW50IC0tIDkl
IGZhc3RlciBpbiB0aGUgZ2VvbWV0cmljIG1lYW4sCisgICAgICAgIGJ1dCAxNSUgc2xvd2VyIGlu
IG9uZSBzcGVjaWZpYyBjYXNlOgorICAgICAgICAgICAgICAgIGdjLWRvbTEuaHRtbDogNiUgIGZh
c3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTIuaHRtbDogMjMlIGZhc3RlcgorICAgICAgICAg
ICAgICAgIGdjLWRvbTMuaHRtbDogMTclIGZhc3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTQu
aHRtbDogMTUlICpzbG93ZXIqCisKKyAgICAgICAgVGhlIGtleSBmZWF0dXJlcyBvZiB0aGlzIG5l
dyBoZWFwIGFyZToKKworICAgICAgICAoKikgRWFjaCBibG9jayBrbm93cyBpdHMgb3duIHN0YXRl
LCBpbmRlcGVuZGVudCBvZiBhbnkgb3RoZXIgYmxvY2tzLgorCisgICAgICAgICgqKSBFYWNoIGJs
b2NrIGNhY2hlcyBpdHMgb3duIHN3ZWVwIHJlc3VsdC4KKworICAgICAgICAoKikgVGhlIGhlYXAg
dmlzaXRzIGRlYWQgV2VhazxUPnMgYXQgdGhlIGVuZCBvZiBHQy4gKEl0IGRvZXNuJ3QKKyAgICAg
ICAgbWFyayB0aGVtIHlldCwgc2luY2UgdGhhdCB3b3VsZCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4p
CisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tPYmplY3REYXRhOjpmaW5hbGl6ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Ojppbml0KTogVXBkYXRlZCB0byB1c2Ug
dGhlIG5ldyBXZWFrSGVhcCBBUEkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6IFBhaWQgdGhlIGJ1aWxkIHN5c3RlbSB0
YXggc2luY2UgSSBhZGRlZCBzb21lIG5ldyBmaWxlcy4KKworICAgICAgICAqIGhlYXAvSGFuZGxl
Lmg6IE1hZGUgV2Vha0Jsb2NrIGEgZnJpZW5kIGFuZCBleHBvc2VkIHNsb3QoKSBhcyBwdWJsaWMs
CisgICAgICAgIHNvIHdlIGNhbiBrZWVwIHBhc3NpbmcgYSBIYW5kbGU8VD4gdG8gZmluYWxpemVy
cywgdG8gYXZvaWQgbW9yZSBzdXJmYWNlCisgICAgICAgIGFyZWEgY2hhbmdlIGluIHRoaXMgcGF0
Y2guIEEgZm9sbG93LXVwIHBhdGNoIHNob3VsZCBjaGFuZ2UgdGhlIHR5cGUgd2UKKyAgICAgICAg
cGFzcyB0byBmaW5hbGl6ZXJzLgorCisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmNwcDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OndyaXRlQmFycmllcik6Cisg
ICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUpOgorICAgICAgICAqIGhlYXAvSGFu
ZGxlSGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZUhlYXApOgorICAgICAg
ICAoTm9kZSk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUpOiBSZW1vdmVk
IGFsbCBjb2RlIHJlbGF0ZWQgdG8gV2VhazxUPiwgc2luY2UKKyAgICAgICAgd2UgaGF2ZSBhIHNl
cGFyYXRlIFdlYWtIZWFwIG5vdy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OkhlYXApOiBSZW1vdmVkIG1fZXh0cmFDb3N0IGJlY2F1c2UgZXh0cmEgY29z
dCBpcyBhY2NvdW50ZWQKKyAgICAgICAgZm9yIHRocm91Z2ggb3VyIHdhdGVybWFyayBub3cuIFJl
bW92ZWQgbV93YXRlck1hcmsgYmVjYXVzZSBpdCB3YXMgdW51c2VkLgorCisgICAgICAgIChKU0M6
OkhlYXA6OmRlc3Ryb3kpOiBVcGRhdGVkIGZvciBhZGRpdGlvbiBvZiBXZWFrSGVhcC4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZSk6IENoYW5nZWQg
ZnJvbSB1c2luZyBpdHMgb3duCisgICAgICAgIHZhcmlhYmxlIHRvIHBhcnRpY2lwYXRpbmcgaW4g
dGhlIHdhdGVybWFyayBzdHJhdGVneS4gSSB3YW50ZWQgdG8gc3RhbmRhcmRpemUKKyAgICAgICAg
V2Vha0hlYXAgYW5kIGFsbCBvdGhlciBIZWFwIGNsaWVudHMgb24gdGhpcyBzdHJhdGVneSwgdG8g
bWFrZSBzdXJlIGl0J3MKKyAgICAgICAgYWNjdXJhdGUuCisgCisgICAgICAgIChKU0M6OkhlYXA6
Om1hcmtSb290cyk6IFVwZGF0ZWQgZm9yIGFkZGl0aW9uIG9mIFdlYWtIZWFwLiBBZGRlZCBXZWFr
SGVhcAorICAgICAgICBkZWFkIHZpc2l0IHBhc3MsIGFzIGV4cGxhaW5lZCBhYm92ZS4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVzZXRBbGxv
Y2F0b3JzKTogVXBkYXRlZCBmb3IgYWRkaXRpb24gb2YgV2Vha0hlYXAuCisKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6RmluYWxpemVyT3du
ZXI6OmZpbmFsaXplKTogVXBkYXRlZCBmb3IgbmV3IFdlYWs8VD4gQVBJLgorCisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndlYWtIZWFwKToKKyAgICAgICAgKEhl
YXApOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1dhdGVyTWFyayk6IEFkZGVkIGEgd2F5IHRv
IHBhcnRpY2lwYXRlIGluIHRoZSB3YXRlcm1hcmtpbmcKKyAgICAgICAgc3RyYXRlZ3ksIHNpbmNl
IHRoaXMgaXMgdGhlIGJlc3Qgd2F5IGZvciBXZWFrSGVhcCB0byByZXBvcnQgaXRzIG1lbW9yeQor
ICAgICAgICBjb3N0LiAoSSBwbGFuIHRvIHVwZGF0ZSB0aGlzIGluIGEgZm9sbG93LXVwIHBhdGNo
IHRvIG1ha2UgaXQgbW9yZSBhY2N1cmF0ZSwKKyAgICAgICAgYnV0IGZvciBub3cgaXQgaXMgbm90
IGxlc3MgYWNjdXJhdGUgdGhhbiBpdCB1c2VkIHRvIGJlLikKKworICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjphZGRUb1dhdGVyTWFyayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpkaWRDb25zdW1lRnJlZUxpc3QpOiBSZW1vdmVkIG1fbnVyc2VyeVdhdGVyTWFyayBiZWNhdXNl
CisgICAgICAgIGl0IHdhcyB1bnVzZWQsIGFuZCBJIGRpZG4ndCB3YW50IHRvIHVwZGF0ZSBXZWFr
SGVhcCB0byBrZWVwIGFuIHVzdXNlZAorICAgICAgICB2YXJpYWJsZSB3b3JraW5nLiBBZGRlZCBB
UEkgZm9yIGFib3ZlLgorCisgICAgICAgICogaGVhcC9QYXNzV2Vhay5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKFdlYWtJbXBsQWNjZXNzb3IpOgorICAgICAgICAoUGFzc1dlYWspOgorICAg
ICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6OjpnZXQpOgorICAgICAgICAo
SlNDOjo6Ondhcyk6CisgICAgICAgIChKU0M6Ojo6UGFzc1dlYWspOgorICAgICAgICAoSlNDOjo6
On5QYXNzV2Vhayk6CisgICAgICAgIChKU0M6OlVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAg
ICAoSlNDOjo6OmxlYWtJbXBsKToKKyAgICAgICAgKEpTQzo6YWRvcHRXZWFrKToKKyAgICAgICAg
KiBoZWFwL1N0cm9uZy5oOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yISk6CisgICAg
ICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKToKKyAgICAgICAgKEpTQzo6U3Ryb25nOjpnZXQpOgorICAgICAgICAqIGhlYXAv
V2Vhay5oOgorICAgICAgICAoV2Vhayk6CisgICAgICAgIChKU0M6Ojo6V2Vhayk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjo6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6Ojp+V2Vhayk6CisgICAgICAgIChKU0M6Ojo6c3dhcCk6CisgICAgICAgIChKU0M6
Oj0pOgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6VW5zcGVjaWZp
ZWRCb29sVHlwZSk6CisgICAgICAgIChKU0M6Ojo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6Ojo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjo6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IExvdHMgb2Yg
Y29kZSBjaGFuZ2VzIGhlcmUsIGJ1dCB0aGV5IGJvaWwKKyAgICAgICAgZG93biB0byB0d28gdGhp
bmdzOgorCisgICAgICAgICgqKSBBbGxvY2F0ZSBXZWFrSW1wbHMgZnJvbSB0aGUgV2Vha0hlYXAg
aW5zdGVhZCBvZiBIYW5kbGVzIGZyb20gdGhlIEhhbmRsZUhlYXAuCisKKyAgICAgICAgKCopIEV4
cGxpY2l0bHkgY2hlY2sgV2Vha0ltcGw6OnN0YXRlKCkgZm9yIG5vbi1saXZlbmVzcyBiZWZvcmUg
cmV0dXJuaW5nCisgICAgICAgIGEgdmFsdWUgKGV4cGxhaW5lZCBhYm92ZSkuCisKKyAgICAgICAg
VGhlc2UgZmlsZXMgaW1wbGVtZW50IHRoZSBuZXcgV2VhazxUPiBoZWFwIGJlaGF2aW9yIGRlc2Ny
aWJlZCBhYm92ZToKKworICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDogQWRkZWQuCisgICAg
ICAgICogaGVhcC9XZWFrQmxvY2suaDogQWRkZWQuCisgICAgICAgICogaGVhcC9XZWFrSGFuZGxl
T3duZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIYW5kbGVPd25lci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIZWFwLmNwcDogQWRkZWQuCisgICAgICAgICogaGVhcC9X
ZWFrSGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtJbXBsLmg6IEFkZGVkLgorCisg
ICAgICAgIE9uZSBpbnRlcmVzdGluZyBkaWZmZXJlbmNlIGZyb20gdGhlIG9sZCBoZWFwIGlzIHRo
YXQgd2UgZG9uJ3QgYWxsb3cKKyAgICAgICAgY2xpZW50cyB0byBvdmVyd3JpdGUgYSBXZWFrSW1w
bCBhZnRlciBhbGxvY2F0aW5nIGl0LCBhbmQgd2UgZG9uJ3QgcmVjeWNsZQorICAgICAgICBXZWFr
SW1wbHMgcHJpb3IgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBs
YXp5IGZpbmFsaXphdGlvbiwKKyAgICAgICAgYnV0IGl0IHdpbGwgYWxzbyBoZWxwIHVzIGVzYWJs
aXNoIGEgdXNlZnVsIGludmFyaWFudCBpbiB0aGUgZnV0dXJlOiBhbGxvY2F0aW5nCisgICAgICAg
IGEgV2Vha0ltcGwgd2lsbCBiZSBhIGJpbmRpbmcgY29udHJhY3QgdG8gcnVuIGEgZmluYWxpemVy
IGF0IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgIGZ1dHVyZSwgZXZlbiBpZiB0aGUgV2Vha0lt
cGwgaXMgbGF0ZXIgZGVhbGxvY2F0ZWQuCisKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOiBDaGVjayB0aGUgV2Vh
azxUPiBmb3IgISBpbnN0ZWFkIG9mCisgICAgICAgIGl0cyBKU1ZhbHVlLCBzaW5jZSB0aGF0J3Mg
b3VyIEFQSSBjb250cmFjdCBub3csIGFuZCB0aGUgSlNWYWx1ZSBtaWdodAorICAgICAgICBiZSBz
dGFsZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OmpzQ2Fz
dCk6IEFsbG93IGNhc3RpbmcgTlVMTCBwb2ludGVycyBiZWNhdXNlIGl0J3MgdXNlZnVsIGFuZCBo
YXJtbGVzcy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOiBJIGNhbid0IHJlbWVtYmVyIHdoeSBJ
IGRpZCB0aGlzLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOiBJIGhhZCB0byB1cGRhdGUgdGhlc2Ug
Y2xhc3NlcyBiZWNhdXNlIHRoZXkgYWxsb2NhdGUKKyAgICAgICAgYW5kIGRlYWxsb2NhdGUgd2Vh
ayBwb2ludGVycyBtYW51YWxseS4gVGhleSBzaG91bGQgcHJvYmFibHkgc3RvcCBkb2luZyB0aGF0
LgorCiAyMDEyLTAzLTI5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeCBwMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDE5IEBAIFNF
VChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwCisgICAgaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCi0gICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSGVhcC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAg
ICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcAogICAg
IGhlYXAvTWFya2VkU3BhY2UuY3BwCi0gICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAg
ICBoZWFwL01hcmtTdGFjay5jcHAKKyAgICBoZWFwL1dlYWtIZWFwLmNwcAorICAgIGhlYXAvV2Vh
a0hhbmRsZU93bmVyLmNwcAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogCiAgICAgZGVidWdnZXIv
RGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAsNiArMjUwLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFwLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDYgKzIxNyw5IEBACiAgICAgICAgICAgICAnYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAnLAogICAgICAgICAgICAgJ2J5dGVjb21waWxlci9SZWdpc3RlcklELmgnLAogICAgICAgICAg
ICAgJ2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwJywKKyAgICAgICAgICAgICdoZWFwL1dlYWtI
ZWFwLmNwcCcsCisgICAgICAgICAgICAnaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwJywKKyAgICAg
ICAgICAgICdoZWFwL1dlYWtCbG9jay5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlSGVh
cC5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlU3RhY2suY3BwJywKICAgICAgICAgICAg
ICdoZWFwL0hlYXAuY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0NvcGllZFNwYWNl
LmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAogICAgIGhlYXAvREZHQ29k
ZUJsb2Nrcy5jcHAgXAorICAgIGhlYXAvV2Vha0hlYXAuY3BwIFwKKyAgICBoZWFwL1dlYWtIYW5k
bGVPd25lci5jcHAgXAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVI
ZWFwLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw3IEBAIHZvaWQgSlND
YWxsYmFja09iamVjdERhdGE6OmZpbmFsaXplKEhhbmQKICAgICBmb3IgKDsganNDbGFzczsganND
bGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKQogICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6
ZUNhbGxiYWNrIGZpbmFsaXplID0ganNDbGFzcy0+ZmluYWxpemUpCiAgICAgICAgICAgICBmaW5h
bGl6ZSh0aGlzUmVmKTsKLSAgICBIYW5kbGVTbG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwotICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgV2Vha0hl
YXA6OmRlYWxsb2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQog
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTEyNTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNCArMTAyLDExIEBAIHZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojppbml0KEV4ZWMKICAgICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwg
dG9SZWYodGhpcykpOwogICAgIH0KIAotICAgIGJvb2wgbmVlZHNGaW5hbGl6ZXIgPSBmYWxzZTsK
LSAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHIg
JiYgIW5lZWRzRmluYWxpemVyOyBqc0NsYXNzUHRyID0ganNDbGFzc1B0ci0+cGFyZW50Q2xhc3Mp
Ci0gICAgICAgIG5lZWRzRmluYWxpemVyID0ganNDbGFzc1B0ci0+ZmluYWxpemU7Ci0gICAgaWYg
KG5lZWRzRmluYWxpemVyKSB7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGV4ZWMtPmdsb2Jh
bERhdGEoKS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0
KCksIGNsYXNzUmVmKCkpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0
ZUJhcnJpZXIoc2xvdCwgdGhpcyk7Ci0gICAgICAgICpzbG90ID0gdGhpczsKKyAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHI7IGpzQ2xhc3NQdHIg
PSBqc0NsYXNzUHRyLT5wYXJlbnRDbGFzcykgeworICAgICAgICBpZiAoanNDbGFzc1B0ci0+Zmlu
YWxpemUpIHsKKyAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLndlYWtIZWFwKCkt
PmFsbG9jYXRlKHRoaXMsIG1fY2FsbGJhY2tPYmplY3REYXRhLmdldCgpLCBjbGFzc1JlZigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2
aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0Jh
c2UueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJD
b21waWxlclZlcnNpb24ueGNjb25maWciCiAKIENPTVBJTEVSX1NQRUNJRklDX1dBUk5JTkdfQ0ZM
QUdTID0gJChDT01QSUxFUl9TUEVDSUZJQ19XQVJOSU5HX0NGTEFHU18kKFRBUkdFVF9HQ0NfVkVS
U0lPTikpOwotQ09NUElMRVJfU1BFQ0lGSUNfV0FSTklOR19DRkxBR1NfTExWTV9DT01QSUxFUiA9
IC1XZ2xvYmFsLWNvbnN0cnVjdG9ycyAtV2V4aXQtdGltZS1kZXN0cnVjdG9yczsKIAogQ0xBTkdf
V0FSTl9DWFgwWF9FWFRFTlNJT05TID0gTk87CiBERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBk
d2FyZjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgko
d29ya2luZyBjb3B5KQpAQCAtNSw5ICs1LDkgQEAgRVhQT1JUUwogICAgID8/JHN0cnRvZEAkMEFA
JDAwQFdURkBAWUFOUEJEUEFQQURAWgogICAgID8/JHN0cnRvZEAkMEFAJDBBQEBXVEZAQFlBTlBC
RFBBUEFEQFoKICAgICA/PzBBcnJheUJ1ZmZlclZpZXdAV1RGQEBJQUVAVj8kUGFzc1JlZlB0ckBW
QXJyYXlCdWZmZXJAV1RGQEBAMUBJQFoKKyAgICA/PzBDb2xsYXRvckBXVEZAQFFBRUBQQkRAWgog
ICAgID8/MENTdHJpbmdAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBC
RElAWgotICAgID8/MENvbGxhdG9yQFdURkBAUUFFQFBCREBaCiAgICAgPz8wRGF0ZUluc3RhbmNl
QEpTQ0BASUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wRGVmYXVs
dEdDQWN0aXZpdHlDYWxsYmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoKICAgICA/PzBEcm9wQWxs
TG9ja3NASlNMb2NrQEpTQ0BAUUFFQFc0SlNMb2NrQmVoYXZpb3JAMkBAWgpAQCAtMjUsMTAgKzI1
LDEwIEBAIEVYUE9SVFMKICAgICA/PzBTdHJpbmdPYmplY3RASlNDQEBJQUVAQUFWSlNHbG9iYWxE
YXRhQDFAUEFWU3RydWN0dXJlQDFAQFoKICAgICA/PzBTdHJ1Y3R1cmVASlNDQEBBQUVAQUFWSlNH
bG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBWSlNWYWx1ZUAxQEFCVlR5cGVJbmZvQDFA
UEJVQ2xhc3NJbmZvQDFAQFoKICAgICA/PzBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVAWFoKLSAg
ICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCREBaCi0gICAgPz8wVVN0cmluZ0BKU0NAQFFBRUBQQkRJ
QFoKICAgICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCX1dAWgogICAgID8/MFVTdHJpbmdASlNDQEBR
QUVAUEJfV0lAWgorICAgID8/MFVTdHJpbmdASlNDQEBRQUVAUEJEQFoKKyAgICA/PzBVU3RyaW5n
QEpTQ0BAUUFFQFBCRElAWgogICAgID8/MFdURlRocmVhZERhdGFAV1RGQEBRQUVAWFoKICAgICA/
PzBZYXJyUGF0dGVybkBZYXJyQEpTQ0BAUUFFQEFCVlVTdHJpbmdAMkBfTjFQQVBCREBaCiAgICAg
Pz8xQXJyYXlCdWZmZXJWaWV3QFdURkBAVUFFQFhaCkBAIC00MiwxNSArNDIsMTAgQEAgRVhQT1JU
UwogICAgID8/MVJlZkNvdW50ZWRMZWFrQ291bnRlckBXVEZAQFFBRUBYWgogICAgID8/MVNvdXJj
ZVByb3ZpZGVyQ2FjaGVASlNDQEBRQUVAWFoKICAgICA/PzFUaHJlYWRDb25kaXRpb25AV1RGQEBR
QUVAWFoKLSAgICA/PzFXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCiAgICAgPz8xV2Vha0hhbmRs
ZU93bmVyQEpTQ0BAVUFFQFhaCisgICAgPz8xV1RGVGhyZWFkRGF0YUBXVEZAQFFBRUBYWgogICAg
ID8/OEpTQ0BAWUFfTkFCVlVTdHJpbmdAMEAwQFoKICAgICA/PzhXVEZAQFlBX05BQlZDU3RyaW5n
QDBAMEBaCi0gICAgP0VjbWFTY3JpcHRDb252ZXJ0ZXJARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJA
ZG91YmxlX2NvbnZlcnNpb25AV1RGQEBTQUFCVjEyM0BYWgotICAgID9Ub0V4cG9uZW50aWFsQERv
dWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0
cmluZ0J1aWxkZXJAMjNAQFoKLSAgICA/VG9GaXhlZEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBk
b3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCi0gICAg
P1RvUHJlY2lzaW9uQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdU
RkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKLSAgICA/VG9TaG9ydGVzdEBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTlBBVlN0cmluZ0J1
aWxkZXJAMjNAQFoKICAgICA/YWJzb2x1dGVUaW1lVG9XYWl0VGltZW91dEludGVydmFsQFdURkBA
WUFLTkBaCiAgICAgP2FjdGl2aXR5Q2FsbGJhY2tASGVhcEBKU0NAQFFBRVBBVkdDQWN0aXZpdHlD
YWxsYmFja0AyQFhaCiAgICAgP2FkZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0
ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCREBaCkBAIC02OSw4ICs2NCw4IEBAIEVYUE9SVFMKICAg
ICA/YWRkU3RhdGljR2xvYmFsc0BKU0dsb2JhbE9iamVjdEBKU0NAQElBRVhQQVVHbG9iYWxQcm9w
ZXJ0eUluZm9AMTJASEBaCiAgICAgP2FsbG9jYXRlUHJvcGVydHlTdG9yYWdlQEpTT2JqZWN0QEpT
Q0BAUUFFWEFBVkpTR2xvYmFsRGF0YUAyQElJQFoKICAgICA/YWxsb2NhdGVTbG93Q2FzZUBNYXJr
ZWRBbGxvY2F0b3JASlNDQEBBQUVQQVhYWgotICAgID9hcHBlbmRAU3RyaW5nQnVpbGRlckBXVEZA
QFFBRVhQQkVJQFoKICAgICA/YXBwZW5kQFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYUEJfV0lAWgor
ICAgID9hcHBlbmRAU3RyaW5nQnVpbGRlckBXVEZAQFFBRVhQQkVJQFoKICAgICA/YXNjaWlAVVN0
cmluZ0BKU0NAQFFCRT9BVkNTdHJpbmdAV1RGQEBYWgogICAgID9hdHRhY2hARGVidWdnZXJASlND
QEBRQUVYUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID9icm9hZGNhc3RAVGhyZWFkQ29uZGl0
aW9uQFdURkBAUUFFWFhaCkBAIC03OCwxMCArNzMsMTAgQEAgRVhQT1JUUwogICAgID9idWZmZXJM
ZW5ndGhGb3JTdHJpbmdFeHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVhaCiAgICAg
P2J5dGVDb21waWxlQFlhcnJASlNDQEBZQT9BVj8kUGFzc093blB0ckBVQnl0ZWNvZGVQYXR0ZXJu
QFlhcnJASlNDQEBAV1RGQEBBQVVZYXJyUGF0dGVybkAxMkBQQVZCdW1wUG9pbnRlckFsbG9jYXRv
ckA0QEBaCiAgICAgP2J5dGVTaXplQFNvdXJjZVByb3ZpZGVyQ2FjaGVASlNDQEBRQkVJWFoKKyAg
ICA/Y2FsY3VsYXRlZEZ1bmN0aW9uTmFtZUBEZWJ1Z2dlckNhbGxGcmFtZUBKU0NAQFFCRT9BVlVT
dHJpbmdAMkBYWgogICAgID9jYWxjdWxhdGVEU1RPZmZzZXRAV1RGQEBZQU5OTkBaCiAgICAgP2Nh
bGN1bGF0ZVN0cmluZ0hhc2hBbmRMZW5ndGhGcm9tVVRGOEBVbmljb2RlQFdURkBAWUFJUEJEMEFB
STFAWgogICAgID9jYWxjdWxhdGVVVENPZmZzZXRAV1RGQEBZQUhYWgotICAgID9jYWxjdWxhdGVk
RnVuY3Rpb25OYW1lQERlYnVnZ2VyQ2FsbEZyYW1lQEpTQ0BAUUJFP0FWVVN0cmluZ0AyQFhaCiAg
ICAgP2NhbGxASlNDQEBZQT9BVkpTVmFsdWVAMUBQQVZFeGVjU3RhdGVAMUBWMjFAVzRDYWxsVHlw
ZUAxQEFCVENhbGxEYXRhQDFAMUFCVkFyZ0xpc3RAMUBAWgogICAgID9jYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvckBKU0NAQFlJX0pQQVZFeGVjU3RhdGVAMUBAWgogICAgID9jYWxsT25NYWlu
VGhyZWFkQFdURkBAWUFYUDZBWFBBWEBaMEBaCkBAIC05MSw4ICs4Niw4IEBAIEVYUE9SVFMKICAg
ICA/Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpT
R2xvYmFsRGF0YUAyQFBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/Y2hlY2tDdXJyZW50SWRlbnRp
ZmllclRhYmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZFeGVjU3RhdGVAMkBAWgogICAgID9jaGVj
a0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkpTR2xvYmFsRGF0
YUAyQEBaCi0gICAgP2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0ZUAxQEFCVlNvdXJj
ZUNvZGVAMUBQQVZKU1ZhbHVlQDFAQFoKICAgICA/Y2hlY2tzdW1ATUQ1QFdURkBAUUFFWEFBVj8k
VmVjdG9yQEUkMEJBQEAyQEBaCisgICAgP2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0
ZUAxQEFCVlNvdXJjZUNvZGVAMUBQQVZKU1ZhbHVlQDFAQFoKICAgICA/Y2xhc3NOYW1lQEpTT2Jq
ZWN0QEpTQ0BAU0E/QVZVU3RyaW5nQDJAUEJWMTJAQFoKICAgICA/Y2xlYXJAU291cmNlUHJvdmlk
ZXJDYWNoZUBKU0NAQFFBRVhYWgogICAgID9jbGVhckJ1aWx0aW5TdHJ1Y3R1cmVzQEpTR2xvYmFs
RGF0YUBKU0NAQFFBRVhYWgpAQCAtMTY0LDYgKzE1OSw3IEBAIEVYUE9SVFMKICAgICA/ZGlzcGxh
eU5hbWVASlNGdW5jdGlvbkBKU0NAQFFBRT9CVlVTdHJpbmdAMkBQQVZFeGVjU3RhdGVAMkBAWgog
ICAgID9kdG9hQFdURkBAWUFYUUFETkFBX05BQUhBQUlAWgogICAgID9kdW1wU2FtcGxlRGF0YUBK
U0dsb2JhbERhdGFASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJAQFoKKyAgICA/RWNtYVNjcmlwdENv
bnZlcnRlckBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNB
QUJWMTIzQFhaCiAgICAgP2VtcHR5QFN0cmluZ0ltcGxAV1RGQEBTQVBBVjEyQFhaCiAgICAgP2Vu
dW1lcmFibGVAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUJFX05YWgogICAgID9lcXVhbFVURjE2
V2l0aFVURjhAVW5pY29kZUBXVEZAQFlBX05QQl9XMFBCRDFAWgpAQCAtMTgzLDYgKzE3OSw3IEBA
IEVYUE9SVFMKICAgICA/ZmFzdFplcm9lZE1hbGxvY0BXVEZAQFlBUEFYSUBaCiAgICAgP2ZpbGxH
ZXR0ZXJQcm9wZXJ0eVNsb3RASlNPYmplY3RASlNDQEBBQUVYQUFWUHJvcGVydHlTbG90QDJAUEFW
PyRXcml0ZUJhcnJpZXJCYXNlQFc0VW5rbm93bkBKU0NAQEAyQEBaCiAgICAgP2ZpbmFsaXplQFdl
YWtIYW5kbGVPd25lckBKU0NAQFVBRVhWPyRIYW5kbGVAVzRVbmtub3duQEpTQ0BAQDJAUEFYQFoK
KyAgICA/ZmluZEFsbG9jYXRvckBXZWFrSGVhcEBKU0NAQEFBRVBBVUZyZWVDZWxsQFdlYWtCbG9j
a0AyQFhaCiAgICAgP2ZpbmlzaENyZWF0aW9uQERhdGVJbnN0YW5jZUBKU0NAQElBRVhBQVZKU0ds
b2JhbERhdGFAMkBOQFoKICAgICA/ZmluaXNoQ3JlYXRpb25ASW50ZXJuYWxGdW5jdGlvbkBKU0NA
QElBRVhBQVZKU0dsb2JhbERhdGFAMkBBQlZJZGVudGlmaWVyQDJAQFoKICAgICA/ZmluaXNoQ3Jl
YXRpb25ASlNBcnJheUBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBJQFoKQEAgLTIyMCwxMCAr
MjE3LDEwIEBAIEVYUE9SVFMKICAgICA/Z2xvYmFsRXhlY0BKU0dsb2JhbE9iamVjdEBKU0NAQFFB
RVBBVkV4ZWNTdGF0ZUAyQFhaCiAgICAgP2dsb2JhbE9iamVjdENvdW50QEhlYXBASlNDQEBRQUVJ
WFoKICAgICA/Z3Jvd0BIYW5kbGVIZWFwQEpTQ0BAQUFFWFhaCisgICAgP2hhc2hTbG93Q2FzZUBT
dHJpbmdJbXBsQFdURkBAQUJFSVhaCiAgICAgP2hhc0luc3RhbmNlQEpTT2JqZWN0QEpTQ0BAU0Ff
TlBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFZKU1ZhbHVlQDJAMkBaCiAgICAgP2hhc1Byb3BlcnR5QEpT
T2JqZWN0QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBBQlZJZGVudGlmaWVyQDJAQFoKICAgICA/
aGFzUHJvcGVydHlASlNPYmplY3RASlNDQEBRQkVfTlBBVkV4ZWNTdGF0ZUAyQElAWgotICAgID9o
YXNoU2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRUlYWgogICAgID9oZWFwQEhlYXBASlNDQEBT
QVBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/aW5jcmVtZW50QFJlZkNvdW50ZWRMZWFrQ291bnRl
ckBXVEZAQFFBRVhYWgogICAgID9pbml0QEF0b21pY1N0cmluZ0BXVEZAQFNBWFhaCkBAIC0zMTEs
MTAgKzMwOCwxMCBAQCBFWFBPUlRTCiAgICAgP3NldE9yZGVyTG93ZXJGaXJzdEBDb2xsYXRvckBX
VEZAQFFBRVhfTkBaCiAgICAgP3NldFByb3RvdHlwZUBKU09iamVjdEBKU0NAQFFBRVhBQVZKU0ds
b2JhbERhdGFAMkBWSlNWYWx1ZUAyQEBaCiAgICAgP3NldFNldHRlckBQcm9wZXJ0eURlc2NyaXB0
b3JASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgorICAgID9zZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9y
QEpTQ0BAUUJFP0FWSlNWYWx1ZUAyQFhaCiAgICAgP3NldFVuZGVmaW5lZEBQcm9wZXJ0eURlc2Ny
aXB0b3JASlNDQEBRQUVYWFoKICAgICA/c2V0VXBTdGF0aWNGdW5jdGlvblNsb3RASlNDQEBZQV9O
UEFWRXhlY1N0YXRlQDFAUEJWSGFzaEVudHJ5QDFAUEFWSlNPYmplY3RAMUBBQlZJZGVudGlmaWVy
QDFAQUFWUHJvcGVydHlTbG90QDFAQFoKICAgICA/c2V0V3JpdGFibGVAUHJvcGVydHlEZXNjcmlw
dG9yQEpTQ0BAUUFFWF9OQFoKLSAgICA/c2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFC
RT9BVkpTVmFsdWVAMkBYWgogICAgID9zaHJpbmtUb0ZpdEBTdHJpbmdCdWlsZGVyQFdURkBAUUFF
WFhaCiAgICAgP3NpZ25hbEBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVYWFoKICAgICA/c2luZ2xl
Q2hhcmFjdGVyU3RyaW5nUmVwQFNtYWxsU3RyaW5nc0BKU0NAQFFBRVBBVlN0cmluZ0ltcGxAV1RG
QEBFQFoKQEAgLTM0MCwxMSArMzM3LDE1IEBAIEVYUE9SVFMKICAgICA/dGxzS2V5Q291bnRAV1RG
QEBZQUFBSlhaCiAgICAgP3Rsc0tleXNAV1RGQEBZQVBBS1haCiAgICAgP3RvQm9vbGVhbkBKU1N0
cmluZ0BKU0NAQFFCRV9OUEFWRXhlY1N0YXRlQDJAQFoKKyAgICA/VG9FeHBvbmVudGlhbEBEb3Vi
bGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJp
bmdCdWlsZGVyQDIzQEBaCisgICAgP1RvRml4ZWRARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91
YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgogICAgID90
b0ludDMyQEpTQ0BAWUFITkBaCiAgICAgP3RvSW50ZWdlckBKU1ZhbHVlQEpTQ0BAUUJFTlBBVkV4
ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyU2xvd0Nhc2VASlNWYWx1ZUBKU0NAQEFCRU5QQVZF
eGVjU3RhdGVAMkBAWgogICAgID90b09iamVjdEBKU0NlbGxASlNDQEBRQkVQQVZKU09iamVjdEAy
QFBBVkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKICAgICA/dG9PYmplY3RTbG93
Q2FzZUBKU1ZhbHVlQEpTQ0BAQUJFUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0ds
b2JhbE9iamVjdEAyQEBaCisgICAgP1RvUHJlY2lzaW9uQERvdWJsZVRvU3RyaW5nQ29udmVydGVy
QGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKKyAg
ICA/VG9TaG9ydGVzdEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBX
VEZAQFFCRV9OTlBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKICAgICA/dG9TdHJpbmdASlNPYmplY3RA
SlNDQEBRQkVQQVZKU1N0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvU3RyaW5nRGVj
aW1hbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKICAgICA/dG9TdHJpbmdFeHBvbmVu
dGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjEzMCw2ICsyMTMwLDM0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0Jsb2NrLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrQmxvY2suaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFr
SGVhcC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGhlYXBcV2Vha0hlYXAuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrSW1wbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtIYW5kbGVPd25lci5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcV2Vha0hhbmRsZU93bmVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcSGFuZGxlU3RhY2suY3BwIgogCQkJCT4KIAkJCTwv
RmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzEyLDcgKzMxMiwxNCBAQAogCQkxNEM1MjQy
QjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1YnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTY1ODFBMEY0RTM2RjQwMDAxNTBGRCAvKiBKSVRTdHVi
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyRjNEODEzOUY0QkUyMDA0OTEwMzEg
LyogTWFya2VkU3BhY2UuY3BwICovOyB9OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyog
TWFya2VkU3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0RTg0RjlFMTRFRTFBQ0Mw
MEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTRFODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAg
Ki87IH07CisJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0Mw
MEQ2RDVENCAvKiBXZWFrQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFODRGOUIx
NEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCAqLzsgfTsKKwkJMTRFODRGQTExNEVFMUFD
QzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEU4NEZBMjE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlEMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTlE
MTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc1NkZDNjBFMjAzMUIy
MDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwICovOyB9OworCQkxNEY3MjU2
NTE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjcyNTYzMTRFRTI2NUUwMEIxNjUyQiAv
KiBXZWFrSGFuZGxlT3duZXIuY3BwICovOyB9OworCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIg
LyogV2Vha0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRGOTc0
NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8q
IEhlYXBSb290VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi87IH07CiAJCTQ1MTUzOUI5MTJE
Qzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NTE1MzlCODEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MjUsNyArOTMyLDE0
IEBACiAJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBY3RpdmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0REE4MThGMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBY3RpdmF0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0Ey
IC8qIEpTR2xvYmFsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTR2xvYmFsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRF
ODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWFrQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNEU4NEY5QTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxNEU4NEY5QjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0hlYXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0hlYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUQxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjI1MjU2MEQwOEREOEQwMDRFQ0ZGRiAvKiBKU1Zhcmlh
YmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFyaWFibGVP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRGNzI1NjMxNEVFMjY1RTAw
QjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWFrSGFuZGxlT3duZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtIYW5kbGVPd25lci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNEY5NzQ0NjEzOEM4NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RW
aXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBSb290VmlzaXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0MjBCQTlFOEE3MDA4MUU5
RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBW
ZXJzaW9uLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0MzBC
QTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gSmF2YVNjcmlwdENvcmUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY4LDYgKzE1ODIsMTMgQEAKIAkJCQkwRkM4MTUxMjE0MDUxMTg2
MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovLAogCQkJCTBGQzgxNTE0MTQwNTExOEQw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovLAogCQkJCTE0MkUzMTMzMTM0RkYwQTYwMEFG
QURCNSAvKiBXZWFrLmggKi8sCisJCQkJMTRFODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtC
bG9jay5jcHAgKi8sCisJCQkJMTRFODRGOUExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5o
ICovLAorCQkJCTE0RjcyNTYzMTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3Bw
ICovLAorCQkJCTE0RjcyNTY0MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCAq
LywKKwkJCQkxNEU4NEY5QjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3BwICovLAorCQkJ
CTE0RTg0RjlDMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5oICovLAorCQkJCTE0RTg0RjlE
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oICovLAogCQkJCTBGMjQyREE1MTNGM0IxQkIw
MDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8sCiAJCQkJMEZDODE1MDgxNDA0
M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICovLAogCQkJCTBGQzgxNTA5
MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8sCkBAIC0yNTA1LDYg
KzI1MjYsMTAgQEAKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQw
MEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0OTcyMDkxMTRFQjgzMTUwMEZFQjFCNyAvKiBQYXNzV2Vhay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMTRFODRGQTExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggaW4g
SGVhZGVycyAqLywKKwkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBp
biBIZWFkZXJzICovLAorCQkJCTE0RjcyNTY2MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxl
T3duZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1
QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9y
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDYwLDYgKzMwODUsOSBAQAogCQkJCTg2QjU4MjY5MTRE
Mjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
QjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRFODRGOUUxNEVFMUFDQzAwRDZENUQ0IC8qIFdl
YWtCbG9jay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQg
LyogV2Vha0hlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRGNzI1NjUxNEVFMjY1RTAwQjE2
NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0
RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
RkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTVCMTRFRjkwQUQwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNiArNTksOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNl
OjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSooKSBjb25zdCB7IHJldHVybiAobV9zbG90ICYmICptX3Nsb3QpID8gcmVpbnRlcnByZXRfY2Fz
dDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOyB9CiAKKyAgICBIYW5kbGVTbG90IHNsb3Qo
KSBjb25zdCB7IHJldHVybiBtX3Nsb3Q7IH0KKwogcHJvdGVjdGVkOgogICAgIEhhbmRsZUJhc2Uo
SGFuZGxlU2xvdCBzbG90KQogICAgICAgICA6IG1fc2xvdChzbG90KQpAQCAtNjcsNyArNjksNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdm9pZCBzd2FwKEhhbmRsZUJhc2UmIG90aGVyKSB7IHN0
ZDo6c3dhcChtX3Nsb3QsIG90aGVyLm1fc2xvdCk7IH0KIAotICAgIEhhbmRsZVNsb3Qgc2xvdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2xvdDsgfQogICAgIHZvaWQgc2V0U2xvdChIYW5kbGVTbG90IHNs
b3QpCiAgICAgewogICAgICAgICBtX3Nsb3QgPSBzbG90OwpAQCAtMTMzLDYgKzEzNCw3IEBAIHBy
b3RlY3RlZDoKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEhhbmRsZUhlYXA7Cisg
ICAgZnJpZW5kIGNsYXNzIFdlYWtCbG9jazsKIAogICAgIHN0YXRpYyBIYW5kbGU8VD4gd3JhcFNs
b3QoSGFuZGxlU2xvdCBzbG90KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZUhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZUhlYXAuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTkgKzMxLDYg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVPd25l
cigpCi17Ci19Ci0KLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFdlYWtIYW5kbGVPd25lcjo6ZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKikKLXsKLX0KLQogSGFuZGxlSGVhcDo6SGFuZGxlSGVhcChKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCiAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fbmV4
dFRvRmluYWxpemUoMCkKQEAgLTczLDYyICs2MCw2IEBAIHZvaWQgSGFuZGxlSGVhcDo6dmlzaXRT
dHJvbmdIYW5kbGVzKEhlYXAKICAgICB9CiB9CiAKLXZvaWQgSGFuZGxlSGVhcDo6dmlzaXRXZWFr
SGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKLXsKLSAgICBTbG90Vmlz
aXRvciYgdmlzaXRvciA9IGhlYXBSb290VmlzaXRvci52aXNpdG9yKCk7Ci0KLSAgICBOb2RlKiBl
bmQgPSBtX3dlYWtMaXN0LmVuZCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2Vha0xpc3Qu
YmVnaW4oKTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBub2RlLT5uZXh0KCkpIHsKLSNpZiBFTkFCTEUo
R0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFpc1ZhbGlkV2Vha05vZGUobm9kZSkpCi0gICAg
ICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IG5vZGUtPnNs
b3QoKS0+YXNDZWxsKCk7Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyID0g
bm9kZS0+d2Vha093bmVyKCk7Ci0gICAgICAgIGlmICghd2Vha093bmVyKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgaWYgKCF3ZWFrT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSwgbm9kZS0+d2Vh
a093bmVyQ29udGV4dCgpLCB2aXNpdG9yKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIGhlYXBSb290VmlzaXRvci52aXNpdChub2RlLT5zbG90KCkpOwotICAgIH0KLX0KLQotdm9p
ZCBIYW5kbGVIZWFwOjpmaW5hbGl6ZVdlYWtIYW5kbGVzKCkKLXsKLSAgICBOb2RlKiBlbmQgPSBt
X3dlYWtMaXN0LmVuZCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2Vha0xpc3QuYmVnaW4o
KTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBtX25leHRUb0ZpbmFsaXplKSB7Ci0gICAgICAgIG1fbmV4
dFRvRmluYWxpemUgPSBub2RlLT5uZXh0KCk7Ci0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0g
ICAgICAgIGlmICghaXNWYWxpZFdlYWtOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsK
LSNlbmRpZgotCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IG5vZGUtPnNsb3QoKS0+YXNDZWxsKCk7
Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGlmIChXZWFrSGFuZGxlT3duZXIqIHdlYWtPd25lciA9IG5vZGUtPndlYWtP
d25lcigpKSB7Ci0gICAgICAgICAgICB3ZWFrT3duZXItPmZpbmFsaXplKEhhbmRsZTxVbmtub3du
Pjo6d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSwgbm9kZS0+d2Vha093bmVyQ29udGV4dCgpKTsKLSAg
ICAgICAgICAgIGlmIChtX25leHRUb0ZpbmFsaXplICE9IG5vZGUtPm5leHQoKSkgLy8gT3duZXIg
ZGVhbGxvY2F0ZWQgbm9kZS4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
I2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBpZiAoIWlzTGl2ZU5vZGUobm9kZSkp
Ci0gICAgICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgICAgICpub2RlLT5zbG90KCkgPSBK
U1ZhbHVlKCk7Ci0gICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUp
OwotICAgICAgICBtX2ltbWVkaWF0ZUxpc3QucHVzaChub2RlKTsKLSAgICB9Ci0gICAgCi0gICAg
bV9uZXh0VG9GaW5hbGl6ZSA9IDA7Ci19Ci0KIHZvaWQgSGFuZGxlSGVhcDo6d3JpdGVCYXJyaWVy
KEhhbmRsZVNsb3Qgc2xvdCwgY29uc3QgSlNWYWx1ZSYgdmFsdWUpCiB7CiAgICAgLy8gRm9yYmlk
IGFzc2lnbm1lbnQgdG8gaGFuZGxlcyBkdXJpbmcgdGhlIGZpbmFsaXphdGlvbiBwaGFzZSwgc2lu
Y2UgaXQgd291bGQgdmlvbGF0ZSBtYW55IEdDIGludmFyaWFudHMuCkBAIC0xNTAsMTUgKzgxLDYg
QEAgdm9pZCBIYW5kbGVIZWFwOjp3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPmlzV2VhaygpKSB7Ci0gICAgICAgIG1fd2Vha0xp
c3QucHVzaChub2RlKTsKLSNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFp
c0xpdmVOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgbV9zdHJvbmdMaXN0LnB1c2gobm9kZSk7CiAjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCiAgICAgaWYgKCFpc0xpdmVOb2RlKG5vZGUpKQpAQCAtMTg4LDI0ICsx
MTAsNiBAQCBib29sIEhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0KLWJvb2wgSGFuZGxlSGVhcDo6aXNWYWxpZFdlYWtOb2Rl
KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFpc0xpdmVOb2RlKG5vZGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFub2RlLT5pc1dlYWsoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9ICpub2RlLT5zbG90KCk7Ci0gICAgaWYgKCF2YWx1ZSB8
fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTQ2VsbCog
Y2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgIGlmICghY2VsbCB8fCAhY2VsbC0+c3RydWN0dXJl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQogI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hh
bmRsZUhlYXAuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsNiBAQCBjbGFzcyBK
U0dsb2JhbERhdGE7CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKLWNsYXNz
IEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+V2Vha0hhbmRsZU93bmVyKCk7Ci0gICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0
KTsKLX07Ci0KIGNsYXNzIEhhbmRsZUhlYXAgewogcHVibGljOgogICAgIHN0YXRpYyBIYW5kbGVI
ZWFwKiBoZWFwRm9yKEhhbmRsZVNsb3QpOwpAQCAtNTgsMjAgKzUxLDEwIEBAIHB1YmxpYzoKICAg
ICBIYW5kbGVTbG90IGFsbG9jYXRlKCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3Qp
OwogCi0gICAgdm9pZCBtYWtlV2VhayhIYW5kbGVTbG90LCBXZWFrSGFuZGxlT3duZXIqID0gMCwg
dm9pZCogY29udGV4dCA9IDApOwotICAgIEhhbmRsZVNsb3QgY29weVdlYWsoSGFuZGxlU2xvdCk7
Ci0KICAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2
b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBmaW5hbGl6
ZVdlYWtIYW5kbGVzKCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmll
cihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7CiAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgYm9vbCBoYXNXZWFrT3duZXIoSGFuZGxlU2xvdCwgV2Vha0hhbmRsZU93bmVyKik7Ci0gICAg
Ym9vbCBoYXNGaW5hbGl6ZXIoSGFuZGxlU2xvdCk7Ci0jZW5kaWYKLQogICAgIHVuc2lnbmVkIHBy
b3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hTdHJvbmdIYW5kbGUoRnVuY3RvciYsIGNvbnN0IEhhc2hDb3VudGVk
U2V0PEpTQ2VsbCo+JiBza2lwU2V0KTsKQEAgLTg1LDEyICs2OCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIEhhbmRsZVNsb3Qgc2xvdCgpOwogICAgICAgICBIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKCk7
CiAKLSAgICAgICAgdm9pZCBtYWtlV2VhayhXZWFrSGFuZGxlT3duZXIqLCB2b2lkKiBjb250ZXh0
KTsKLSAgICAgICAgYm9vbCBpc1dlYWsoKTsKLSAgICAgICAgCi0gICAgICAgIFdlYWtIYW5kbGVP
d25lciogd2Vha093bmVyKCk7Ci0gICAgICAgIHZvaWQqIHdlYWtPd25lckNvbnRleHQoKTsKLQog
ICAgICAgICB2b2lkIHNldFByZXYoTm9kZSopOwogICAgICAgICBOb2RlKiBwcmV2KCk7CiAKQEAg
LTk4LDEyICs3NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5leHQoKTsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFdlYWtIYW5kbGVPd25lciogZW1wdHlXZWFrT3duZXIoKTsKLQogICAg
ICAgICBKU1ZhbHVlIG1fdmFsdWU7CiAgICAgICAgIEhhbmRsZUhlYXAqIG1faGFuZGxlSGVhcDsK
LSAgICAgICAgV2Vha0hhbmRsZU93bmVyKiBtX3dlYWtPd25lcjsKLSAgICAgICAgdm9pZCogbV93
ZWFrT3duZXJDb250ZXh0OwogICAgICAgICBOb2RlKiBtX3ByZXY7CiAgICAgICAgIE5vZGUqIG1f
bmV4dDsKICAgICB9OwpAQCAtMTE0LDcgKzg3LDYgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGdyb3coKTsKICAgICAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikgfHwg
IUFTU0VSVF9ESVNBQkxFRAotICAgIGJvb2wgaXNWYWxpZFdlYWtOb2RlKE5vZGUqKTsKICAgICBi
b29sIGlzTGl2ZU5vZGUoTm9kZSopOwogI2VuZGlmCiAKQEAgLTEyMiw3ICs5NCw2IEBAIHByaXZh
dGU6CiAgICAgQmxvY2tTdGFjazxOb2RlPiBtX2Jsb2NrU3RhY2s7CiAKICAgICBTZW50aW5lbExp
bmtlZExpc3Q8Tm9kZT4gbV9zdHJvbmdMaXN0OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2Rl
PiBtX3dlYWtMaXN0OwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPiBtX2ltbWVkaWF0ZUxp
c3Q7CiAgICAgU2luZ2x5TGlua2VkTGlzdDxOb2RlPiBtX2ZyZWVMaXN0OwogICAgIE5vZGUqIG1f
bmV4dFRvRmluYWxpemU7CkBAIC0xNzUsNDkgKzE0Niw4IEBAIGlubGluZSB2b2lkIEhhbmRsZUhl
YXA6OmRlYWxsb2NhdGUoSGFuZGwKICAgICBtX2ZyZWVMaXN0LnB1c2gobm9kZSk7CiB9CiAKLWlu
bGluZSBIYW5kbGVTbG90IEhhbmRsZUhlYXA6OmNvcHlXZWFrKEhhbmRsZVNsb3Qgb3RoZXIpCi17
Ci0gICAgTm9kZSogbm9kZSA9IHRvTm9kZShhbGxvY2F0ZSgpKTsKLSAgICBub2RlLT5tYWtlV2Vh
ayh0b05vZGUob3RoZXIpLT53ZWFrT3duZXIoKSwgdG9Ob2RlKG90aGVyKS0+d2Vha093bmVyQ29u
dGV4dCgpKTsKLSAgICB3cml0ZUJhcnJpZXIobm9kZS0+c2xvdCgpLCAqb3RoZXIpOwotICAgICpu
b2RlLT5zbG90KCkgPSAqb3RoZXI7Ci0gICAgcmV0dXJuIHRvSGFuZGxlKG5vZGUpOwotfQotCi1p
bmxpbmUgdm9pZCBIYW5kbGVIZWFwOjptYWtlV2VhayhIYW5kbGVTbG90IGhhbmRsZSwgV2Vha0hh
bmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgLy8gRm9yYmlkIGFz
c2lnbm1lbnQgdG8gaGFuZGxlcyBkdXJpbmcgdGhlIGZpbmFsaXphdGlvbiBwaGFzZSwgc2luY2Ug
aXQgd291bGQgdmlvbGF0ZSBtYW55IEdDIGludmFyaWFudHMuCi0gICAgLy8gRmlsZSBhIGJ1ZyB3
aXRoIHN0YWNrIHRyYWNlIGlmIHlvdSBoaXQgdGhpcy4KLSAgICBpZiAobV9uZXh0VG9GaW5hbGl6
ZSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGhhbmRsZSk7Ci0g
ICAgbm9kZS0+bWFrZVdlYWsod2Vha093bmVyLCBjb250ZXh0KTsKLQotICAgIFNlbnRpbmVsTGlu
a2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUpOwotICAgIGlmICghKmhhbmRsZSB8fCAhaGFuZGxl
LT5pc0NlbGwoKSkgewotICAgICAgICBtX2ltbWVkaWF0ZUxpc3QucHVzaChub2RlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fd2Vha0xpc3QucHVzaChub2RlKTsKLX0KLQotI2lm
ICFBU1NFUlRfRElTQUJMRUQKLWlubGluZSBib29sIEhhbmRsZUhlYXA6Omhhc1dlYWtPd25lcihI
YW5kbGVTbG90IGhhbmRsZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIpCi17Ci0gICAgcmV0
dXJuIHRvTm9kZShoYW5kbGUpLT53ZWFrT3duZXIoKSA9PSB3ZWFrT3duZXI7Ci19Ci0KLWlubGlu
ZSBib29sIEhhbmRsZUhlYXA6Omhhc0ZpbmFsaXplcihIYW5kbGVTbG90IGhhbmRsZSkKLXsKLSAg
ICByZXR1cm4gdG9Ob2RlKGhhbmRsZSktPndlYWtPd25lcigpOwotfQotI2VuZGlmCi0KIGlubGlu
ZSBIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKEhhbmRsZUhlYXAqIGhhbmRsZUhlYXApCiAgICAgOiBt
X2hhbmRsZUhlYXAoaGFuZGxlSGVhcCkKLSAgICAsIG1fd2Vha093bmVyKDApCi0gICAgLCBtX3dl
YWtPd25lckNvbnRleHQoMCkKICAgICAsIG1fcHJldigwKQogICAgICwgbV9uZXh0KDApCiB7CkBA
IC0yMjUsOCArMTU1LDYgQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVh
cAogCiBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShXVEY6OlNlbnRpbmVsVGFnKQogICAg
IDogbV9oYW5kbGVIZWFwKDApCi0gICAgLCBtX3dlYWtPd25lcigwKQotICAgICwgbV93ZWFrT3du
ZXJDb250ZXh0KDApCiAgICAgLCBtX3ByZXYoMCkKICAgICAsIG1fbmV4dCgwKQogewpAQCAtMjQy
LDI4ICsxNzAsNiBAQCBpbmxpbmUgSGFuZGxlSGVhcCogSGFuZGxlSGVhcDo6Tm9kZTo6aGFuCiAg
ICAgcmV0dXJuIG1faGFuZGxlSGVhcDsKIH0KIAotaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6Tm9k
ZTo6bWFrZVdlYWsoV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCi17
Ci0gICAgbV93ZWFrT3duZXIgPSB3ZWFrT3duZXIgPyB3ZWFrT3duZXIgOiBlbXB0eVdlYWtPd25l
cigpOwotICAgIG1fd2Vha093bmVyQ29udGV4dCA9IGNvbnRleHQ7Ci19Ci0KLWlubGluZSBib29s
IEhhbmRsZUhlYXA6Ok5vZGU6OmlzV2VhaygpCi17Ci0gICAgcmV0dXJuIG1fd2Vha093bmVyOyAv
LyBUcnVlIGZvciBlbXB0eVdlYWtPd25lcigpLgotfQotCi1pbmxpbmUgV2Vha0hhbmRsZU93bmVy
KiBIYW5kbGVIZWFwOjpOb2RlOjp3ZWFrT3duZXIoKQotewotICAgIHJldHVybiBtX3dlYWtPd25l
ciA9PSBlbXB0eVdlYWtPd25lcigpID8gMCA6IG1fd2Vha093bmVyOyAvLyAwIGZvciBlbXB0eVdl
YWtPd25lcigpLgotfQotCi1pbmxpbmUgdm9pZCogSGFuZGxlSGVhcDo6Tm9kZTo6d2Vha093bmVy
Q29udGV4dCgpCi17Ci0gICAgQVNTRVJUKHdlYWtPd25lcigpKTsKLSAgICByZXR1cm4gbV93ZWFr
T3duZXJDb250ZXh0OwotfQotCiBpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjpOb2RlOjpzZXRQcmV2
KE5vZGUqIHByZXYpCiB7CiAgICAgbV9wcmV2ID0gcHJldjsKQEAgLTI4NCwxMyArMTkwLDYgQEAg
aW5saW5lIEhhbmRsZUhlYXA6Ok5vZGUqIEhhbmRsZUhlYXA6Ok5vZAogICAgIHJldHVybiBtX25l
eHQ7CiB9CiAKLS8vIFNlbnRpbmVsIHRvIGluZGljYXRlIHRoYXQgYSBub2RlIGlzIHdlYWssIGJ1
dCBpdHMgb3duZXIgaGFzIG5vIG1lYW5pbmdmdWwKLS8vIGNhbGxiYWNrcy4gVGhpcyBhbGxvd3Mg
dXMgdG8gb3B0aW1pemUgYnkgc2tpcHBpbmcgc3VjaCBub2Rlcy4KLWlubGluZSBXZWFrSGFuZGxl
T3duZXIqIEhhbmRsZUhlYXA6Ok5vZGU6OmVtcHR5V2Vha093bmVyKCkKLXsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxXZWFrSGFuZGxlT3duZXIqPigtMSk7Ci19Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgSGFuZGxlSGVhcDo6Zm9yRWFjaFN0cm9uZ0hhbmRsZShGdW5j
dG9yJiBmdW5jdG9yLCBjb25zdCBIYXNoQ291bnRlZFNldDxKU0NlbGwqPiYgc2tpcFNldCkKIHsK
ICAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMywxOCArMzEzLDE3IEBAIEhl
YXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEKICAgICA6IG1faGVhcFNpemUo
aGVhcFNpemUpCiAgICAgLCBtX21pbkJ5dGVzUGVyQ3ljbGUoaGVhcFNpemVGb3JIaW50KGhlYXBT
aXplKSkKICAgICAsIG1fbGFzdEZ1bGxHQ1NpemUoMCkKLSAgICAsIG1fd2F0ZXJNYXJrKDApCiAg
ICAgLCBtX2hpZ2hXYXRlck1hcmsobV9taW5CeXRlc1BlckN5Y2xlKQogICAgICwgbV9vcGVyYXRp
b25JblByb2dyZXNzKE5vT3BlcmF0aW9uKQogICAgICwgbV9vYmplY3RTcGFjZSh0aGlzKQogICAg
ICwgbV9zdG9yYWdlU3BhY2UodGhpcykKICAgICAsIG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxk
UXVpdChmYWxzZSkKLSAgICAsIG1fZXh0cmFDb3N0KDApCiAgICAgLCBtX21hcmtMaXN0U2V0KDAp
CiAgICAgLCBtX2FjdGl2aXR5Q2FsbGJhY2soRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3Jl
YXRlKHRoaXMpKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQogICAgICwgbV9zaGFyZWRE
YXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX3Nsb3RWaXNpdG9yKG1fc2hhcmVkRGF0YSkKKyAgICAs
IG1fd2Vha0hlYXAodGhpcykKICAgICAsIG1faGFuZGxlSGVhcChnbG9iYWxEYXRhKQogICAgICwg
bV9pc1NhZmVUb0NvbGxlY3QoZmFsc2UpCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
QEAgLTM3Niw3ICszNzUsNyBAQCB2b2lkIEhlYXA6OmRlc3Ryb3koKQogICAgIGNhbm9uaWNhbGl6
ZUNlbGxMaXZlbmVzc0RhdGEoKTsKICAgICBjbGVhck1hcmtzKCk7CiAKLSAgICBtX2hhbmRsZUhl
YXAuZmluYWxpemVXZWFrSGFuZGxlcygpOworICAgIG1fd2Vha0hlYXAuZmluYWxpemVBbGwoKTsK
ICAgICBtX2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5maW5hbGl6ZVNtYWxsU3RyaW5ncygpOwog
ICAgIHNocmluaygpOwogICAgIG1fc3RvcmFnZVNwYWNlLmRlc3Ryb3koKTsKQEAgLTQ2Niw5ICs0
NjUsNyBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdFNsb3dDYXNlCiAgICAgLy8g
aWYgYSBsYXJnZSB2YWx1ZSBzdXJ2aXZlcyBvbmUgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGVyZSBp
cyBub3QgbXVjaCBwb2ludCB0bwogICAgIC8vIGNvbGxlY3RpbmcgbW9yZSBmcmVxdWVudGx5IGFz
IGxvbmcgYXMgaXQgc3RheXMgYWxpdmUuCiAKLSAgICBpZiAobV9leHRyYUNvc3QgPiBtYXhFeHRy
YUNvc3QgJiYgbV9leHRyYUNvc3QgPiBoaWdoV2F0ZXJNYXJrKCkgLyAyKQotICAgICAgICBjb2xs
ZWN0QWxsR2FyYmFnZSgpOwotICAgIG1fZXh0cmFDb3N0ICs9IGNvc3Q7CisgICAgYWRkVG9XYXRl
ck1hcmsoY29zdCk7CiB9CiAKIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCkBAIC02ODcs
MTIgKzY4NCwxMiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICNlbmRpZgog
ICAgIH0KIAotICAgIC8vIFdlYWsgaGFuZGxlcyBtdXN0IGJlIG1hcmtlZCBsYXN0LCBiZWNhdXNl
IHRoZWlyIG93bmVycyB1c2UgdGhlIHNldCBvZgotICAgIC8vIG9wYXF1ZSByb290cyB0byBkZXRl
cm1pbmUgcmVhY2hhYmlsaXR5LgorICAgIC8vIFdlYWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtl
ZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVwZW5kcyBvbgorICAgIC8vIHRoZSBsaXZl
bmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgogICAgIHsKLSAgICAgICAgR0NQ
SEFTRShWaXNpdGluZ1dlYWtIYW5kbGVzKTsKKyAgICAgICAgR0NQSEFTRShWaXNpdGluZ0xpdmVX
ZWFrSGFuZGxlcyk7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBtX2hhbmRs
ZUhlYXAudmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICAgICAgbV93
ZWFrSGVhcC52aXNpdExpdmVXZWFrSW1wbHMoaGVhcFJvb3RWaXNpdG9yKTsKICAgICAgICAgICAg
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzA1LDYgKzcwMiwyMCBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KKworICAgIHsKKyAgICAgICAgR0NQSEFTRShWaXNpdGluZ0RlYWRXZWFrSGFuZGxlcyk7Cisg
ICAgICAgIG1fd2Vha0hlYXAudmlzaXREZWFkV2Vha0ltcGxzKGhlYXBSb290VmlzaXRvcik7CisK
KyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKHZpc2l0
b3IpOworICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOworI2lmIEVOQUJMRShQ
QVJBTExFTF9HQykKKyAgICAgICAgICAgIHZpc2l0b3IuZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNp
dG9yOjpNYXN0ZXJEcmFpbik7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKwogICAgIEdDQ09V
TlRFUihWaXNpdGVkVmFsdWVDb3VudCwgdmlzaXRvci52aXNpdENvdW50KCkpOwogCiAgICAgdmlz
aXRvci5kb25lQ29weWluZygpOwpAQCAtODA1LDcgKzgxNiw3IEBAIHZvaWQgSGVhcDo6Y29sbGVj
dChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAgICAgCiAgICAgewogICAgICAgICBHQ1BIQVNF
KEZpbmFsaXplV2Vha0hhbmRsZXMpOwotICAgICAgICBtX2hhbmRsZUhlYXAuZmluYWxpemVXZWFr
SGFuZGxlcygpOworICAgICAgICBtX3dlYWtIZWFwLnN3ZWVwKCk7CiAgICAgICAgIG1fZ2xvYmFs
RGF0YS0+c21hbGxTdHJpbmdzLmZpbmFsaXplU21hbGxTdHJpbmdzKCk7CiAgICAgfQogICAgIApA
QCAtODM2LDcgKzg0Nyw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRv
Z2cKICAgICBzaXplX3QgcHJvcG9ydGlvbmFsQnl0ZXMgPSAyICogbmV3U2l6ZTsKICAgICBpZiAo
ZnVsbEdDKSB7CiAgICAgICAgIG1fbGFzdEZ1bGxHQ1NpemUgPSBuZXdTaXplOwotICAgICAgICBz
ZXRIaWdoV2F0ZXJNYXJrKG1heChwcm9wb3J0aW9uYWxCeXRlcywgbV9taW5CeXRlc1BlckN5Y2xl
KSk7CisgICAgICAgIG1faGlnaFdhdGVyTWFyayA9IG1heChwcm9wb3J0aW9uYWxCeXRlcywgbV9t
aW5CeXRlc1BlckN5Y2xlKTsKICAgICB9CiAgICAgZG91YmxlIGxhc3RHQ0VuZFRpbWUgPSBXVEY6
OmN1cnJlbnRUaW1lKCk7CiAgICAgbV9sYXN0R0NMZW5ndGggPSBsYXN0R0NFbmRUaW1lIC0gbGFz
dEdDU3RhcnRUaW1lOwpAQCAtODUyLDggKzg2Myw4IEBAIHZvaWQgSGVhcDo6Y2Fub25pY2FsaXpl
Q2VsbExpdmVuZXNzRGF0YSgKIAogdm9pZCBIZWFwOjpyZXNldEFsbG9jYXRvcnMoKQogewotICAg
IG1fZXh0cmFDb3N0ID0gMDsKICAgICBtX29iamVjdFNwYWNlLnJlc2V0QWxsb2NhdG9ycygpOwor
ICAgIG1fd2Vha0hlYXAucmVzZXRBbGxvY2F0b3IoKTsKIH0KIAogdm9pZCBIZWFwOjpzZXRBY3Rp
dml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxi
YWNrKQpAQCAtOTE0LDE1ICs5MjUsMTUgQEAgdm9pZCBIZWFwOjpyZWxlYXNlRnJlZUJsb2Nrcygp
CiAKIHZvaWQgSGVhcDo6YWRkRmluYWxpemVyKEpTQ2VsbCogY2VsbCwgRmluYWxpemVyIGZpbmFs
aXplcikKIHsKLSAgICBXZWFrPEpTQ2VsbD4gd2VhaygqZ2xvYmFsRGF0YSgpLCBjZWxsLCAmbV9m
aW5hbGl6ZXJPd25lciwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmluYWxpemVyKSk7Ci0gICAg
d2Vhay5sZWFrSGFuZGxlKCk7IC8vIEJhbGFuY2VkIGJ5IEZpbmFsaXplck93bmVyOjpmaW5hbGl6
ZSgpLgorICAgIHdlYWtIZWFwKCktPmFsbG9jYXRlKGNlbGwsICZtX2ZpbmFsaXplck93bmVyLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihmaW5hbGl6ZXIpKTsgLy8gQmFsYW5jZWQgYnkgRmluYWxp
emVyT3duZXI6OmZpbmFsaXplKCkuCiB9CiAKIHZvaWQgSGVhcDo6RmluYWxpemVyT3duZXI6OmZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgV2Vh
azxKU0NlbGw+IHdlYWsoV2VhazxKU0NlbGw+OjpBZG9wdCwgaGFuZGxlKTsKKyAgICBIYW5kbGVT
bG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwogICAgIEZpbmFsaXplciBmaW5hbGl6ZXIgPSByZWlu
dGVycHJldF9jYXN0PEZpbmFsaXplcj4oY29udGV4dCk7Ci0gICAgZmluYWxpemVyKHdlYWsuZ2V0
KCkpOworICAgIGZpbmFsaXplcihzbG90LT5hc0NlbGwoKSk7CisgICAgV2Vha0hlYXA6OmRlYWxs
b2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoc2xvdCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsOCBAQAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiTWFya2Vk
U3BhY2UuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIldlYWtIYW5kbGVP
d25lci5oIgorI2luY2x1ZGUgIldlYWtIZWFwLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyU3Vw
cG9ydC5oIgogI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KQEAgLTEzMywxMSArMTM1LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBl
IGZvckVhY2hQcm90ZWN0ZWRDZWxsKEZ1bmN0b3ImKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVk
Q2VsbCgpOwogCisgICAgICAgIFdlYWtIZWFwKiB3ZWFrSGVhcCgpIHsgcmV0dXJuICZtX3dlYWtI
ZWFwOyB9CiAgICAgICAgIEhhbmRsZUhlYXAqIGhhbmRsZUhlYXAoKSB7IHJldHVybiAmbV9oYW5k
bGVIZWFwOyB9CiAgICAgICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZt
X2hhbmRsZVN0YWNrOyB9CiAKICAgICAgICAgdm9pZCBnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJv
b3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKTsKIAorICAgICAgICB2b2lkIGFkZFRvV2F0ZXJN
YXJrKHNpemVfdCk7CisKICAgICAgICAgZG91YmxlIGxhc3RHQ0xlbmd0aCgpIHsgcmV0dXJuIG1f
bGFzdEdDTGVuZ3RoOyB9CiAKICAgICBwcml2YXRlOgpAQCAtMTU1LDcgKzE2MCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHNpemVfdCB3YXRlck1hcmsoKTsKICAgICAgICAgc2l6ZV90
IGhpZ2hXYXRlck1hcmsoKTsKLSAgICAgICAgdm9pZCBzZXRIaWdoV2F0ZXJNYXJrKHNpemVfdCk7
CiAgICAgICAgIGJvb2wgc2hvdWxkQ29sbGVjdCgpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbWluRXh0cmFDb3N0ID0gMjU2OwpAQCAtMTk5LDcgKzIwMyw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjb25zdCBIZWFwU2l6ZSBtX2hlYXBTaXplOwogICAgICAgICBjb25zdCBz
aXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwogICAgICAgICBzaXplX3QgbV9sYXN0RnVsbEdDU2l6
ZTsKLSAgICAgICAgc2l6ZV90IG1fd2F0ZXJNYXJrOwogICAgICAgICBzaXplX3QgbV9oaWdoV2F0
ZXJNYXJrOwogICAgICAgICAKICAgICAgICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBtX29wZXJhdGlv
bkluUHJvZ3Jlc3M7CkBAIC0yMTgsOCArMjIxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZUYWJsZVNwZWN0cnVtIG1fZGVzdHJveWVkVHlwZUNvdW50czsKICNlbmRpZgogCi0gICAgICAg
IHNpemVfdCBtX2V4dHJhQ29zdDsKLQogICAgICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0
ZWRWYWx1ZXM7CiAgICAgICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogPiBtX3Rl
bXBTb3J0aW5nVmVjdG9yczsKICAgICAgICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+
KiBtX21hcmtMaXN0U2V0OwpAQCAtMjMxLDYgKzIzMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhIG1fc2hhcmVkRGF0YTsKICAgICAgICAgU2xv
dFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKIAorICAgICAgICBXZWFrSGVhcCBtX3dlYWtIZWFwOwog
ICAgICAgICBIYW5kbGVIZWFwIG1faGFuZGxlSGVhcDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9o
YW5kbGVTdGFjazsKICAgICAgICAgREZHQ29kZUJsb2NrcyBtX2RmZ0NvZGVCbG9ja3M7CkBAIC0y
OTMsOSArMjk1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9oaWdoV2F0
ZXJNYXJrOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEhlYXA6OnNldEhpZ2hXYXRlck1hcmso
c2l6ZV90IG5ld0hpZ2hXYXRlck1hcmspCisgICAgaW5saW5lIHZvaWQgSGVhcDo6YWRkVG9XYXRl
ck1hcmsoc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICBtX2hpZ2hXYXRlck1hcmsgPSBuZXdI
aWdoV2F0ZXJNYXJrOworICAgICAgICBtX29iamVjdFNwYWNlLmFkZFRvV2F0ZXJNYXJrKHNpemUp
OworICAgICAgICBpZiAod2F0ZXJNYXJrKCkgPiBoaWdoV2F0ZXJNYXJrKCkpCisgICAgICAgICAg
ICBjb2xsZWN0KERvTm90U3dlZXApOwogICAgIH0KIAogI2lmIEVOQUJMRShHR0MpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAxMTI1
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAgY2xhc3MgU3RydWN0dXJlOwogCiBNYXJrZWRTcGFj
ZTo6TWFya2VkU3BhY2UoSGVhcCogaGVhcCkKICAgICA6IG1fd2F0ZXJNYXJrKDApCi0gICAgLCBt
X251cnNlcnlXYXRlck1hcmsoMCkKICAgICAsIG1faGVhcChoZWFwKQogewogICAgIGZvciAoc2l6
ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNl
bGxTaXplICs9IHByZWNpc2VTdGVwKSB7CkBAIC00OSw3ICs0OCw2IEBAIE1hcmtlZFNwYWNlOjpN
YXJrZWRTcGFjZShIZWFwKiBoZWFwKQogdm9pZCBNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3Jz
KCkKIHsKICAgICBtX3dhdGVyTWFyayA9IDA7Ci0gICAgbV9udXJzZXJ5V2F0ZXJNYXJrID0gMDsK
IAogICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHBy
ZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7CiAgICAgICAgIGFsbG9jYXRv
ckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CiAKICAgICBzaXpl
X3Qgd2F0ZXJNYXJrKCk7Ci0gICAgc2l6ZV90IG51cnNlcnlXYXRlck1hcmsoKTsKKyAgICB2b2lk
IGFkZFRvV2F0ZXJNYXJrKHNpemVfdCk7CiAKICAgICB0eXBlZGVmIEhhc2hTZXQ8TWFya2VkQmxv
Y2sqPjo6aXRlcmF0b3IgQmxvY2tJdGVyYXRvcjsKICAgICAKQEAgLTc3LDYgKzc3LDcgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgc2hyaW5rKCk7CiAgICAgdm9pZCBmcmVlQmxvY2tzKE1hcmtl
ZEJsb2NrKiBoZWFkKTsKKwogICAgIHZvaWQgZGlkQWRkQmxvY2soTWFya2VkQmxvY2sqKTsKICAg
ICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdChNYXJrZWRCbG9jayopOwogCkBAIC0xMDIsNyArMTAz
LDYgQEAgcHJpdmF0ZToKICAgICBTdWJzcGFjZSBtX25vcm1hbFNwYWNlOwogCiAgICAgc2l6ZV90
IG1fd2F0ZXJNYXJrOwotICAgIHNpemVfdCBtX251cnNlcnlXYXRlck1hcms7CiAgICAgSGVhcCog
bV9oZWFwOwogICAgIE1hcmtlZEJsb2NrU2V0IG1fYmxvY2tzOwogfTsKQEAgLTExMiw5ICsxMTIs
OSBAQCBpbmxpbmUgc2l6ZV90IE1hcmtlZFNwYWNlOjp3YXRlck1hcmsoKQogICAgIHJldHVybiBt
X3dhdGVyTWFyazsKIH0KIAotaW5saW5lIHNpemVfdCBNYXJrZWRTcGFjZTo6bnVyc2VyeVdhdGVy
TWFyaygpCitpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6YWRkVG9XYXRlck1hcmsoc2l6ZV90IHNp
emUpCiB7Ci0gICAgcmV0dXJuIG1fbnVyc2VyeVdhdGVyTWFyazsKKyAgICBtX3dhdGVyTWFyayAr
PSBzaXplOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUg
RnVuY3Rvcjo6UmV0dXJuVHlwZSBNYXJrZWRTcGFjZTo6Zm9yRWFjaENlbGwoRnVuY3RvciYgZnVu
Y3RvcikKQEAgLTE5OSw3ICsxOTksNiBAQCBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6ZGlkQWRk
QmxvY2soTWFyCiAKIGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpkaWRDb25zdW1lRnJlZUxpc3Qo
TWFya2VkQmxvY2sqIGJsb2NrKQogewotICAgIG1fbnVyc2VyeVdhdGVyTWFyayArPSBibG9jay0+
Y2FwYWNpdHkoKSAtIGJsb2NrLT5zaXplKCk7CiAgICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNh
cGFjaXR5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NXZWFr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFzc1dlYWsuaAko
cmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFzc1dlYWsu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBQYXNzV2Vha19oCiAj
ZGVmaW5lIFBhc3NXZWFrX2gKIAorI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW5jbHVkZSAiSGFuZGxlLmgiCiAjaW5jbHVkZSA8d3RmL051bGxQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgogCkBAIC0zNSw2MSArMzUsMTY0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1dlYWs7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNz
V2VhazxUPiBhZG9wdFdlYWsoSGFuZGxlU2xvdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNz
V2VhazxUPiBhZG9wdFdlYWsoV2Vha0ltcGwqKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgUGFzc1dlYWsgOiBwdWJsaWMgSGFuZGxlPFQ+IHsKLSAgICB1c2luZyBIYW5kbGU8VD46OnNs
b3Q7Ci0gICAgdXNpbmcgSGFuZGxlPFQ+OjpzZXRTbG90OwordGVtcGxhdGU8dHlwZW5hbWUgQmFz
ZSwgdHlwZW5hbWUgVD4gY2xhc3MgV2Vha0ltcGxBY2Nlc3NvciB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBUKiBHZXRUeXBlOworCisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0OworICAgIFQmIG9w
ZXJhdG9yKigpIGNvbnN0OworICAgIEdldFR5cGUgZ2V0KCkgY29uc3Q7CisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgYm9vbCB3YXMoR2V0VHlwZSkgY29uc3Q7CisjZW5kaWYKK307CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEJhc2U+IGNsYXNzIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93
bj4gewogcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5
cGUgRXh0ZXJuYWxUeXBlOworICAgIHR5cGVkZWYgSlNWYWx1ZSBHZXRUeXBlOwogCi0gICAgUGFz
c1dlYWsoKSA6IEhhbmRsZTxUPigpIHsgfQotICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KSA6
IEhhbmRsZTxUPigpIHsgfQorICAgIGNvbnN0IEpTVmFsdWUqIG9wZXJhdG9yLT4oKSBjb25zdDsK
KyAgICBjb25zdCBKU1ZhbHVlJiBvcGVyYXRvciooKSBjb25zdDsKKyAgICBHZXRUeXBlIGdldCgp
IGNvbnN0OworfTsKIAotICAgIFBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0
ZXJuYWxUeXBlIGV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpLCBXZWFrSGFuZGxlT3duZXIq
IHdlYWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQotICAgICAgICA6IEhhbmRsZTxUPihn
bG9iYWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpKQotICAgIHsKLSAgICAgICAg
SGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5tYWtlV2VhayhzbG90KCksIHdlYWtPd25lciwg
Y29udGV4dCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBIYW5kbGVUeXBlczxUPjo6dG9KU1Zh
bHVlKGV4dGVybmFsVHlwZSk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+
d3JpdGVCYXJyaWVyKHNsb3QoKSwgdmFsdWUpOwotICAgICAgICAqc2xvdCgpID0gdmFsdWU7Ci0g
ICAgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1dlYWsgOiBwdWJsaWMgV2Vha0lt
cGxBY2Nlc3NvcjxQYXNzV2VhazxUPiwgVD4geworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBX
ZWFrSW1wbEFjY2Vzc29yPFBhc3NXZWFrPFQ+LCBUPjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFdl
YWtJbXBsQWNjZXNzb3I8UGFzc1dlYWs8VD4sIFQ+OjpHZXRUeXBlIEdldFR5cGU7CisKKyAgICBQ
YXNzV2VhaygpOworICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBQYXNzV2VhayhK
U0dsb2JhbERhdGEmLCBHZXRUeXBlID0gR2V0VHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqID0gMCwg
dm9pZCogY29udGV4dCA9IDApOwogCiAgICAgLy8gSXQgc29tZXdoYXQgYnJlYWtzIHRoZSB0eXBl
IHN5c3RlbSB0byBhbGxvdyB0cmFuc2ZlciBvZiBvd25lcnNoaXAgb3V0IG9mCiAgICAgLy8gYSBj
b25zdCBQYXNzV2Vhay4gSG93ZXZlciwgaXQgbWFrZXMgaXQgbXVjaCBlYXNpZXIgdG8gd29yayB3
aXRoIFBhc3NXZWFrCiAgICAgLy8gdGVtcG9yYXJpZXMsIGFuZCB3ZSBkb24ndCBoYXZlIGEgbmVl
ZCB0byB1c2UgcmVhbCBjb25zdCBQYXNzV2Vha3MgYW55d2F5LgotICAgIFBhc3NXZWFrKGNvbnN0
IFBhc3NXZWFrJiBvKSA6IEhhbmRsZTxUPihvLmxlYWtIYW5kbGUoKSkgeyB9Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gUGFzc1dlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG8pIDogSGFuZGxlPFQ+
KG8ubGVha0hhbmRsZSgpKSB7IH0KKyAgICBQYXNzV2Vhayhjb25zdCBQYXNzV2VhayYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+Jik7CisKKyAg
ICB+UGFzc1dlYWsoKTsKIAotICAgIH5QYXNzV2VhaygpCi0gICAgewotICAgICAgICBpZiAoIXNs
b3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihz
bG90KCkpLT5kZWFsbG9jYXRlKHNsb3QoKSk7Ci0gICAgICAgIHNldFNsb3QoMCk7Ci0gICAgfQor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CiAKLSAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29u
c3QgeyByZXR1cm4gIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdChzbG90KCkpOyB9CisgICAg
Ly8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRv
IGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgSlNWYWx1
ZSAoUGFzc1dlYWs6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNp
ZmllZEJvb2xUeXBlKigpIGNvbnN0OwogCi0gICAgSGFuZGxlU2xvdCBsZWFrSGFuZGxlKCkgY29u
c3QgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdlYWtJbXBsKiBsZWFrSW1wbCgpIGNvbnN0IFdB
Uk5fVU5VU0VEX1JFVFVSTjsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgUGFzc1dlYWsgYWRvcHRX
ZWFrPFQ+KEhhbmRsZVNsb3QpOworICAgIGZyaWVuZCBQYXNzV2VhayBhZG9wdFdlYWs8VD4oV2Vh
a0ltcGwqKTsKKyAgICBleHBsaWNpdCBQYXNzV2VhayhXZWFrSW1wbCopOwogCi0gICAgZXhwbGlj
aXQgUGFzc1dlYWsoSGFuZGxlU2xvdCBzbG90KSA6IEhhbmRsZTxUPihzbG90KSB7IH0KKyAgICBX
ZWFrSW1wbCogbV9pbXBsOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEhhbmRs
ZVNsb3QgUGFzc1dlYWs8VD46OmxlYWtIYW5kbGUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
QmFzZSwgdHlwZW5hbWUgVD4gaW5saW5lIFQqIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVD46Om9w
ZXJhdG9yLT4oKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4o
dGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGlubGluZSBUJiBXZWFrSW1w
bEFjY2Vzc29yPEJhc2UsIFQ+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBC
YXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0
dXJuICpqc0Nhc3Q8VCo+KHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5q
c1ZhbHVlKCkuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBX
ZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+OjpnZXQoKSBjb25zdAoreworICAgIGlmICghc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwgfHwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
ZSo+KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgIHJl
dHVybiBHZXRUeXBlKCk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9CisKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBUPiBpbmxpbmUg
Ym9vbCBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+Ojp3YXModHlwZW5hbWUgV2Vha0ltcGxBY2Nl
c3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4ganNDYXN0
PFQqPihzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+anNWYWx1ZSgpLmFz
Q2VsbCgpKSA9PSBvdGhlcjsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBp
bmxpbmUgY29uc3QgSlNWYWx1ZSogV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBVbmtub3duPjo6b3Bl
cmF0b3ItPigpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0
aGlzKS0+bV9pbXBsICYmIHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5z
dGF0ZSgpID09IFdlYWtJbXBsOjpMaXZlKTsKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PGNvbnN0
IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhc2U+IGlubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25v
d24+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBC
YXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1f
aW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2U+IGlubGluZSB0eXBlbmFtZSBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25v
d24+OjpHZXRUeXBlIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93bj46OmdldCgpIGNvbnN0
Cit7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCB8fCBz
dGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1w
bDo6TGl2ZSkKKyAgICAgICAgcmV0dXJuIEdldFR5cGUoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2VhaygpCisgICAgOiBtX2ltcGwo
MCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNz
V2VhayhzdGQ6Om51bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdHlwZW5hbWUgUGFzc1dlYWs8VD46OkdldFR5cGUgZ2V0VHlwZSwgV2Vha0hhbmRs
ZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgOiBtX2ltcGwoZ2xvYmFsRGF0
YS5oZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKGdldFR5cGUsIHdlYWtPd25lciwgY29udGV4dCkp
Cit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxUPjo6UGFzc1dl
YWsoY29uc3QgUGFzc1dlYWsmIG8pCisgICAgOiBtX2ltcGwoby5sZWFrSW1wbCgpKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc1dl
YWs8VD46OlBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvKQorICAgIDogbV9pbXBsKG8ubGVh
a0ltcGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+
Ojp+UGFzc1dlYWsoKQoreworICAgIGlmICghbV9pbXBsKQorICAgICAgICByZXR1cm47CisgICAg
V2Vha0hlYXA6OmRlYWxsb2NhdGUobV9pbXBsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIGJvb2wgUGFzc1dlYWs8VD46Om9wZXJhdG9yISgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFtX2ltcGwgfHwgbV9pbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlIHx8ICFtX2ltcGwt
PmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+
OjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KCEhKnRoaXMpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKFdlYWtJbXBsKiBp
bXBsKQorOiBtX2ltcGwoaW1wbCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IFdlYWtJbXBsKiBQYXNzV2VhazxUPjo6bGVha0ltcGwoKSBjb25zdAogewotICAgIEhhbmRsZVNs
b3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICBjb25zdF9jYXN0PFBhc3NXZWFrPFQ+Kj4odGhp
cyktPnNldFNsb3QoMCk7Ci0gICAgcmV0dXJuIHNsb3Q7CisgICAgV2Vha0ltcGwqIHRtcCA9IDA7
CisgICAgc3RkOjpzd2FwKHRtcCwgY29uc3RfY2FzdDxXZWFrSW1wbComPihtX2ltcGwpKTsKKyAg
ICByZXR1cm4gdG1wOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNzV2VhazxUPiBhZG9w
dFdlYWsoSGFuZGxlU2xvdCBzbG90KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1dlYWs8VD4g
aW5saW5lIGFkb3B0V2VhayhXZWFrSW1wbCogaW1wbCkKIHsKLSAgICByZXR1cm4gUGFzc1dlYWs8
VD4oc2xvdCk7CisgICAgcmV0dXJuIFBhc3NXZWFrPFQ+KGltcGwpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NX
ZWFrPFQ+JiBhLCBjb25zdCBQYXNzV2VhazxVPiYgYikgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdHJvbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdHJvbmcuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Ryb25nLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDExICs4MSwxOSBAQCBwdWJsaWM6
CiAgICAgICAgIGNsZWFyKCk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhc2xvdCgpIHx8ICEqc2xvdCgpOyB9CisKKyAgICAvLyBUaGlzIGNvbnZlcnNpb24g
b3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90
aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNlOjoqVW5z
cGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBj
b25zdCB7IHJldHVybiAhISp0aGlzID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xU
eXBlKj4oMSkgOiAwOyB9CisKICAgICB2b2lkIHN3YXAoU3Ryb25nJiBvdGhlcikKICAgICB7CiAg
ICAgICAgIEhhbmRsZTxUPjo6c3dhcChvdGhlcik7CiAgICAgfQogCisgICAgRXh0ZXJuYWxUeXBl
IGdldCgpIGNvbnN0IHsgcmV0dXJuIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdCh0aGlzLT5z
bG90KCkpOyB9CisKICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBFeHRlcm5hbFR5cGUpOwog
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IFN0cm9uZyYgb3BlcmF0b3I9KGNvbnN0IFN0cm9u
ZzxVPiYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCShyZXZpc2lvbiAx
MTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDEwOSArMjcsMTI5IEBACiAjZGVmaW5lIFdlYWtfaAogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlICJIYW5kbGUuaCIKLSNpbmNsdWRlICJIYW5kbGVIZWFw
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiUGFzc1dlYWsuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLS8vIEEgd2Vha2x5IHJlZmVyZW5jZWQgaGFuZGxlIHRoYXQgYmVj
b21lcyAwIHdoZW4gdGhlIHZhbHVlIGl0IHBvaW50cyB0byBpcyBnYXJiYWdlIGNvbGxlY3RlZC4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIEhhbmRsZTxUPiB7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIFdlYWtJbXBsQWNjZXNzb3I8
V2VhazxUPiwgVD4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWspOwotCi0gICAgdXNp
bmcgSGFuZGxlPFQ+OjpzbG90OwotICAgIHVzaW5nIEhhbmRsZTxUPjo6c2V0U2xvdDsKLQogcHVi
bGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5cGUgRXh0ZXJu
YWxUeXBlOworICAgIGZyaWVuZCBjbGFzcyBXZWFrSW1wbEFjY2Vzc29yPFdlYWs8VD4sIFQ+Owor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxXZWFrPFQ+LCBUPjo6R2V0VHlw
ZSBHZXRUeXBlOwogCi0gICAgV2VhaygpCi0gICAgICAgIDogSGFuZGxlPFQ+KCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgV2VhayhzdGQ6Om51bGxwdHJfdCkKLSAgICAgICAgOiBIYW5kbGU8VD4oKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0ZXJu
YWxUeXBlIGV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqIHdl
YWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQotICAgICAgICA6IEhhbmRsZTxUPihnbG9i
YWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpKQotICAgIHsKLSAgICAgICAgSGFu
ZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5tYWtlV2VhayhzbG90KCksIHdlYWtPd25lciwgY29u
dGV4dCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBIYW5kbGVUeXBlczxUPjo6dG9KU1ZhbHVl
KGV4dGVybmFsVHlwZSk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+d3Jp
dGVCYXJyaWVyKHNsb3QoKSwgdmFsdWUpOwotICAgICAgICAqc2xvdCgpID0gdmFsdWU7Ci0gICAg
fQotCi0gICAgZW51bSBBZG9wdFRhZyB7IEFkb3B0IH07Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gV2VhayhBZG9wdFRhZywgSGFuZGxlPFU+IGhhbmRsZSkKLSAgICAgICAgOiBIYW5kbGU8VD4o
aGFuZGxlLnNsb3QoKSkKLSAgICB7Ci0gICAgICAgIHZhbGlkYXRlQ2VsbChnZXQoKSk7Ci0gICAg
fQorICAgIFdlYWsoKTsKKyAgICBXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBXZWFrKEpTR2xv
YmFsRGF0YSYsIEdldFR5cGUgPSBHZXRUeXBlKCksIFdlYWtIYW5kbGVPd25lciogPSAwLCB2b2lk
KiBjb250ZXh0ID0gMCk7CiAKICAgICBlbnVtIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZyB7IEhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSB9OwotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBzbG90KCkgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KLSAg
ICBXZWFrKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZykKLSAgICAgICAgOiBIYW5kbGU8VD4oaGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkpCi0gICAgewotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IFdlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG90aGVyKQotICAgICAgICA6IEhhbmRsZTxU
PihvdGhlci5sZWFrSGFuZGxlKCkpCi0gICAgewotICAgIH0KLQotICAgIH5XZWFrKCkKLSAgICB7
Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwKFdlYWsmIG90aGVyKQot
ICAgIHsKLSAgICAgICAgSGFuZGxlPFQ+Ojpzd2FwKG90aGVyKTsKLSAgICB9CisgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0OworICAgIFdlYWsoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVGFnKTsKIAotICAgIFdlYWsmIG9wZXJhdG9yPShjb25zdCBQYXNzV2VhazxUPiYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFdlYWsoY29uc3QgUGFzc1dlYWs8VT4mKTsKIAotICAg
IEV4dGVybmFsVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiAgSGFuZGxlVHlwZXM8VD46OmdldEZy
b21TbG90KHNsb3QoKSk7IH0KLSAgICAKLSAgICBQYXNzV2VhazxUPiByZWxlYXNlKCkgeyBQYXNz
V2VhazxUPiB0bXAgPSBhZG9wdFdlYWs8VD4oc2xvdCgpKTsgc2V0U2xvdCgwKTsgcmV0dXJuIHRt
cDsgfQorICAgIH5XZWFrKCk7CiAKLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIGlm
ICghc2xvdCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFw
Rm9yKHNsb3QoKSktPmRlYWxsb2NhdGUoc2xvdCgpKTsKLSAgICAgICAgc2V0U2xvdCgwKTsKLSAg
ICB9CisgICAgdm9pZCBzd2FwKFdlYWsmKTsKKyAgICBXZWFrJiBvcGVyYXRvcj0oY29uc3QgUGFz
c1dlYWs8VD4mKTsKICAgICAKLSAgICBIYW5kbGVTbG90IGxlYWtIYW5kbGUoKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+aGFzRmluYWxpemVyKHNs
b3QoKSkpOwotICAgICAgICBIYW5kbGVTbG90IHJlc3VsdCA9IHNsb3QoKTsKLSAgICAgICAgc2V0
U2xvdCgwKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdDsKKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1w
bGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4K
KyAgICB0eXBlZGVmIEpTVmFsdWUgKEhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsK
KyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0OwogCisgICAgUGFzc1dl
YWs8VD4gcmVsZWFzZSgpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKIHByaXZhdGU6Ci0gICAg
c3RhdGljIEhhbmRsZVNsb3QgaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxIYW5kbGVTbG90PigtMSk7IH0KKyAgICBzdGF0aWMgV2Vha0ltcGwqIGhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOworCisgICAgV2Vha0ltcGwqIG1faW1wbDsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpXZWFrKCkKKyAgICA6IG1faW1wbCgwKQor
eworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2VhayhzdGQ6Om51
bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgV2VhazxUPjo6V2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHR5cGVuYW1lIFdl
YWs8VD46OkdldFR5cGUgZ2V0VHlwZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQq
IGNvbnRleHQpCisgICAgOiBtX2ltcGwoZ2xvYmFsRGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9j
YXRlKGdldFR5cGUsIHdlYWtPd25lciwgY29udGV4dCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBib29sIFdlYWs8VD46OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9pbXBsID09IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2Vhayh0eXBlbmFtZSBXZWFr
PFQ+OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCisgICAgOiBtX2ltcGwoaGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVu
YW1lIFU+ICBpbmxpbmUgV2VhazxUPjo6V2Vhayhjb25zdCBQYXNzV2VhazxVPiYgb3RoZXIpCisg
ICAgOiBtX2ltcGwob3RoZXIubGVha0ltcGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIFdlYWs8VD46On5XZWFrKCkKK3sKKyAgICBjbGVhcigpOworfQorCiB0ZW1wbGF0
ZTxjbGFzcyBUPiBpbmxpbmUgdm9pZCBzd2FwKFdlYWs8VD4mIGEsIFdlYWs8VD4mIGIpCiB7CiAg
ICAgYS5zd2FwKGIpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBXZWFr
PFQ+Ojpzd2FwKFdlYWsmIG90aGVyKQoreworICAgIHN0ZDo6c3dhcChtX2ltcGwsIG90aGVyLm1f
aW1wbCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+JiBXZWFrPFQ+
OjpvcGVyYXRvcj0oY29uc3QgUGFzc1dlYWs8VD4mIG8pCiB7CiAgICAgY2xlYXIoKTsKLSAgICBz
ZXRTbG90KG8ubGVha0hhbmRsZSgpKTsKKyAgICBtX2ltcGwgPSBvLmxlYWtJbXBsKCk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFr
PFQ+OjpvcGVyYXRvciEoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pbXBsIHx8ICFtX2ltcGwt
PmpzVmFsdWUoKSB8fCBtX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmU7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZp
ZWRCb29sVHlwZSo+KCEhKnRoaXMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
UGFzc1dlYWs8VD4gV2VhazxUPjo6cmVsZWFzZSgpCit7CisgICAgUGFzc1dlYWs8VD4gdG1wID0g
YWRvcHRXZWFrPFQ+KG1faW1wbCk7CisgICAgbV9pbXBsID0gMDsKKyAgICByZXR1cm4gdG1wOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBXZWFrPFQ+OjpjbGVhcigpCit7
CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybjsKKyAgICBXZWFrSGVhcDo6ZGVhbGxv
Y2F0ZShtX2ltcGwpOworICAgIG1faW1wbCA9IDA7Cit9CisgICAgCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgV2Vha0ltcGwqIFdlYWs8VD46Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpCit7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0ltcGwqPigtMSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTE1MSw3ICsxNzEsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czxKCiAgICAgc3RhdGljIFBhc3NPdXRU
eXBlIHBhc3NPdXQoU3RvcmFnZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7
IH0KICAgICBzdGF0aWMgUGFzc091dFR5cGUgcGFzc091dChFbXB0eVZhbHVlVHlwZSkgeyByZXR1
cm4gUGFzc091dFR5cGUoKTsgfQogCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBTdG9yYWdlVHlwZTo6
RXh0ZXJuYWxUeXBlIFBlZWtUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgU3RvcmFnZVR5cGU6
OkdldFR5cGUgUGVla1R5cGU7CiAgICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoY29uc3QgU3RvcmFn
ZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5nZXQoKTsgfQogICAgIHN0YXRpYyBQZWVrVHlw
ZSBwZWVrKEVtcHR5VmFsdWVUeXBlKSB7IHJldHVybiBQZWVrVHlwZSgpOyB9CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2Vha0Jsb2NrLmgiCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSGVhcFJvb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJTY29wZUNoYWluLmgi
CisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitXZWFrQmxvY2sq
IFdlYWtCbG9jazo6Y3JlYXRlKCkKK3sKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2Nh
dGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoYmxvY2tTaXplLCBibG9ja1Np
emUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKKyAgICBpZiAoIXN0YXRpY19jYXN0PGJv
b2w+KGFsbG9jYXRpb24pKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBuZXcgKE5vdE51
bGwsIGFsbG9jYXRpb24uYmFzZSgpKSBXZWFrQmxvY2soYWxsb2NhdGlvbik7Cit9CisKK3ZvaWQg
V2Vha0Jsb2NrOjpkZXN0cm95KFdlYWtCbG9jayogYmxvY2spCit7CisgICAgYmxvY2stPm1fYWxs
b2NhdGlvbi5kZWFsbG9jYXRlKCk7Cit9CisKK1dlYWtCbG9jazo6V2Vha0Jsb2NrKFBhZ2VBbGxv
Y2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbikKKyAgICA6IEhlYXBCbG9jayhhbGxvY2F0aW9uKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAgICBuZXcg
KE5vdE51bGwsIHdlYWtJbXBsKSBXZWFrSW1wbDsKKyAgICAgICAgYWRkVG9GcmVlTGlzdCgmbV9z
d2VlcFJlc3VsdC5mcmVlTGlzdCwgd2Vha0ltcGwpOworICAgIH0KKworICAgIEFTU0VSVCghbV9z
d2VlcFJlc3VsdC5pc051bGwoKSAmJiBtX3N3ZWVwUmVzdWx0LmJsb2NrSXNGcmVlKTsKK30KKwor
dm9pZCBXZWFrQmxvY2s6OmZpbmFsaXplQWxsKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHdlYWtJbXBsQ291bnQoKTsgKytpKSB7CisgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9
ICZ3ZWFrSW1wbHMoKVtpXTsKKyAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID49IFdlYWtJ
bXBsOjpGaW5hbGl6ZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgd2Vha0ltcGwt
PnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKKyAgICAgICAgZmluYWxpemUod2Vha0ltcGwpOwor
ICAgIH0KK30KKwordm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKK3sKKyAgICBpZiAoIW1fc3dlZXBS
ZXN1bHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN3ZWVwUmVzdWx0IHN3ZWVw
UmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kp
IHsKKyAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAg
ICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkRlYWQpCisgICAgICAgICAgICBm
aW5hbGl6ZSh3ZWFrSW1wbCk7CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA9PSBXZWFr
SW1wbDo6RGVhbGxvY2F0ZWQpCisgICAgICAgICAgICBhZGRUb0ZyZWVMaXN0KCZzd2VlcFJlc3Vs
dC5mcmVlTGlzdCwgd2Vha0ltcGwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzd2VlcFJl
c3VsdC5ibG9ja0lzRnJlZSA9IGZhbHNlOworICAgIH0KKworICAgIG1fc3dlZXBSZXN1bHQgPSBz
d2VlcFJlc3VsdDsKKyAgICBBU1NFUlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOworfQorCit2
b2lkIFdlYWtCbG9jazo6dmlzaXRMaXZlV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYgaGVhcFJv
b3RWaXNpdG9yKQoreworICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSB2
aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCisgICAgaWYgKCFtX3N3ZWVwUmVzdWx0LmlzTnVs
bCgpICYmIG1fc3dlZXBSZXN1bHQuYmxvY2tJc0ZyZWUpCisgICAgICAgIHJldHVybjsKKworICAg
IFNsb3RWaXNpdG9yJiB2aXNpdG9yID0gaGVhcFJvb3RWaXNpdG9yLnZpc2l0b3IoKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
V2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAgICBpZiAod2Vha0lt
cGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBKU1ZhbHVlJiBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKKyAg
ICAgICAgaWYgKCFqc1ZhbHVlIHx8ICFqc1ZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgSlNDZWxsKiBqc0NlbGwgPSBqc1ZhbHVlLmFzQ2VsbCgpOworICAg
ICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoanNDZWxsKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyID0gd2Vha0ltcGwtPndl
YWtIYW5kbGVPd25lcigpOworICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lcikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpT
VmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZjb25zdF9j
YXN0PEpTVmFsdWUmPihqc1ZhbHVlKSk7CisgICAgfQorfQorCit2b2lkIFdlYWtCbG9jazo6dmlz
aXREZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpCit7CisgICAgLy8gSWYgYSBibG9jayBp
cyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUgYW55IGVmZmVjdC4KKyAgICBp
ZiAoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkgJiYgbV9zd2VlcFJlc3VsdC5ibG9ja0lzRnJlZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWFrSW1wbENv
dW50KCk7ICsraSkgeworICAgICAgICBXZWFrSW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxzKClb
aV07CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA+IFdlYWtJbXBsOjpEZWFkKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgSlNWYWx1ZSYganNWYWx1ZSA9IHdl
YWtJbXBsLT5qc1ZhbHVlKCk7CisgICAgICAgIGlmICghanNWYWx1ZSB8fCAhanNWYWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTQ2VsbCoganNDZWxsID0g
anNWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGpzQ2VsbCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkRlYWQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vha0Jsb2NrX2gKKyNkZWZpbmUgV2Vha0Jsb2NrX2gK
KworI2luY2x1ZGUgIkhlYXBCbG9jay5oIgorI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgor
I2luY2x1ZGUgIldlYWtJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4K
KyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcFJvb3RWaXNpdG9y
OworY2xhc3MgSlNWYWx1ZTsKK2NsYXNzIFdlYWtIYW5kbGVPd25lcjsKKworY2xhc3MgV2Vha0Js
b2NrIDogcHVibGljIEhlYXBCbG9jayB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBibG9ja1NpemUgPSA0ICogS0I7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja01hc2sg
PSB+KGJsb2NrU2l6ZSAtIDEpOworCisgICAgc3RydWN0IEZyZWVDZWxsIHsKKyAgICAgICAgRnJl
ZUNlbGwqIG5leHQ7CisgICAgfTsKKworICAgIHN0cnVjdCBTd2VlcFJlc3VsdCB7CisgICAgICAg
IFN3ZWVwUmVzdWx0KCk7CisgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBibG9ja0lzRnJlZTsKKyAgICAgICAgRnJlZUNlbGwqIGZyZWVMaXN0OworICAgIH07CisK
KyAgICBzdGF0aWMgV2Vha0Jsb2NrKiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KFdlYWtCbG9jayopOworCisgICAgc3RhdGljIFdlYWtCbG9jayogYmxvY2tGb3IoV2Vha0ltcGwq
KTsKKyAgICBzdGF0aWMgV2Vha0ltcGwqIGFzV2Vha0ltcGwoRnJlZUNlbGwqKTsKKworICAgIHZv
aWQgc3dlZXAoKTsKKyAgICBjb25zdCBTd2VlcFJlc3VsdCYgc3dlZXBSZXN1bHQoKTsKKyAgICBT
d2VlcFJlc3VsdCB0YWtlU3dlZXBSZXN1bHQoKTsKKworICAgIHZvaWQgZGVhbGxvY2F0ZShXZWFr
SW1wbCopOworCisgICAgdm9pZCB2aXNpdExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdERlYWRXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisKKyAgICB2
b2lkIGZpbmFsaXplQWxsKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEZyZWVDZWxsKiBhc0Zy
ZWVDZWxsKFdlYWtJbXBsKik7CisKKyAgICBXZWFrQmxvY2soUGFnZUFsbG9jYXRpb25BbGlnbmVk
Jik7CisgICAgV2Vha0ltcGwqIGZpcnN0V2Vha0ltcGwoKTsKKyAgICB2b2lkIGZpbmFsaXplKFdl
YWtJbXBsKik7CisgICAgV2Vha0ltcGwqIHdlYWtJbXBscygpOworICAgIHNpemVfdCB3ZWFrSW1w
bENvdW50KCk7CisgICAgdm9pZCBhZGRUb0ZyZWVMaXN0KEZyZWVDZWxsKiosIFdlYWtJbXBsKik7
CisKKyAgICBTd2VlcFJlc3VsdCBtX3N3ZWVwUmVzdWx0OworfTsKKworaW5saW5lIFdlYWtCbG9j
azo6U3dlZXBSZXN1bHQ6OlN3ZWVwUmVzdWx0KCkKKyAgICA6IGJsb2NrSXNGcmVlKHRydWUpCisg
ICAgLCBmcmVlTGlzdCgwKQoreworICAgIEFTU0VSVChpc051bGwoKSk7Cit9CisKK2lubGluZSBi
b29sIFdlYWtCbG9jazo6U3dlZXBSZXN1bHQ6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGJsb2NrSXNGcmVlICYmICFmcmVlTGlzdDsgLy8gVGhpcyBzdGF0ZSBpcyBpbXBvc3NpYmxlLCBz
byB3ZSBjYW4gdXNlIGl0IHRvIG1lYW4gbnVsbC4KK30KKworaW5saW5lIFdlYWtCbG9jayogV2Vh
a0Jsb2NrOjpibG9ja0ZvcihXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8V2Vha0Jsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHdlYWtJ
bXBsKSAmIGJsb2NrTWFzayk7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0Jsb2NrOjphc1dl
YWtJbXBsKEZyZWVDZWxsKiBmcmVlQ2VsbCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxXZWFrSW1wbCo+KGZyZWVDZWxsKTsKK30KKworaW5saW5lIFdlYWtCbG9jazo6U3dlZXBSZXN1
bHQgV2Vha0Jsb2NrOjp0YWtlU3dlZXBSZXN1bHQoKQoreworICAgIFN3ZWVwUmVzdWx0IHRtcDsK
KyAgICBzdGQ6OnN3YXAodG1wLCBtX3N3ZWVwUmVzdWx0KTsKKyAgICBBU1NFUlQobV9zd2VlcFJl
c3VsdC5pc051bGwoKSk7CisgICAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIGNvbnN0IFdlYWtC
bG9jazo6U3dlZXBSZXN1bHQmIFdlYWtCbG9jazo6c3dlZXBSZXN1bHQoKQoreworICAgIHJldHVy
biBtX3N3ZWVwUmVzdWx0OworfQorCitpbmxpbmUgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0Js
b2NrOjphc0ZyZWVDZWxsKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxGcmVlQ2VsbCo+KHdlYWtJbXBsKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Js
b2NrOjpkZWFsbG9jYXRlKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICB3ZWFrSW1wbC0+c2V0
U3RhdGUoV2Vha0ltcGw6OkRlYWxsb2NhdGVkKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Jsb2Nr
OjpmaW5hbGl6ZShXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgQVNTRVJUKHdlYWtJbXBsLT5z
dGF0ZSgpID09IFdlYWtJbXBsOjpEZWFkKTsKKyAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkZpbmFsaXplZCk7CisgICAgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIgPSB3
ZWFrSW1wbC0+d2Vha0hhbmRsZU93bmVyKCk7CisgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICB3ZWFrSGFuZGxlT3duZXItPmZpbmFsaXplKEhhbmRsZTxVbmtu
b3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KHdlYWtJbXBsLT5qc1ZhbHVlKCkp
KSwgd2Vha0ltcGwtPmNvbnRleHQoKSk7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0Jsb2Nr
Ojp3ZWFrSW1wbHMoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4o
dGhpcykgKyAoKHNpemVvZihXZWFrQmxvY2spICsgc2l6ZW9mKFdlYWtJbXBsKSAtIDEpIC8gc2l6
ZW9mKFdlYWtJbXBsKSk7Cit9CisKK2lubGluZSBzaXplX3QgV2Vha0Jsb2NrOjp3ZWFrSW1wbENv
dW50KCkKK3sKKyAgICByZXR1cm4gKGJsb2NrU2l6ZSAvIHNpemVvZihXZWFrSW1wbCkpIC0gKChz
aXplb2YoV2Vha0Jsb2NrKSArIHNpemVvZihXZWFrSW1wbCkgLSAxKSAvIHNpemVvZihXZWFrSW1w
bCkpOworfQorCitpbmxpbmUgdm9pZCBXZWFrQmxvY2s6OmFkZFRvRnJlZUxpc3QoRnJlZUNlbGwq
KiBmcmVlTGlzdCwgV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIEFTU0VSVCh3ZWFrSW1wbC0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6RGVhbGxvY2F0ZWQpOworICAgIEZyZWVDZWxsKiBmcmVlQ2Vs
bCA9IGFzRnJlZUNlbGwod2Vha0ltcGwpOworICAgIEFTU0VSVCghKmZyZWVMaXN0IHx8ICgoY2hh
ciopKmZyZWVMaXN0ID4gKGNoYXIqKXRoaXMgJiYgKGNoYXIqKSpmcmVlTGlzdCA8IChjaGFyKil0
aGlzICsgYmxvY2tTaXplKSk7CisgICAgQVNTRVJUKChjaGFyKilmcmVlQ2VsbCA+IChjaGFyKil0
aGlzICYmIChjaGFyKilmcmVlQ2VsbCA8IChjaGFyKil0aGlzICsgYmxvY2tTaXplKTsKKyAgICBm
cmVlQ2VsbC0+bmV4dCA9ICpmcmVlTGlzdDsKKyAgICAqZnJlZUxpc3QgPSBmcmVlQ2VsbDsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBXZWFrQmxvY2tfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIFNsb3RWaXNpdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgSGFuZGxlOwor
CitXZWFrSGFuZGxlT3duZXI6On5XZWFrSGFuZGxlT3duZXIoKQoreworfQorCitib29sIFdlYWtI
YW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2
b2lkKiwgU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWFr
SGFuZGxlT3duZXI6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCopCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hh
bmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrSGFuZGxlT3duZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2Vha0hhbmRsZU93bmVyX2gKKyNkZWZpbmUgV2Vha0hhbmRsZU93bmVy
X2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU2xv
dFZpc2l0b3I7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CisgICAgdmlydHVhbCBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4
dCwgU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gV2Vha0hhbmRsZU93bmVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtIZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGVhcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGVhcC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYWtIZWFwLmgiCisKKyNpbmNsdWRlICJIZWFw
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitXZWFrSGVhcDo6fldlYWtIZWFwKCkKK3sKKyAgICBX
ZWFrQmxvY2sqIG5leHQgPSAwOworICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19j
YXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsK
KyAgICAgICAgbmV4dCA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpOwor
ICAgICAgICBXZWFrQmxvY2s6OmRlc3Ryb3koYmxvY2spOworICAgIH0KKyAgICBtX2Jsb2Nrcy5j
bGVhcigpOworfQorCit2b2lkIFdlYWtIZWFwOjpmaW5hbGl6ZUFsbCgpCit7CisgICAgZm9yIChX
ZWFrQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3MuaGVhZCgp
KTsgYmxvY2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4oYmxvY2stPm5leHQoKSkp
CisgICAgICAgIGJsb2NrLT5maW5hbGl6ZUFsbCgpOworfQorCit2b2lkIFdlYWtIZWFwOjp2aXNp
dExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoV2Vh
a0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7
IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpKQor
ICAgICAgICBibG9jay0+dmlzaXRMaXZlV2Vha0ltcGxzKHZpc2l0b3IpOworfQorCit2b2lkIFdl
YWtIZWFwOjp2aXNpdERlYWRXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxv
Y2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2Nr
LT5uZXh0KCkpKQorICAgICAgICBibG9jay0+dmlzaXREZWFkV2Vha0ltcGxzKHZpc2l0b3IpOwor
fQorCit2b2lkIFdlYWtIZWFwOjpzd2VlcCgpCit7CisgICAgV2Vha0Jsb2NrKiBuZXh0OworICAg
IGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tz
LmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHN0YXRpY19j
YXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpOworCisgICAgICAgIC8vIElmIGEgYmxvY2sg
aXMgY29tcGxldGVseSBlbXB0eSwgYSBuZXcgc3dlZXAgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0Lgor
ICAgICAgICBpZiAoIWJsb2NrLT5zd2VlcFJlc3VsdCgpLmlzTnVsbCgpICYmIGJsb2NrLT5zd2Vl
cFJlc3VsdCgpLmJsb2NrSXNGcmVlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
YmxvY2stPnRha2VTd2VlcFJlc3VsdCgpOyAvLyBGb3JjZSBhIG5ldyBzd2VlcCBieSBkaXNjYXJk
aW5nIHRoZSBsYXN0IHN3ZWVwLgorICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICB9Cit9CisK
K3ZvaWQgV2Vha0hlYXA6OnJlc2V0QWxsb2NhdG9yKCkKK3sKKyAgICBtX2FsbG9jYXRvciA9IDA7
CisgICAgbV9uZXh0QWxsb2NhdG9yID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3Mu
aGVhZCgpKTsKK30KKworV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OmZpbmRBbGxvY2F0
b3IoKQoreworICAgIGlmIChXZWFrQmxvY2s6OkZyZWVDZWxsKiBhbGxvY2F0b3IgPSB0cnlGaW5k
QWxsb2NhdG9yKCkpCisgICAgICAgIHJldHVybiBhbGxvY2F0b3I7CisKKyAgICBtX2hlYXAtPmFk
ZFRvV2F0ZXJNYXJrKFdlYWtCbG9jazo6YmxvY2tTaXplKTsKKworICAgIC8vIGFkZFRvV2F0ZXJN
YXJrKCkgbWF5IGNhdXNlIGEgR0MsIHNvIHRyeSBhZ2Fpbi4KKyAgICBpZiAoV2Vha0Jsb2NrOjpG
cmVlQ2VsbCogYWxsb2NhdG9yID0gdHJ5RmluZEFsbG9jYXRvcigpKQorICAgICAgICByZXR1cm4g
YWxsb2NhdG9yOworCisgICAgcmV0dXJuIGFkZEFsbG9jYXRvcigpOworfQorCitXZWFrQmxvY2s6
OkZyZWVDZWxsKiBXZWFrSGVhcDo6dHJ5RmluZEFsbG9jYXRvcigpCit7CisgICAgd2hpbGUgKG1f
bmV4dEFsbG9jYXRvcikgeworICAgICAgICBXZWFrQmxvY2sqIGJsb2NrID0gbV9uZXh0QWxsb2Nh
dG9yOworICAgICAgICBtX25leHRBbGxvY2F0b3IgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPiht
X25leHRBbGxvY2F0b3ItPm5leHQoKSk7CisKKyAgICAgICAgYmxvY2stPnN3ZWVwKCk7CisgICAg
ICAgIFdlYWtCbG9jazo6U3dlZXBSZXN1bHQgc3dlZXBSZXN1bHQgPSBibG9jay0+dGFrZVN3ZWVw
UmVzdWx0KCk7CisgICAgICAgIGlmIChzd2VlcFJlc3VsdC5mcmVlTGlzdCkKKyAgICAgICAgICAg
IHJldHVybiBzd2VlcFJlc3VsdC5mcmVlTGlzdDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OmFkZEFsbG9jYXRvcigpCit7CisgICAg
V2Vha0Jsb2NrKiBibG9jayA9IFdlYWtCbG9jazo6Y3JlYXRlKCk7CisgICAgbV9ibG9ja3MuYXBw
ZW5kKGJsb2NrKTsKKyAgICBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0IHN3ZWVwUmVzdWx0ID0gYmxv
Y2stPnRha2VTd2VlcFJlc3VsdCgpOworICAgIEFTU0VSVCghc3dlZXBSZXN1bHQuaXNOdWxsKCkg
JiYgc3dlZXBSZXN1bHQuZnJlZUxpc3QpOworICAgIHJldHVybiBzd2VlcFJlc3VsdC5mcmVlTGlz
dDsKK30KKwordm9pZCBXZWFrSGVhcDo6cmVtb3ZlQWxsb2NhdG9yKFdlYWtCbG9jayogYmxvY2sp
Cit7CisgICAgbV9ibG9ja3MucmVtb3ZlKGJsb2NrKTsKKyAgICBXZWFrQmxvY2s6OmRlc3Ryb3ko
YmxvY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0hlYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtIZWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYWtIZWFwX2gKKyNkZWZpbmUgV2Vha0hlYXBfaAorCisjaW5jbHVkZSAiV2Vh
a0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgV2Vha0lt
cGw7CisKK2NsYXNzIFdlYWtIZWFwIHsKK3B1YmxpYzoKKyAgICBXZWFrSGVhcChIZWFwKik7Cisg
ICAgdm9pZCBmaW5hbGl6ZUFsbCgpOworICAgIH5XZWFrSGVhcCgpOworCisgICAgV2Vha0ltcGwq
IGFsbG9jYXRlKEpTVmFsdWUsIFdlYWtIYW5kbGVPd25lciogPSAwLCB2b2lkKiBjb250ZXh0ID0g
MCk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShXZWFrSW1wbCopOworCisgICAgdm9pZCB2
aXNpdExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdERlYWRX
ZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisKKyAgICB2b2lkIHN3ZWVwKCk7CisgICAgdm9p
ZCByZXNldEFsbG9jYXRvcigpOworCitwcml2YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFdl
YWtCbG9jazo6RnJlZUNlbGwqIGZpbmRBbGxvY2F0b3IoKTsKKyAgICBXZWFrQmxvY2s6OkZyZWVD
ZWxsKiB0cnlGaW5kQWxsb2NhdG9yKCk7CisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWRkQWxs
b2NhdG9yKCk7CisgICAgdm9pZCByZW1vdmVBbGxvY2F0b3IoV2Vha0Jsb2NrKik7CisKKyAgICBX
ZWFrQmxvY2s6OkZyZWVDZWxsKiBtX2FsbG9jYXRvcjsKKyAgICBXZWFrQmxvY2sqIG1fbmV4dEFs
bG9jYXRvcjsKKyAgICBEb3VibHlMaW5rZWRMaXN0PEhlYXBCbG9jaz4gbV9ibG9ja3M7CisgICAg
SGVhcCogbV9oZWFwOworfTsKKworaW5saW5lIFdlYWtIZWFwOjpXZWFrSGVhcChIZWFwKiBoZWFw
KQorICAgIDogbV9hbGxvY2F0b3IoMCkKKyAgICAsIG1fbmV4dEFsbG9jYXRvcigwKQorICAgICwg
bV9oZWFwKGhlYXApCit7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0hlYXA6OmFsbG9jYXRl
KEpTVmFsdWUganNWYWx1ZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIsIHZvaWQq
IGNvbnRleHQpCit7CisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWxsb2NhdG9yID0gbV9hbGxv
Y2F0b3I7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIGFsbG9jYXRvciA9IGZpbmRBbGxv
Y2F0b3IoKTsKKyAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvci0+bmV4dDsKKworICAgIFdlYWtJ
bXBsKiB3ZWFrSW1wbCA9IFdlYWtCbG9jazo6YXNXZWFrSW1wbChhbGxvY2F0b3IpOworICAgIHJl
dHVybiBuZXcgKE5vdE51bGwsIHdlYWtJbXBsKSBXZWFrSW1wbChqc1ZhbHVlLCB3ZWFrSGFuZGxl
T3duZXIsIGNvbnRleHQpOworfQorCitpbmxpbmUgdm9pZCBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShX
ZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgV2Vha0Jsb2NrOjpibG9ja0Zvcih3ZWFrSW1wbCkt
PmRlYWxsb2NhdGUod2Vha0ltcGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFdlYWtIZWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0ltcGwuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBsLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWFrSW1w
bF9oCisjZGVmaW5lIFdlYWtJbXBsX2gKKworI2luY2x1ZGUgIkpTVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFdlYWtIYW5kbGVPd25lcjsKKworY2xhc3MgV2Vha0ltcGwgewor
cHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBMaXZlICAgICAgICA9IDB4MCwKKyAg
ICAgICAgRGVhZCAgICAgICAgPSAweDEsCisgICAgICAgIEZpbmFsaXplZCAgID0gMHgyLAorICAg
ICAgICBEZWFsbG9jYXRlZCA9IDB4MworICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAgICAgU3Rh
dGVNYXNrICAgPSAweDMKKyAgICB9OworCisgICAgV2Vha0ltcGwoKTsKKyAgICBXZWFrSW1wbChK
U1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqLCB2b2lkKiBjb250ZXh0KTsKKworICAgIFN0YXRlIHN0
YXRlKCk7CisgICAgdm9pZCBzZXRTdGF0ZShTdGF0ZSk7CisKKyAgICBjb25zdCBKU1ZhbHVlJiBq
c1ZhbHVlKCk7CisgICAgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIoKTsKKyAgICB2
b2lkKiBjb250ZXh0KCk7CisKKyAgICBzdGF0aWMgV2Vha0ltcGwqIGFzV2Vha0ltcGwoSlNWYWx1
ZSopOworCitwcml2YXRlOgorICAgIGNvbnN0IEpTVmFsdWUgbV9qc1ZhbHVlOworICAgIFdlYWtI
YW5kbGVPd25lciogbV93ZWFrSGFuZGxlT3duZXI7CisgICAgdm9pZCogbV9jb250ZXh0OworfTsK
KworaW5saW5lIFdlYWtJbXBsOjpXZWFrSW1wbCgpCisgICAgOiBtX3dlYWtIYW5kbGVPd25lcigw
KQorICAgICwgbV9jb250ZXh0KDApCit7CisgICAgc2V0U3RhdGUoRGVhbGxvY2F0ZWQpOworfQor
CitpbmxpbmUgV2Vha0ltcGw6OldlYWtJbXBsKEpTVmFsdWUganNWYWx1ZSwgV2Vha0hhbmRsZU93
bmVyKiB3ZWFrSGFuZGxlT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgOiBtX2pzVmFsdWUoanNW
YWx1ZSkKKyAgICAsIG1fd2Vha0hhbmRsZU93bmVyKHdlYWtIYW5kbGVPd25lcikKKyAgICAsIG1f
Y29udGV4dChjb250ZXh0KQoreworICAgIEFTU0VSVChzdGF0ZSgpID09IExpdmUpOworfQorCitp
bmxpbmUgV2Vha0ltcGw6OlN0YXRlIFdlYWtJbXBsOjpzdGF0ZSgpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFN0YXRlPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxl
T3duZXIpICYgU3RhdGVNYXNrKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0ltcGw6OnNldFN0YXRl
KFdlYWtJbXBsOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUgPj0gdGhpcy0+c3Rh
dGUoKSk7CisgICAgbV93ZWFrSGFuZGxlT3duZXIgPSByZWludGVycHJldF9jYXN0PFdlYWtIYW5k
bGVPd25lcio+KChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxlT3duZXIp
ICYgflN0YXRlTWFzaykgfCBzdGF0ZSk7Cit9CisKK2lubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFr
SW1wbDo6anNWYWx1ZSgpCit7CisgICAgcmV0dXJuIG1fanNWYWx1ZTsKK30KKworaW5saW5lIFdl
YWtIYW5kbGVPd25lciogV2Vha0ltcGw6OndlYWtIYW5kbGVPd25lcigpCit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0hhbmRsZU93bmVyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihtX3dlYWtIYW5kbGVPd25lcikgJiB+U3RhdGVNYXNrKSk7Cit9CisKK2lubGluZSB2
b2lkKiBXZWFrSW1wbDo6Y29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dDsKK30KKwor
aW5saW5lIFdlYWtJbXBsKiBXZWFrSW1wbDo6YXNXZWFrSW1wbChKU1ZhbHVlKiBzbG90KQorewor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4ocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc2xvdCkgKyBPQkpFQ1RfT0ZGU0VUT0YoV2Vha0ltcGwsIG1fanNWYWx1ZSkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFdlYWtJbXBsX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9BYnN0cmFjdFBDLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Fic3RyYWN0UEMuaAkocmV2aXNpb24g
MTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Fic3RyYWN0UEMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBBYnN0cmFjdFBDIHsKIHB1
YmxpYzoKICAgICBBYnN0cmFjdFBDKCkKICAgICAgICAgOiBtX3BvaW50ZXIoMCkKLSAgICAgICAg
LCBtX21vZGUoTm9uZSkKKyAgICAgICAgLCBtX21vZGUoTm90U2V0KQogICAgIHsKICAgICB9CiAg
ICAgCkBAIC03NSwxMyArNzUsMTMgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogICAgIAotICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX21vZGUgIT0gTm9uZTsgfQorICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBtX21vZGUgIT0gTm90U2V0OyB9CiAgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogCiBwcml2YXRlOgogICAgIHZvaWQq
IG1fcG9pbnRlcjsKICAgICAKLSAgICBlbnVtIE1vZGUgeyBOb25lLCBKSVQsIEludGVycHJldGVy
IH07CisgICAgZW51bSBNb2RlIHsgTm90U2V0LCBKSVQsIEludGVycHJldGVyIH07CiAgICAgTW9k
ZSBtX21vZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NzUsNyArMzU3NSw3IEBAIE5hdGl2ZUV4ZWN1dGFi
bGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6
aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9u
IGZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMp
CiB7CiAgICAgSG9zdEZ1bmN0aW9uU3R1Yk1hcDo6QWRkUmVzdWx0IGVudHJ5ID0gbV9ob3N0RnVu
Y3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCkp
OwotICAgIGlmICghKmVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQpIHsKKyAgICBpZiAoIWVudHJ5Lml0
ZXJhdG9yLT5zZWNvbmQpIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGU7CiAg
ICAgICAgIGlmIChnZW5lcmF0b3IpIHsKICAgICAgICAgICAgIGlmIChnbG9iYWxEYXRhLT5jYW5V
c2VKSVQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZp
c2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUxLDcgKzM1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgogICAgIGlubGluZSBUbyBqc0Nhc3Qo
RnJvbSogZnJvbSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChmcm9tLT5pbmhlcml0cygmV1RGOjpS
ZW1vdmVQb2ludGVyPFRvPjo6VHlwZTo6c19pbmZvKSk7CisgICAgICAgIEFTU0VSVCghZnJvbSB8
fCBmcm9tLT5pbmhlcml0cygmV1RGOjpSZW1vdmVQb2ludGVyPFRvPjo6VHlwZTo6c19pbmZvKSk7
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUbz4oZnJvbSk7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDEx
MjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGU6OmFkCiAgICAgICAgIC8vIFRoZXJlIGFscmVhZHkgaXMgYW4gZW50cnkhIC0g
d2Ugc2hvdWxkIG9ubHkgaGl0IHRoaXMgd2hlbiBkZXNwZWNpZnlpbmcuCiAgICAgICAgIEFTU0VS
VChyZXN1bHQuaXRlcmF0b3IuZ2V0KCkuc2Vjb25kLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3Vz
KTsKICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMp
OwotICAgICAgICBtYXAoKS0+c2V0KHJlc3VsdC5pdGVyYXRvciwgc3RydWN0dXJlKTsKKyAgICAg
ICAgbWFwKCktPnNldChnbG9iYWxEYXRhLCByZXN1bHQuaXRlcmF0b3IuZ2V0KCkuZmlyc3QsIHN0
cnVjdHVyZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gMTEy
NTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK2NsYXNzIEpTQ2VsbDsKIGNsYXNzIFN0cnVjdHVyZTsKIAogY2xhc3MgU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlIHsKQEAgLTgzLDEwICs4NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5z
bG90KCk7Ci0gICAgICAgIGlmICghc2xvdCkKKyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSB0aGlz
LT53ZWFrSW1wbCgpOworICAgICAgICBpZiAoIWltcGwpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAg
ICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgIH0KIAogICAgIGlubGluZSB2b2lk
IGFkZChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKQEAgLTEwNSwxOCArMTA2LDE4IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRyYW5zaXRpb25NYXAqPiht
X2RhdGEpOwogICAgIH0KIAotICAgIEhhbmRsZVNsb3Qgc2xvdCgpIGNvbnN0CisgICAgV2Vha0lt
cGwqIHdlYWtJbXBsKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xl
U2xvdCgpKTsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SGFuZGxlU2xvdD4obV9k
YXRhICYgflVzaW5nU2luZ2xlU2xvdEZsYWcpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxXZWFrSW1wbCo+KG1fZGF0YSAmIH5Vc2luZ1NpbmdsZVNsb3RGbGFnKTsKICAgICB9CiAK
ICAgICB2b2lkIHNldE1hcChUcmFuc2l0aW9uTWFwKiBtYXApCiAgICAgewogICAgICAgICBBU1NF
UlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoSGFuZGxlU2xv
dCBzbG90ID0gdGhpcy0+c2xvdCgpKQotICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihz
bG90KS0+ZGVhbGxvY2F0ZShzbG90KTsKKyAgICAgICAgaWYgKFdlYWtJbXBsKiBpbXBsID0gdGhp
cy0+d2Vha0ltcGwoKSkKKyAgICAgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwog
CiAgICAgICAgIC8vIFRoaXMgaW1wbGljaXRseSBjbGVhcnMgdGhlIGZsYWcgdGhhdCBpbmRpY2F0
ZXMgd2UncmUgdXNpbmcgYSBzaW5nbGUgdHJhbnNpdGlvbgogICAgICAgICBtX2RhdGEgPSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihtYXApOwpAQCAtMTI3LDkgKzEyOCw5IEBAIHByaXZhdGU6
CiAgICAgU3RydWN0dXJlKiBzaW5nbGVUcmFuc2l0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKLSAgICAgICAgaWYgKEhhbmRsZVNsb3Qgc2xv
dCA9IHRoaXMtPnNsb3QoKSkgewotICAgICAgICAgICAgaWYgKCpzbG90KQotICAgICAgICAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KHNsb3QtPmFzQ2VsbCgpKTsK
KyAgICAgICAgaWYgKFdlYWtJbXBsKiBpbXBsID0gdGhpcy0+d2Vha0ltcGwoKSkgeworICAgICAg
ICAgICAgaWYgKGltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4oaW1wbC0+anNWYWx1ZSgpLmFz
Q2VsbCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xMzcsMTQg
KzEzOCwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0U2luZ2xlVHJhbnNpdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSB0
aGlzLT5zbG90KCk7Ci0gICAgICAgIGlmICghc2xvdCkgewotICAgICAgICAgICAgc2xvdCA9IGds
b2JhbERhdGEuaGVhcC5oYW5kbGVIZWFwKCktPmFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBIYW5k
bGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5tYWtlV2VhayhzbG90LCAwLCAwKTsKLSAgICAgICAgICAg
IG1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHNsb3QpIHwgVXNpbmdTaW5nbGVT
bG90RmxhZzsKLSAgICAgICAgfQotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53
cml0ZUJhcnJpZXIoc2xvdCwgcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihzdHJ1Y3R1cmUpKTsK
LSAgICAgICAgKnNsb3QgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHN0cnVjdHVyZSk7Cisg
ICAgICAgIGlmIChXZWFrSW1wbCogaW1wbCA9IHRoaXMtPndlYWtJbXBsKCkpCisgICAgICAgICAg
ICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShpbXBsKTsKKyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSBn
bG9iYWxEYXRhLmhlYXAud2Vha0hlYXAoKS0+YWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxKU0Nl
bGwqPihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgbV9kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oaW1wbCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwogICAgIH0KIAogICAgIGludHB0cl90
IG1fZGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5o
CShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
R0NNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBjbGFzcyBXZWFrR0NNYXAg
OiBwcml2YXRlIFdlYWtIYW5kbGVPd25lCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2Vha0dDTWFwKTsKIAotICAgIHR5cGVkZWYgSGFzaE1h
cDxLZXlUeXBlLCBIYW5kbGVTbG90LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IE1hcFR5cGU7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5cGUsIFdlYWtJbXBsKiwgSGFzaEFyZywgS2V5VHJhaXRz
QXJnPiBNYXBUeXBlOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlVHlwZXM8TWFwcGVkVHlw
ZT46OkV4dGVybmFsVHlwZSBFeHRlcm5hbFR5cGU7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBNYXBU
eXBlOjppdGVyYXRvciBtYXBfaXRlcmF0b3I7CiAKQEAgLTY0LDggKzY0LDcgQEAgcHVibGljOgog
ICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBl
LCBFeHRlcm5hbFR5cGU+IGdldCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRl
cmF0b3ItPmZpcnN0LCBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QobV9pdGVy
YXRvci0+c2Vjb25kKSk7IH0KLSAgICAgICAgc3RkOjpwYWlyPEtleVR5cGUsIEhhbmRsZVNsb3Q+
IGdldFNsb3QoKSBjb25zdCB7IHJldHVybiAqbV9pdGVyYXRvcjsgfQorICAgICAgICBzdGQ6OnBh
aXI8S2V5VHlwZSwgRXh0ZXJuYWxUeXBlPiBnZXQoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihtX2l0ZXJhdG9yLT5maXJzdCwgSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21T
bG90KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KCZtX2l0ZXJhdG9yLT5zZWNvbmQtPmpzVmFsdWUoKSkp
KTsgfQogICAgICAgICAKICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7ICsrbV9pdGVy
YXRvcjsgcmV0dXJuICp0aGlzOyB9CiAgICAgICAgIApAQCAtOTAsNyArODksNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBtYXBfaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAgICAg
IGZvciAobWFwX2l0ZXJhdG9yIHB0ciA9IG1fbWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRy
KQotICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihwdHItPnNlY29uZCktPmRlYWxsb2Nh
dGUocHRyLT5zZWNvbmQpOworICAgICAgICAgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUocHRyLT5z
ZWNvbmQpOwogICAgICAgICBtX21hcC5jbGVhcigpOwogICAgIH0KIApAQCAtMTA3LDY0ICsxMDYs
NDIgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0ZXIpCiAgICAgewogICAg
ICAgICBBU1NFUlQoaXRlci5tX2l0ZXJhdG9yICE9IG1fbWFwLmVuZCgpKTsKLSAgICAgICAgSGFu
ZGxlU2xvdCBzbG90ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgICAgIEFTU0VSVChz
bG90KTsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShzbG90
KTsKKyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSBpdGVyLm1faXRlcmF0b3ItPnNlY29uZDsKKyAg
ICAgICAgQVNTRVJUKGltcGwpOworICAgICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShpbXBsKTsK
ICAgICAgICAgbV9tYXAucmVtb3ZlKGl0ZXIubV9pdGVyYXRvcik7CiAgICAgfQogCiAgICAgRXh0
ZXJuYWxUeXBlIGdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21TbG90KG1fbWFwLmdldChrZXkp
KTsKLSAgICB9Ci0KLSAgICBIYW5kbGVTbG90IGdldFNsb3QoY29uc3QgS2V5VHlwZSYga2V5KSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbWFwLmdldChrZXkpOworICAgICAgICByZXR1
cm4gSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21TbG90KGNvbnN0X2Nhc3Q8SlNWYWx1
ZSo+KCZtX21hcC5nZXQoa2V5KS0+anNWYWx1ZSgpKSk7CiAgICAgfQogCiAgICAgQWRkUmVzdWx0
IGFkZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEtleVR5cGUmIGtleSwgRXh0ZXJu
YWxUeXBlIHZhbHVlKQogICAgIHsKICAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fbWFwLmFkZChrZXksIDApOwotICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGdsb2JhbERhdGEuaGVhcC5oYW5k
bGVIZWFwKCktPmFsbG9jYXRlKCk7Ci0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IHNsb3Q7Ci0gICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5tYWtlV2Vh
ayhzbG90LCB0aGlzLCBGaW5hbGl6ZXJDYWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkp
KTsKLSAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihz
bG90LCB2YWx1ZSk7Ci0gICAgICAgICAgICAqc2xvdCA9IHZhbHVlOwotICAgICAgICB9CisgICAg
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gZ2xvYmFsRGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKHZhbHVlLCB0aGlz
LCBGaW5hbGl6ZXJDYWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKKwogICAgICAg
ICAvLyBXZWFrR0NNYXAgZXhwb3NlcyBhIGRpZmZlcmVudCBpdGVyYXRvciwgc28gd2UgbmVlZCB0
byB3cmFwIGl0IGFuZCBjcmVhdGUgb3VyIG93biBBZGRSZXN1bHQuCiAgICAgICAgIHJldHVybiBB
ZGRSZXN1bHQoaXRlcmF0b3IocmVzdWx0Lml0ZXJhdG9yKSwgcmVzdWx0LmlzTmV3RW50cnkpOwog
ICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChpdGVyYXRvciBpdGVyLCBFeHRlcm5hbFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSBpdGVyLm1faXRlcmF0b3ItPnNl
Y29uZDsKLSAgICAgICAgQVNTRVJUKHNsb3QpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9y
KHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwotICAgICAgICAqc2xvdCA9IHZhbHVl
OwotICAgIH0KIAogICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3Qg
S2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAgewogICAgICAgICB0eXBlbmFt
ZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7Ci0gICAgICAg
IEhhbmRsZVNsb3Qgc2xvdCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotICAgICAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgIHNsb3QgPSBnbG9iYWxEYXRhLmhlYXAu
aGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpOwotICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZv
cihzbG90KS0+bWFrZVdlYWsoc2xvdCwgdGhpcywga2V5KTsKLSAgICAgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gc2xvdDsKLSAgICAgICAgfQotICAgICAgICBIYW5kbGVIZWFwOjpo
ZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwotICAgICAgICAqc2xvdCA9
IHZhbHVlOworICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgV2Vh
a0hlYXA6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IGdsb2JhbERhdGEuaGVhcC53ZWFrSGVhcCgpLT5hbGxvY2F0
ZSh2YWx1ZSwgdGhpcywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5
KSk7CiAgICAgfQogCiAgICAgRXh0ZXJuYWxUeXBlIHRha2UoY29uc3QgS2V5VHlwZSYga2V5KQog
ICAgIHsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gbV9tYXAudGFrZShrZXkpOwotICAgICAg
ICBpZiAoIXNsb3QpCisgICAgICAgIFdlYWtJbXBsKiBpbXBsID0gbV9tYXAudGFrZShrZXkpOwor
ICAgICAgICBpZiAoIWltcGwpCiAgICAgICAgICAgICByZXR1cm4gSGFzaFRyYWl0czxFeHRlcm5h
bFR5cGU+OjplbXB0eVZhbHVlKCk7Ci0gICAgICAgIEV4dGVybmFsVHlwZSByZXN1bHQgPSBIYW5k
bGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3Qoc2xvdCk7Ci0gICAgICAgIEhhbmRsZUhl
YXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgICAgIEV4dGVybmFsVHlw
ZSByZXN1bHQgPSBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2Fz
dDxKU1ZhbHVlKj4oJmltcGwtPmpzVmFsdWUoKSkpOworICAgICAgICBXZWFrSGVhcDo6ZGVhbGxv
Y2F0ZShpbXBsKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTE4MSw5ICsx
NTgsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShIYW5k
bGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgSGFuZGxl
U2xvdCBzbG90ID0gbV9tYXAudGFrZShGaW5hbGl6ZXJDYWxsYmFjazo6a2V5Rm9yRmluYWxpemVy
KGNvbnRleHQsIEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9tU2xvdChoYW5kbGUuc2xv
dCgpKSkpOwotICAgICAgICBBU1NFUlQoc2xvdCk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBG
b3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgICAgIFdlYWtJbXBsKiBpbXBsID0gbV9t
YXAudGFrZShGaW5hbGl6ZXJDYWxsYmFjazo6a2V5Rm9yRmluYWxpemVyKGNvbnRleHQsIEhhbmRs
ZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9tU2xvdChoYW5kbGUuc2xvdCgpKSkpOworICAgICAg
ICBBU1NFUlQoaW1wbCk7CisgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAg
IH0KIAogICAgIE1hcFR5cGUgbV9tYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTI1ODcp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MiBAQAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisg
ICAgICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQg
V2ViQ29yZSBmb3IgV2VhazxUPiBBUEkgY2hhbmdlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0RPTVdyYXBwZXJXb3JsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N0cmluZ093bmVyOjpm
aW5hbGl6ZSk6IFdlJ3JlIG5vdCBhbGxvd2VkIHRvIGdldCgpIGEgZGVhZCBXZWFrPFQ+CisgICAg
ICAgIGFueW1vcmUsIHNvIHVzZSB0aGUgZGVidWctb25seSB3YXMoKSBoZWxwZXIgZnVuY3Rpb24g
aW5zdGVhZC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAg
ICAoV2ViQ29yZTo6dW5jYWNoZVdyYXBwZXIpOiBEaXR0by4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTTm9kZUN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6c2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcik6CisgICAgICAgIChXZWJDb3JlOjpjbGVhcklubGluZUNhY2hlZFdyYXBwZXIpOiBXZSdy
ZSBub3QgYWxsb3dlZCB0byBnZXQoKSBhIGRlYWQKKyAgICAgICAgV2VhazxUPiwgc28gSSBoYWQg
dG8gcHVzaCBkb3duIHRoZXNlIEFTU0VSVHMgaW50byBTY3JpcHRXcmFwcGFibGUuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKTogVXBkYXRlZCBmb3Igbm9u
LUhhbmRsZS1uZXNzCisgICAgICAgIG9mIFdlYWs8VD4uCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHRXcmFwcGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFdyYXBwYWJsZTo6
c2V0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRXcmFwcGFibGU6OmNsZWFyV3Jh
cHBlcik6IFVzZSB3YXMoKSwgYXMgYWJvdmUuCisKIDIwMTItMDMtMjkgIEJlYXIgVHJhdmlzICA8
YmV0cmF2aXNAYWRvYmUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBDU1MgRXhjbHVzaW9uIHdyYXAt
ZmxvdyB2YWx1ZXMgbGVmdCAmIHJpZ2h0IHRvIHN0YXJ0ICYgZW5kCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAJKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgdm9pZCBKU1N0cmluZ093bmVyOjpmaW5hbGl6
ZShKU0M6OkhhbmRsZQogewogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IHN0YXRpY19jYXN0PEpT
U3RyaW5nKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJ
bXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGNvbnRleHQpOwotICAgIEFTU0VSVF9VTlVT
RUQoanNTdHJpbmcsIG1fd29ybGQtPm1fc3RyaW5nQ2FjaGUuZmluZChzdHJpbmdJbXBsKS0+c2Vj
b25kLmdldCgpID09IGpzU3RyaW5nKTsKKyAgICBBU1NFUlRfVU5VU0VEKGpzU3RyaW5nLCBtX3dv
cmxkLT5tX3N0cmluZ0NhY2hlLmZpbmQoc3RyaW5nSW1wbCktPnNlY29uZC53YXMoanNTdHJpbmcp
KTsKICAgICBtX3dvcmxkLT5tX3N0cmluZ0NhY2hlLnJlbW92ZShzdHJpbmdJbXBsKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9u
IDExMjU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9s
aWN5IHsKICAgICB7CiAgICAgICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQs
IGRvbU9iamVjdCwgd3JhcHBlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VS
VCh3b3JsZC0+bV93cmFwcGVycy5maW5kKGRvbU9iamVjdCktPnNlY29uZC5nZXQoKSA9PSB3cmFw
cGVyKTsKKyAgICAgICAgQVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJzLmZpbmQoZG9tT2JqZWN0KS0+
c2Vjb25kLndhcyh3cmFwcGVyKSk7CiAgICAgICAgIHdvcmxkLT5tX3dyYXBwZXJzLnJlbW92ZShk
b21PYmplY3QpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUN1c3RvbS5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCBp
bmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyCiB7CiAgICAgaWYgKCF3b3Js
ZC0+aXNOb3JtYWwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVCghbm9kZS0+
d3JhcHBlcigpKTsKICAgICBub2RlLT5zZXRXcmFwcGVyKCp3b3JsZC0+Z2xvYmFsRGF0YSgpLCB3
cmFwcGVyLCB3cmFwcGVyT3duZXIod29ybGQsIG5vZGUpLCB3cmFwcGVyQ29udGV4dCh3b3JsZCwg
bm9kZSkpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTEsOCArNTAsNyBAQCBpbmxpbmUgYm9v
bCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NCiB7CiAgICAgaWYgKCF3b3JsZC0+aXNOb3Jt
YWwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVF9VTlVTRUQod3JhcHBlciwg
bm9kZS0+d3JhcHBlcigpID09IHdyYXBwZXIpOwotICAgIG5vZGUtPmNsZWFyV3JhcHBlcigpOwor
ICAgIG5vZGUtPmNsZWFyV3JhcHBlcih3cmFwcGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJD
b25kaXRpb24uY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSgKIHsKICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCi0gICAgaWYgKCFtX2ZpbHRlci5p
c09iamVjdCgpKQorICAgIGlmICghbV9maWx0ZXIgfHwgIW1fZmlsdGVyLT5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKIAogICAgLy8gVGhlIGV4
ZWMgYXJndW1lbnQgaGVyZSBzaG91bGQgb25seSBiZSBudWxsIGlmIHRoaXMgd2FzIGNhbGxlZCBm
cm9tIGEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJs
ZS5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRXcmFwcGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTEgKzQ1LDEzIEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgc2V0V3JhcHBlcihKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNE
T01XcmFwcGVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyLCB2
b2lkKiBjb250ZXh0KQogICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3dyYXBwZXIpOwogICAgICAg
ICBtX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFrPEpTRE9NV3JhcHBlcj4oZ2xvYmFsRGF0YSwgd3Jh
cHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyV3Jh
cHBlcigpCisgICAgdm9pZCBjbGVhcldyYXBwZXIoSlNET01XcmFwcGVyKiB3cmFwcGVyKQogICAg
IHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCh3cmFwcGVyLCBtX3dyYXBwZXIud2FzKHdyYXBwZXIp
KTsKICAgICAgICAgbV93cmFwcGVyLmNsZWFyKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMTI1ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgorCisgICAgICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8
VD4gZmluYWxpemF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04MjY3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVwZGF0ZWQgZm9yIEFQSSBjaGFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TlBSdW50aW1lT2JqZWN0TWFwOjpmaW5hbGl6ZSk6CisKIDIwMTItMDMtMjkgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIxMTI1NTMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5jcHAJKHJldmlz
aW9uIDExMjU3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAKICNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
T2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9TY29wZUNoYWluLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAko
cmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsy
OTIsNyBAQCB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6ZmluYWxpemUoSlNDOjpICiB7CiAgICAg
SGFzaE1hcDxOUE9iamVjdCosIEpTQzo6V2VhazxKU05QT2JqZWN0PiA+OjppdGVyYXRvciBmb3Vu
ZCA9IG1fanNOUE9iamVjdHMuZmluZChzdGF0aWNfY2FzdDxOUE9iamVjdCo+KGNvbnRleHQpKTsK
ICAgICBBU1NFUlQoZm91bmQgIT0gbV9qc05QT2JqZWN0cy5lbmQoKSk7Ci0gICAgQVNTRVJUX1VO
VVNFRChoYW5kbGUsIGFzT2JqZWN0KGhhbmRsZS5nZXQoKSkgPT0gZm91bmQtPnNlY29uZCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGFzT2JqZWN0KGhhbmRsZS5nZXQoKSkgPT0gZm91bmQt
PnNlY29uZC5nZXQoKSk7CiAgICAgSlNOUE9iamVjdCogb2JqZWN0ID0gZm91bmQtPnNlY29uZC5n
ZXQoKTsKICAgICBtX2pzTlBPYmplY3RzLnJlbW92ZShmb3VuZCk7CiAgICAgYWRkVG9JbnZhbGlk
YXRpb25RdWV1ZShvYmplY3QtPmxlYWtOUE9iamVjdCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBl
UGx1Z2luLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck1hcC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvS1VSTC5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL1Njb3BlQ2hhaW4uaD4K
ICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135219</attachid>
            <date>2012-04-02 16:15:16 -0700</date>
            <delta_ts>2012-04-03 13:22:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82670-20120402161411.patch</filename>
            <type>text/plain</type>
            <size>104237</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MiBA
QAorMjAxMi0wMy0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpcnN0IHN0ZXAgdG93YXJkIGluY3JlbWVudGFsIFdlYWs8VD4gZmluYWxpemF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjY3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyBhIFdlYWs8VD4gaGVhcCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBpbmNyZW1l
bnRhbAorICAgICAgICBmaW5hbGl6YXRpb24sIHdoaWxlIG1ha2luZyBhcyBmZXcgYmVoYXZpb3Ig
Y2hhbmdlcyBhcyBwb3NzaWJsZS4gVGhlIGJlaGF2aW9yCisgICAgICAgIGNoYW5nZXMgaXQgbWFr
ZXMgYXJlOgorCisgICAgICAgICgqKSBXZWFrPFQ+J3MgcmF3IEpTVmFsdWUgbm8gbG9uZ2VyIHJl
dmVydHMgdG8gSlNWYWx1ZSgpIGF1dG9tYXRpY2FsbHkgLS0KKyAgICAgICAgaW5zdGVhZCwgYSBz
ZXBhcmF0ZSBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBKU1ZhbHVlIGlzIG5vIGxvbmdlciB2YWxp
ZC4KKyAgICAgICAgKFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgSlNWYWx1ZSBjYW4gYmUg
cHJlc2VydmVkIGZvciBsYXRlciBmaW5hbGl6YXRpb24uKQorICAgICAgICBPYmplY3RzIGRlYWxp
bmcgd2l0aCBXZWFrSW1wbHMgZGlyZWN0bHkgbXVzdCBjaGFuZ2UgdG8gY2hlY2sgdGhlIGZsYWcu
CisKKyAgICAgICAgKCopIFdlYWs8VD4gaXMgbm8gbG9uZ2VyIGEgc3ViY2xhc3Mgb2YgSGFuZGxl
PFQ+LgorCisgICAgICAgICgqKSBET00gR0MgcGVyZm9ybWFuY2UgaXMgZGlmZmVyZW50IC0tIDkl
IGZhc3RlciBpbiB0aGUgZ2VvbWV0cmljIG1lYW4sCisgICAgICAgIGJ1dCAxNSUgc2xvd2VyIGlu
IG9uZSBzcGVjaWZpYyBjYXNlOgorICAgICAgICAgICAgICAgIGdjLWRvbTEuaHRtbDogNiUgIGZh
c3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTIuaHRtbDogMjMlIGZhc3RlcgorICAgICAgICAg
ICAgICAgIGdjLWRvbTMuaHRtbDogMTclIGZhc3RlcgorICAgICAgICAgICAgICAgIGdjLWRvbTQu
aHRtbDogMTUlICpzbG93ZXIqCisKKyAgICAgICAgVGhlIGtleSBmZWF0dXJlcyBvZiB0aGlzIG5l
dyBoZWFwIGFyZToKKworICAgICAgICAoKikgRWFjaCBibG9jayBrbm93cyBpdHMgb3duIHN0YXRl
LCBpbmRlcGVuZGVudCBvZiBhbnkgb3RoZXIgYmxvY2tzLgorCisgICAgICAgICgqKSBFYWNoIGJs
b2NrIGNhY2hlcyBpdHMgb3duIHN3ZWVwIHJlc3VsdC4KKworICAgICAgICAoKikgVGhlIGhlYXAg
dmlzaXRzIGRlYWQgV2VhazxUPnMgYXQgdGhlIGVuZCBvZiBHQy4gKEl0IGRvZXNuJ3QKKyAgICAg
ICAgbWFyayB0aGVtIHlldCwgc2luY2UgdGhhdCB3b3VsZCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4p
CisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tPYmplY3REYXRhOjpmaW5hbGl6ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Ojppbml0KTogVXBkYXRlZCB0byB1c2Ug
dGhlIG5ldyBXZWFrSGVhcCBBUEkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6IFBhaWQgdGhlIGJ1aWxkIHN5c3RlbSB0
YXggc2luY2UgSSBhZGRlZCBzb21lIG5ldyBmaWxlcy4KKworICAgICAgICAqIGhlYXAvSGFuZGxl
Lmg6IE1hZGUgV2Vha0Jsb2NrIGEgZnJpZW5kIGFuZCBleHBvc2VkIHNsb3QoKSBhcyBwdWJsaWMs
CisgICAgICAgIHNvIHdlIGNhbiBrZWVwIHBhc3NpbmcgYSBIYW5kbGU8VD4gdG8gZmluYWxpemVy
cywgdG8gYXZvaWQgbW9yZSBzdXJmYWNlCisgICAgICAgIGFyZWEgY2hhbmdlIGluIHRoaXMgcGF0
Y2guIEEgZm9sbG93LXVwIHBhdGNoIHNob3VsZCBjaGFuZ2UgdGhlIHR5cGUgd2UKKyAgICAgICAg
cGFzcyB0byBmaW5hbGl6ZXJzLgorCisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmNwcDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OndyaXRlQmFycmllcik6Cisg
ICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUpOgorICAgICAgICAqIGhlYXAvSGFu
ZGxlSGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZUhlYXApOgorICAgICAg
ICAoTm9kZSk6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUpOiBSZW1vdmVk
IGFsbCBjb2RlIHJlbGF0ZWQgdG8gV2VhazxUPiwgc2luY2UKKyAgICAgICAgd2UgaGF2ZSBhIHNl
cGFyYXRlIFdlYWtIZWFwIG5vdy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OkhlYXApOiBSZW1vdmVkIG1fZXh0cmFDb3N0IGJlY2F1c2UgZXh0cmEgY29z
dCBpcyBhY2NvdW50ZWQKKyAgICAgICAgZm9yIHRocm91Z2ggb3VyIHdhdGVybWFyayBub3cuIFJl
bW92ZWQgbV93YXRlck1hcmsgYmVjYXVzZSBpdCB3YXMgdW51c2VkLgorCisgICAgICAgIChKU0M6
OkhlYXA6OmRlc3Ryb3kpOiBVcGRhdGVkIGZvciBhZGRpdGlvbiBvZiBXZWFrSGVhcC4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZSk6IENoYW5nZWQg
ZnJvbSB1c2luZyBpdHMgb3duCisgICAgICAgIHZhcmlhYmxlIHRvIHBhcnRpY2lwYXRpbmcgaW4g
dGhlIHdhdGVybWFyayBzdHJhdGVneS4gSSB3YW50ZWQgdG8gc3RhbmRhcmRpemUKKyAgICAgICAg
V2Vha0hlYXAgYW5kIGFsbCBvdGhlciBIZWFwIGNsaWVudHMgb24gdGhpcyBzdHJhdGVneSwgdG8g
bWFrZSBzdXJlIGl0J3MKKyAgICAgICAgYWNjdXJhdGUuCisgCisgICAgICAgIChKU0M6OkhlYXA6
Om1hcmtSb290cyk6IFVwZGF0ZWQgZm9yIGFkZGl0aW9uIG9mIFdlYWtIZWFwLiBBZGRlZCBXZWFr
SGVhcAorICAgICAgICBkZWFkIHZpc2l0IHBhc3MsIGFzIGV4cGxhaW5lZCBhYm92ZS4KKworICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVzZXRBbGxv
Y2F0b3JzKTogVXBkYXRlZCBmb3IgYWRkaXRpb24gb2YgV2Vha0hlYXAuCisKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6RmluYWxpemVyT3du
ZXI6OmZpbmFsaXplKTogVXBkYXRlZCBmb3IgbmV3IFdlYWs8VD4gQVBJLgorCisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndlYWtIZWFwKToKKyAgICAgICAgKEhl
YXApOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1dhdGVyTWFyayk6IEFkZGVkIGEgd2F5IHRv
IHBhcnRpY2lwYXRlIGluIHRoZSB3YXRlcm1hcmtpbmcKKyAgICAgICAgc3RyYXRlZ3ksIHNpbmNl
IHRoaXMgaXMgdGhlIGJlc3Qgd2F5IGZvciBXZWFrSGVhcCB0byByZXBvcnQgaXRzIG1lbW9yeQor
ICAgICAgICBjb3N0LiAoSSBwbGFuIHRvIHVwZGF0ZSB0aGlzIGluIGEgZm9sbG93LXVwIHBhdGNo
IHRvIG1ha2UgaXQgbW9yZSBhY2N1cmF0ZSwKKyAgICAgICAgYnV0IGZvciBub3cgaXQgaXMgbm90
IGxlc3MgYWNjdXJhdGUgdGhhbiBpdCB1c2VkIHRvIGJlLikKKworICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjphZGRUb1dhdGVyTWFyayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpkaWRDb25zdW1lRnJlZUxpc3QpOiBSZW1vdmVkIG1fbnVyc2VyeVdhdGVyTWFyayBiZWNhdXNl
CisgICAgICAgIGl0IHdhcyB1bnVzZWQsIGFuZCBJIGRpZG4ndCB3YW50IHRvIHVwZGF0ZSBXZWFr
SGVhcCB0byBrZWVwIGFuIHVzdXNlZAorICAgICAgICB2YXJpYWJsZSB3b3JraW5nLiBBZGRlZCBB
UEkgZm9yIGFib3ZlLgorCisgICAgICAgICogaGVhcC9QYXNzV2Vhay5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKFdlYWtJbXBsQWNjZXNzb3IpOgorICAgICAgICAoUGFzc1dlYWspOgorICAg
ICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6OjpnZXQpOgorICAgICAgICAo
SlNDOjo6Ondhcyk6CisgICAgICAgIChKU0M6Ojo6UGFzc1dlYWspOgorICAgICAgICAoSlNDOjo6
On5QYXNzV2Vhayk6CisgICAgICAgIChKU0M6OlVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAg
ICAoSlNDOjo6OmxlYWtJbXBsKToKKyAgICAgICAgKEpTQzo6YWRvcHRXZWFrKToKKyAgICAgICAg
KiBoZWFwL1N0cm9uZy5oOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yISk6CisgICAg
ICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKToKKyAgICAgICAgKEpTQzo6U3Ryb25nOjpnZXQpOgorICAgICAgICAqIGhlYXAv
V2Vhay5oOgorICAgICAgICAoV2Vhayk6CisgICAgICAgIChKU0M6Ojo6V2Vhayk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjo6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6Ojp+V2Vhayk6CisgICAgICAgIChKU0M6Ojo6c3dhcCk6CisgICAgICAgIChKU0M6
Oj0pOgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6VW5zcGVjaWZp
ZWRCb29sVHlwZSk6CisgICAgICAgIChKU0M6Ojo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6Ojo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjo6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IExvdHMgb2Yg
Y29kZSBjaGFuZ2VzIGhlcmUsIGJ1dCB0aGV5IGJvaWwKKyAgICAgICAgZG93biB0byB0d28gdGhp
bmdzOgorCisgICAgICAgICgqKSBBbGxvY2F0ZSBXZWFrSW1wbHMgZnJvbSB0aGUgV2Vha0hlYXAg
aW5zdGVhZCBvZiBIYW5kbGVzIGZyb20gdGhlIEhhbmRsZUhlYXAuCisKKyAgICAgICAgKCopIEV4
cGxpY2l0bHkgY2hlY2sgV2Vha0ltcGw6OnN0YXRlKCkgZm9yIG5vbi1saXZlbmVzcyBiZWZvcmUg
cmV0dXJuaW5nCisgICAgICAgIGEgdmFsdWUgKGV4cGxhaW5lZCBhYm92ZSkuCisKKyAgICAgICAg
VGhlc2UgZmlsZXMgaW1wbGVtZW50IHRoZSBuZXcgV2VhazxUPiBoZWFwIGJlaGF2aW9yIGRlc2Ny
aWJlZCBhYm92ZToKKworICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDogQWRkZWQuCisgICAg
ICAgICogaGVhcC9XZWFrQmxvY2suaDogQWRkZWQuCisgICAgICAgICogaGVhcC9XZWFrSGFuZGxl
T3duZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIYW5kbGVPd25lci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBoZWFwL1dlYWtIZWFwLmNwcDogQWRkZWQuCisgICAgICAgICogaGVhcC9X
ZWFrSGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL1dlYWtJbXBsLmg6IEFkZGVkLgorCisg
ICAgICAgIE9uZSBpbnRlcmVzdGluZyBkaWZmZXJlbmNlIGZyb20gdGhlIG9sZCBoZWFwIGlzIHRo
YXQgd2UgZG9uJ3QgYWxsb3cKKyAgICAgICAgY2xpZW50cyB0byBvdmVyd3JpdGUgYSBXZWFrSW1w
bCBhZnRlciBhbGxvY2F0aW5nIGl0LCBhbmQgd2UgZG9uJ3QgcmVjeWNsZQorICAgICAgICBXZWFr
SW1wbHMgcHJpb3IgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBs
YXp5IGZpbmFsaXphdGlvbiwKKyAgICAgICAgYnV0IGl0IHdpbGwgYWxzbyBoZWxwIHVzIGVzYWJs
aXNoIGEgdXNlZnVsIGludmFyaWFudCBpbiB0aGUgZnV0dXJlOiBhbGxvY2F0aW5nCisgICAgICAg
IGEgV2Vha0ltcGwgd2lsbCBiZSBhIGJpbmRpbmcgY29udHJhY3QgdG8gcnVuIGEgZmluYWxpemVy
IGF0IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgIGZ1dHVyZSwgZXZlbiBpZiB0aGUgV2Vha0lt
cGwgaXMgbGF0ZXIgZGVhbGxvY2F0ZWQuCisKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOiBDaGVjayB0aGUgV2Vh
azxUPiBmb3IgISBpbnN0ZWFkIG9mCisgICAgICAgIGl0cyBKU1ZhbHVlLCBzaW5jZSB0aGF0J3Mg
b3VyIEFQSSBjb250cmFjdCBub3csIGFuZCB0aGUgSlNWYWx1ZSBtaWdodAorICAgICAgICBiZSBz
dGFsZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OmpzQ2Fz
dCk6IEFsbG93IGNhc3RpbmcgTlVMTCBwb2ludGVycyBiZWNhdXNlIGl0J3MgdXNlZnVsIGFuZCBo
YXJtbGVzcy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOiBJIGNhbid0IHJlbWVtYmVyIHdoeSBJ
IGRpZCB0aGlzLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOiBJIGhhZCB0byB1cGRhdGUgdGhlc2Ug
Y2xhc3NlcyBiZWNhdXNlIHRoZXkgYWxsb2NhdGUKKyAgICAgICAgYW5kIGRlYWxsb2NhdGUgd2Vh
ayBwb2ludGVycyBtYW51YWxseS4gVGhleSBzaG91bGQgcHJvYmFibHkgc3RvcCBkb2luZyB0aGF0
LgorCiAyMDEyLTAzLTI5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeCBwMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDE5IEBAIFNF
VChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwCisgICAgaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCi0gICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSGVhcC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAg
ICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcAogICAg
IGhlYXAvTWFya2VkU3BhY2UuY3BwCi0gICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAg
ICBoZWFwL01hcmtTdGFjay5jcHAKKyAgICBoZWFwL1dlYWtIZWFwLmNwcAorICAgIGhlYXAvV2Vh
a0hhbmRsZU93bmVyLmNwcAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogCiAgICAgZGVidWdnZXIv
RGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAsNiArMjUwLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIZWFwLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDYgKzIxNyw5IEBACiAgICAgICAgICAgICAnYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAnLAogICAgICAgICAgICAgJ2J5dGVjb21waWxlci9SZWdpc3RlcklELmgnLAogICAgICAgICAg
ICAgJ2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwJywKKyAgICAgICAgICAgICdoZWFwL1dlYWtI
ZWFwLmNwcCcsCisgICAgICAgICAgICAnaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwJywKKyAgICAg
ICAgICAgICdoZWFwL1dlYWtCbG9jay5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlSGVh
cC5jcHAnLAogICAgICAgICAgICAgJ2hlYXAvSGFuZGxlU3RhY2suY3BwJywKICAgICAgICAgICAg
ICdoZWFwL0hlYXAuY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0NvcGllZFNwYWNl
LmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAogICAgIGhlYXAvREZHQ29k
ZUJsb2Nrcy5jcHAgXAorICAgIGhlYXAvV2Vha0hlYXAuY3BwIFwKKyAgICBoZWFwL1dlYWtIYW5k
bGVPd25lci5jcHAgXAorICAgIGhlYXAvV2Vha0Jsb2NrLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVI
ZWFwLmNwcCBcCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw3IEBAIHZvaWQgSlND
YWxsYmFja09iamVjdERhdGE6OmZpbmFsaXplKEhhbmQKICAgICBmb3IgKDsganNDbGFzczsganND
bGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKQogICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6
ZUNhbGxiYWNrIGZpbmFsaXplID0ganNDbGFzcy0+ZmluYWxpemUpCiAgICAgICAgICAgICBmaW5h
bGl6ZSh0aGlzUmVmKTsKLSAgICBIYW5kbGVTbG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwotICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgV2Vha0hl
YXA6OmRlYWxsb2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQog
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTEyNTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNCArMTAyLDExIEBAIHZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojppbml0KEV4ZWMKICAgICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwg
dG9SZWYodGhpcykpOwogICAgIH0KIAotICAgIGJvb2wgbmVlZHNGaW5hbGl6ZXIgPSBmYWxzZTsK
LSAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHIg
JiYgIW5lZWRzRmluYWxpemVyOyBqc0NsYXNzUHRyID0ganNDbGFzc1B0ci0+cGFyZW50Q2xhc3Mp
Ci0gICAgICAgIG5lZWRzRmluYWxpemVyID0ganNDbGFzc1B0ci0+ZmluYWxpemU7Ci0gICAgaWYg
KG5lZWRzRmluYWxpemVyKSB7Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGV4ZWMtPmdsb2Jh
bERhdGEoKS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0
KCksIGNsYXNzUmVmKCkpOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0
ZUJhcnJpZXIoc2xvdCwgdGhpcyk7Ci0gICAgICAgICpzbG90ID0gdGhpczsKKyAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzc1B0ciA9IGNsYXNzUmVmKCk7IGpzQ2xhc3NQdHI7IGpzQ2xhc3NQdHIg
PSBqc0NsYXNzUHRyLT5wYXJlbnRDbGFzcykgeworICAgICAgICBpZiAoanNDbGFzc1B0ci0+Zmlu
YWxpemUpIHsKKyAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLndlYWtIZWFwKCkt
PmFsbG9jYXRlKHRoaXMsIG1fY2FsbGJhY2tPYmplY3REYXRhLmdldCgpLCBjbGFzc1JlZigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2
aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0Jh
c2UueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJD
b21waWxlclZlcnNpb24ueGNjb25maWciCiAKIENPTVBJTEVSX1NQRUNJRklDX1dBUk5JTkdfQ0ZM
QUdTID0gJChDT01QSUxFUl9TUEVDSUZJQ19XQVJOSU5HX0NGTEFHU18kKFRBUkdFVF9HQ0NfVkVS
U0lPTikpOwotQ09NUElMRVJfU1BFQ0lGSUNfV0FSTklOR19DRkxBR1NfTExWTV9DT01QSUxFUiA9
IC1XZ2xvYmFsLWNvbnN0cnVjdG9ycyAtV2V4aXQtdGltZS1kZXN0cnVjdG9yczsKIAogQ0xBTkdf
V0FSTl9DWFgwWF9FWFRFTlNJT05TID0gTk87CiBERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBk
d2FyZjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgko
d29ya2luZyBjb3B5KQpAQCAtNSw5ICs1LDkgQEAgRVhQT1JUUwogICAgID8/JHN0cnRvZEAkMEFA
JDAwQFdURkBAWUFOUEJEUEFQQURAWgogICAgID8/JHN0cnRvZEAkMEFAJDBBQEBXVEZAQFlBTlBC
RFBBUEFEQFoKICAgICA/PzBBcnJheUJ1ZmZlclZpZXdAV1RGQEBJQUVAVj8kUGFzc1JlZlB0ckBW
QXJyYXlCdWZmZXJAV1RGQEBAMUBJQFoKKyAgICA/PzBDb2xsYXRvckBXVEZAQFFBRUBQQkRAWgog
ICAgID8/MENTdHJpbmdAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBC
RElAWgotICAgID8/MENvbGxhdG9yQFdURkBAUUFFQFBCREBaCiAgICAgPz8wRGF0ZUluc3RhbmNl
QEpTQ0BASUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wRGVmYXVs
dEdDQWN0aXZpdHlDYWxsYmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoKICAgICA/PzBEcm9wQWxs
TG9ja3NASlNMb2NrQEpTQ0BAUUFFQFc0SlNMb2NrQmVoYXZpb3JAMkBAWgpAQCAtMjUsMTAgKzI1
LDEwIEBAIEVYUE9SVFMKICAgICA/PzBTdHJpbmdPYmplY3RASlNDQEBJQUVAQUFWSlNHbG9iYWxE
YXRhQDFAUEFWU3RydWN0dXJlQDFAQFoKICAgICA/PzBTdHJ1Y3R1cmVASlNDQEBBQUVAQUFWSlNH
bG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBWSlNWYWx1ZUAxQEFCVlR5cGVJbmZvQDFA
UEJVQ2xhc3NJbmZvQDFAQFoKICAgICA/PzBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVAWFoKLSAg
ICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCREBaCi0gICAgPz8wVVN0cmluZ0BKU0NAQFFBRUBQQkRJ
QFoKICAgICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCX1dAWgogICAgID8/MFVTdHJpbmdASlNDQEBR
QUVAUEJfV0lAWgorICAgID8/MFVTdHJpbmdASlNDQEBRQUVAUEJEQFoKKyAgICA/PzBVU3RyaW5n
QEpTQ0BAUUFFQFBCRElAWgogICAgID8/MFdURlRocmVhZERhdGFAV1RGQEBRQUVAWFoKICAgICA/
PzBZYXJyUGF0dGVybkBZYXJyQEpTQ0BAUUFFQEFCVlVTdHJpbmdAMkBfTjFQQVBCREBaCiAgICAg
Pz8xQXJyYXlCdWZmZXJWaWV3QFdURkBAVUFFQFhaCkBAIC00MiwxNSArNDIsMTAgQEAgRVhQT1JU
UwogICAgID8/MVJlZkNvdW50ZWRMZWFrQ291bnRlckBXVEZAQFFBRUBYWgogICAgID8/MVNvdXJj
ZVByb3ZpZGVyQ2FjaGVASlNDQEBRQUVAWFoKICAgICA/PzFUaHJlYWRDb25kaXRpb25AV1RGQEBR
QUVAWFoKLSAgICA/PzFXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCiAgICAgPz8xV2Vha0hhbmRs
ZU93bmVyQEpTQ0BAVUFFQFhaCisgICAgPz8xV1RGVGhyZWFkRGF0YUBXVEZAQFFBRUBYWgogICAg
ID8/OEpTQ0BAWUFfTkFCVlVTdHJpbmdAMEAwQFoKICAgICA/PzhXVEZAQFlBX05BQlZDU3RyaW5n
QDBAMEBaCi0gICAgP0VjbWFTY3JpcHRDb252ZXJ0ZXJARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJA
ZG91YmxlX2NvbnZlcnNpb25AV1RGQEBTQUFCVjEyM0BYWgotICAgID9Ub0V4cG9uZW50aWFsQERv
dWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0
cmluZ0J1aWxkZXJAMjNAQFoKLSAgICA/VG9GaXhlZEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBk
b3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCi0gICAg
P1RvUHJlY2lzaW9uQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdU
RkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKLSAgICA/VG9TaG9ydGVzdEBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTlBBVlN0cmluZ0J1
aWxkZXJAMjNAQFoKICAgICA/YWJzb2x1dGVUaW1lVG9XYWl0VGltZW91dEludGVydmFsQFdURkBA
WUFLTkBaCiAgICAgP2FjdGl2aXR5Q2FsbGJhY2tASGVhcEBKU0NAQFFBRVBBVkdDQWN0aXZpdHlD
YWxsYmFja0AyQFhaCiAgICAgP2FkZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0
ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCREBaCkBAIC02OSw4ICs2NCw4IEBAIEVYUE9SVFMKICAg
ICA/YWRkU3RhdGljR2xvYmFsc0BKU0dsb2JhbE9iamVjdEBKU0NAQElBRVhQQVVHbG9iYWxQcm9w
ZXJ0eUluZm9AMTJASEBaCiAgICAgP2FsbG9jYXRlUHJvcGVydHlTdG9yYWdlQEpTT2JqZWN0QEpT
Q0BAUUFFWEFBVkpTR2xvYmFsRGF0YUAyQElJQFoKICAgICA/YWxsb2NhdGVTbG93Q2FzZUBNYXJr
ZWRBbGxvY2F0b3JASlNDQEBBQUVQQVhYWgotICAgID9hcHBlbmRAU3RyaW5nQnVpbGRlckBXVEZA
QFFBRVhQQkVJQFoKICAgICA/YXBwZW5kQFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYUEJfV0lAWgor
ICAgID9hcHBlbmRAU3RyaW5nQnVpbGRlckBXVEZAQFFBRVhQQkVJQFoKICAgICA/YXNjaWlAVVN0
cmluZ0BKU0NAQFFCRT9BVkNTdHJpbmdAV1RGQEBYWgogICAgID9hdHRhY2hARGVidWdnZXJASlND
QEBRQUVYUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID9icm9hZGNhc3RAVGhyZWFkQ29uZGl0
aW9uQFdURkBAUUFFWFhaCkBAIC03OCwxMCArNzMsMTAgQEAgRVhQT1JUUwogICAgID9idWZmZXJM
ZW5ndGhGb3JTdHJpbmdFeHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVhaCiAgICAg
P2J5dGVDb21waWxlQFlhcnJASlNDQEBZQT9BVj8kUGFzc093blB0ckBVQnl0ZWNvZGVQYXR0ZXJu
QFlhcnJASlNDQEBAV1RGQEBBQVVZYXJyUGF0dGVybkAxMkBQQVZCdW1wUG9pbnRlckFsbG9jYXRv
ckA0QEBaCiAgICAgP2J5dGVTaXplQFNvdXJjZVByb3ZpZGVyQ2FjaGVASlNDQEBRQkVJWFoKKyAg
ICA/Y2FsY3VsYXRlZEZ1bmN0aW9uTmFtZUBEZWJ1Z2dlckNhbGxGcmFtZUBKU0NAQFFCRT9BVlVT
dHJpbmdAMkBYWgogICAgID9jYWxjdWxhdGVEU1RPZmZzZXRAV1RGQEBZQU5OTkBaCiAgICAgP2Nh
bGN1bGF0ZVN0cmluZ0hhc2hBbmRMZW5ndGhGcm9tVVRGOEBVbmljb2RlQFdURkBAWUFJUEJEMEFB
STFAWgogICAgID9jYWxjdWxhdGVVVENPZmZzZXRAV1RGQEBZQUhYWgotICAgID9jYWxjdWxhdGVk
RnVuY3Rpb25OYW1lQERlYnVnZ2VyQ2FsbEZyYW1lQEpTQ0BAUUJFP0FWVVN0cmluZ0AyQFhaCiAg
ICAgP2NhbGxASlNDQEBZQT9BVkpTVmFsdWVAMUBQQVZFeGVjU3RhdGVAMUBWMjFAVzRDYWxsVHlw
ZUAxQEFCVENhbGxEYXRhQDFAMUFCVkFyZ0xpc3RAMUBAWgogICAgID9jYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvckBKU0NAQFlJX0pQQVZFeGVjU3RhdGVAMUBAWgogICAgID9jYWxsT25NYWlu
VGhyZWFkQFdURkBAWUFYUDZBWFBBWEBaMEBaCkBAIC05MSw4ICs4Niw4IEBAIEVYUE9SVFMKICAg
ICA/Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpT
R2xvYmFsRGF0YUAyQFBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/Y2hlY2tDdXJyZW50SWRlbnRp
ZmllclRhYmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZFeGVjU3RhdGVAMkBAWgogICAgID9jaGVj
a0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkpTR2xvYmFsRGF0
YUAyQEBaCi0gICAgP2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0ZUAxQEFCVlNvdXJj
ZUNvZGVAMUBQQVZKU1ZhbHVlQDFAQFoKICAgICA/Y2hlY2tzdW1ATUQ1QFdURkBAUUFFWEFBVj8k
VmVjdG9yQEUkMEJBQEAyQEBaCisgICAgP2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0
ZUAxQEFCVlNvdXJjZUNvZGVAMUBQQVZKU1ZhbHVlQDFAQFoKICAgICA/Y2xhc3NOYW1lQEpTT2Jq
ZWN0QEpTQ0BAU0E/QVZVU3RyaW5nQDJAUEJWMTJAQFoKICAgICA/Y2xlYXJAU291cmNlUHJvdmlk
ZXJDYWNoZUBKU0NAQFFBRVhYWgogICAgID9jbGVhckJ1aWx0aW5TdHJ1Y3R1cmVzQEpTR2xvYmFs
RGF0YUBKU0NAQFFBRVhYWgpAQCAtMTY0LDYgKzE1OSw3IEBAIEVYUE9SVFMKICAgICA/ZGlzcGxh
eU5hbWVASlNGdW5jdGlvbkBKU0NAQFFBRT9CVlVTdHJpbmdAMkBQQVZFeGVjU3RhdGVAMkBAWgog
ICAgID9kdG9hQFdURkBAWUFYUUFETkFBX05BQUhBQUlAWgogICAgID9kdW1wU2FtcGxlRGF0YUBK
U0dsb2JhbERhdGFASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJAQFoKKyAgICA/RWNtYVNjcmlwdENv
bnZlcnRlckBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNB
QUJWMTIzQFhaCiAgICAgP2VtcHR5QFN0cmluZ0ltcGxAV1RGQEBTQVBBVjEyQFhaCiAgICAgP2Vu
dW1lcmFibGVAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUJFX05YWgogICAgID9lcXVhbFVURjE2
V2l0aFVURjhAVW5pY29kZUBXVEZAQFlBX05QQl9XMFBCRDFAWgpAQCAtMTgzLDYgKzE3OSw3IEBA
IEVYUE9SVFMKICAgICA/ZmFzdFplcm9lZE1hbGxvY0BXVEZAQFlBUEFYSUBaCiAgICAgP2ZpbGxH
ZXR0ZXJQcm9wZXJ0eVNsb3RASlNPYmplY3RASlNDQEBBQUVYQUFWUHJvcGVydHlTbG90QDJAUEFW
PyRXcml0ZUJhcnJpZXJCYXNlQFc0VW5rbm93bkBKU0NAQEAyQEBaCiAgICAgP2ZpbmFsaXplQFdl
YWtIYW5kbGVPd25lckBKU0NAQFVBRVhWPyRIYW5kbGVAVzRVbmtub3duQEpTQ0BAQDJAUEFYQFoK
KyAgICA/ZmluZEFsbG9jYXRvckBXZWFrSGVhcEBKU0NAQEFBRVBBVUZyZWVDZWxsQFdlYWtCbG9j
a0AyQFhaCiAgICAgP2ZpbmlzaENyZWF0aW9uQERhdGVJbnN0YW5jZUBKU0NAQElBRVhBQVZKU0ds
b2JhbERhdGFAMkBOQFoKICAgICA/ZmluaXNoQ3JlYXRpb25ASW50ZXJuYWxGdW5jdGlvbkBKU0NA
QElBRVhBQVZKU0dsb2JhbERhdGFAMkBBQlZJZGVudGlmaWVyQDJAQFoKICAgICA/ZmluaXNoQ3Jl
YXRpb25ASlNBcnJheUBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBJQFoKQEAgLTIyMCwxMCAr
MjE3LDEwIEBAIEVYUE9SVFMKICAgICA/Z2xvYmFsRXhlY0BKU0dsb2JhbE9iamVjdEBKU0NAQFFB
RVBBVkV4ZWNTdGF0ZUAyQFhaCiAgICAgP2dsb2JhbE9iamVjdENvdW50QEhlYXBASlNDQEBRQUVJ
WFoKICAgICA/Z3Jvd0BIYW5kbGVIZWFwQEpTQ0BAQUFFWFhaCisgICAgP2hhc2hTbG93Q2FzZUBT
dHJpbmdJbXBsQFdURkBAQUJFSVhaCiAgICAgP2hhc0luc3RhbmNlQEpTT2JqZWN0QEpTQ0BAU0Ff
TlBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFZKU1ZhbHVlQDJAMkBaCiAgICAgP2hhc1Byb3BlcnR5QEpT
T2JqZWN0QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBBQlZJZGVudGlmaWVyQDJAQFoKICAgICA/
aGFzUHJvcGVydHlASlNPYmplY3RASlNDQEBRQkVfTlBBVkV4ZWNTdGF0ZUAyQElAWgotICAgID9o
YXNoU2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRUlYWgogICAgID9oZWFwQEhlYXBASlNDQEBT
QVBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/aW5jcmVtZW50QFJlZkNvdW50ZWRMZWFrQ291bnRl
ckBXVEZAQFFBRVhYWgogICAgID9pbml0QEF0b21pY1N0cmluZ0BXVEZAQFNBWFhaCkBAIC0zMTEs
MTAgKzMwOCwxMCBAQCBFWFBPUlRTCiAgICAgP3NldE9yZGVyTG93ZXJGaXJzdEBDb2xsYXRvckBX
VEZAQFFBRVhfTkBaCiAgICAgP3NldFByb3RvdHlwZUBKU09iamVjdEBKU0NAQFFBRVhBQVZKU0ds
b2JhbERhdGFAMkBWSlNWYWx1ZUAyQEBaCiAgICAgP3NldFNldHRlckBQcm9wZXJ0eURlc2NyaXB0
b3JASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgorICAgID9zZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9y
QEpTQ0BAUUJFP0FWSlNWYWx1ZUAyQFhaCiAgICAgP3NldFVuZGVmaW5lZEBQcm9wZXJ0eURlc2Ny
aXB0b3JASlNDQEBRQUVYWFoKICAgICA/c2V0VXBTdGF0aWNGdW5jdGlvblNsb3RASlNDQEBZQV9O
UEFWRXhlY1N0YXRlQDFAUEJWSGFzaEVudHJ5QDFAUEFWSlNPYmplY3RAMUBBQlZJZGVudGlmaWVy
QDFAQUFWUHJvcGVydHlTbG90QDFAQFoKICAgICA/c2V0V3JpdGFibGVAUHJvcGVydHlEZXNjcmlw
dG9yQEpTQ0BAUUFFWF9OQFoKLSAgICA/c2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFC
RT9BVkpTVmFsdWVAMkBYWgogICAgID9zaHJpbmtUb0ZpdEBTdHJpbmdCdWlsZGVyQFdURkBAUUFF
WFhaCiAgICAgP3NpZ25hbEBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVYWFoKICAgICA/c2luZ2xl
Q2hhcmFjdGVyU3RyaW5nUmVwQFNtYWxsU3RyaW5nc0BKU0NAQFFBRVBBVlN0cmluZ0ltcGxAV1RG
QEBFQFoKQEAgLTM0MCwxMSArMzM3LDE1IEBAIEVYUE9SVFMKICAgICA/dGxzS2V5Q291bnRAV1RG
QEBZQUFBSlhaCiAgICAgP3Rsc0tleXNAV1RGQEBZQVBBS1haCiAgICAgP3RvQm9vbGVhbkBKU1N0
cmluZ0BKU0NAQFFCRV9OUEFWRXhlY1N0YXRlQDJAQFoKKyAgICA/VG9FeHBvbmVudGlhbEBEb3Vi
bGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJp
bmdCdWlsZGVyQDIzQEBaCisgICAgP1RvRml4ZWRARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91
YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgogICAgID90
b0ludDMyQEpTQ0BAWUFITkBaCiAgICAgP3RvSW50ZWdlckBKU1ZhbHVlQEpTQ0BAUUJFTlBBVkV4
ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyU2xvd0Nhc2VASlNWYWx1ZUBKU0NAQEFCRU5QQVZF
eGVjU3RhdGVAMkBAWgogICAgID90b09iamVjdEBKU0NlbGxASlNDQEBRQkVQQVZKU09iamVjdEAy
QFBBVkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKICAgICA/dG9PYmplY3RTbG93
Q2FzZUBKU1ZhbHVlQEpTQ0BAQUJFUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0ds
b2JhbE9iamVjdEAyQEBaCisgICAgP1RvUHJlY2lzaW9uQERvdWJsZVRvU3RyaW5nQ29udmVydGVy
QGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKKyAg
ICA/VG9TaG9ydGVzdEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBX
VEZAQFFCRV9OTlBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKICAgICA/dG9TdHJpbmdASlNPYmplY3RA
SlNDQEBRQkVQQVZKU1N0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvU3RyaW5nRGVj
aW1hbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKICAgICA/dG9TdHJpbmdFeHBvbmVu
dGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBBX1dJQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lv
biAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjEzMCw2ICsyMTMwLDM0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGhlYXBcV2Vha0Jsb2NrLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrQmxvY2suaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFr
SGVhcC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGhlYXBcV2Vha0hlYXAuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxXZWFrSW1wbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXFdlYWtIYW5kbGVPd25lci5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcV2Vha0hhbmRsZU93bmVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcSGFuZGxlU3RhY2suY3BwIgogCQkJCT4KIAkJCTwv
RmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzEyLDcgKzMxMiwxNCBAQAogCQkxNEM1MjQy
QjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1YnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTY1ODFBMEY0RTM2RjQwMDAxNTBGRCAvKiBKSVRTdHVi
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyRjNEODEzOUY0QkUyMDA0OTEwMzEg
LyogTWFya2VkU3BhY2UuY3BwICovOyB9OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyog
TWFya2VkU3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0RTg0RjlFMTRFRTFBQ0Mw
MEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTRFODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAg
Ki87IH07CisJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0Mw
MEQ2RDVENCAvKiBXZWFrQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFODRGOUIx
NEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmNwcCAqLzsgfTsKKwkJMTRFODRGQTExNEVFMUFD
QzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEU4NEZBMjE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlEMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTlE
MTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc1NkZDNjBFMjAzMUIy
MDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwICovOyB9OworCQkxNEY3MjU2
NTE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjcyNTYzMTRFRTI2NUUwMEIxNjUyQiAv
KiBXZWFrSGFuZGxlT3duZXIuY3BwICovOyB9OworCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIg
LyogV2Vha0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRGOTc0
NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8q
IEhlYXBSb290VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi87IH07CiAJCTQ1MTUzOUI5MTJE
Qzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NTE1MzlCODEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MjUsNyArOTMyLDE0
IEBACiAJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBY3RpdmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0REE4MThGMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBY3RpdmF0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0Ey
IC8qIEpTR2xvYmFsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTR2xvYmFsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRF
ODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWFrQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNEU4NEY5QTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxNEU4NEY5QjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0hlYXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNEU4NEY5QzE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0hlYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRFODRGOUQxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjI1MjU2MEQwOEREOEQwMDRFQ0ZGRiAvKiBKU1Zhcmlh
YmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFyaWFibGVP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRGNzI1NjMxNEVFMjY1RTAw
QjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWFrSGFuZGxlT3duZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEY3MjU2NDE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtIYW5kbGVPd25lci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNEY5NzQ0NjEzOEM4NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RW
aXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBSb290VmlzaXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0MjBCQTlFOEE3MDA4MUU5
RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBW
ZXJzaW9uLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0MzBC
QTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gSmF2YVNjcmlwdENvcmUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY4LDYgKzE1ODIsMTMgQEAKIAkJCQkwRkM4MTUxMjE0MDUxMTg2
MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovLAogCQkJCTBGQzgxNTE0MTQwNTExOEQw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovLAogCQkJCTE0MkUzMTMzMTM0RkYwQTYwMEFG
QURCNSAvKiBXZWFrLmggKi8sCisJCQkJMTRFODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtC
bG9jay5jcHAgKi8sCisJCQkJMTRFODRGOUExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5o
ICovLAorCQkJCTE0RjcyNTYzMTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3Bw
ICovLAorCQkJCTE0RjcyNTY0MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCAq
LywKKwkJCQkxNEU4NEY5QjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0hlYXAuY3BwICovLAorCQkJ
CTE0RTg0RjlDMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSGVhcC5oICovLAorCQkJCTE0RTg0RjlE
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oICovLAogCQkJCTBGMjQyREE1MTNGM0IxQkIw
MDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8sCiAJCQkJMEZDODE1MDgxNDA0
M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICovLAogCQkJCTBGQzgxNTA5
MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8sCkBAIC0yNTA1LDYg
KzI1MjYsMTAgQEAKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQw
MEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0OTcyMDkxMTRFQjgzMTUwMEZFQjFCNyAvKiBQYXNzV2Vhay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMTRFODRGQTExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtIZWFwLmggaW4g
SGVhZGVycyAqLywKKwkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBp
biBIZWFkZXJzICovLAorCQkJCTE0RjcyNTY2MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxl
T3duZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1
QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9y
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDYwLDYgKzMwODUsOSBAQAogCQkJCTg2QjU4MjY5MTRE
Mjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
QjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRFODRGOUUxNEVFMUFDQzAwRDZENUQ0IC8qIFdl
YWtCbG9jay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQg
LyogV2Vha0hlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRGNzI1NjUxNEVFMjY1RTAwQjE2
NTJCIC8qIFdlYWtIYW5kbGVPd25lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0
RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
RkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTVCMTRFRjkwQUQwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCShyZXZpc2lvbiAxMTI1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNiArNTksOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNl
OjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSooKSBjb25zdCB7IHJldHVybiAobV9zbG90ICYmICptX3Nsb3QpID8gcmVpbnRlcnByZXRfY2Fz
dDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOyB9CiAKKyAgICBIYW5kbGVTbG90IHNsb3Qo
KSBjb25zdCB7IHJldHVybiBtX3Nsb3Q7IH0KKwogcHJvdGVjdGVkOgogICAgIEhhbmRsZUJhc2Uo
SGFuZGxlU2xvdCBzbG90KQogICAgICAgICA6IG1fc2xvdChzbG90KQpAQCAtNjcsNyArNjksNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdm9pZCBzd2FwKEhhbmRsZUJhc2UmIG90aGVyKSB7IHN0
ZDo6c3dhcChtX3Nsb3QsIG90aGVyLm1fc2xvdCk7IH0KIAotICAgIEhhbmRsZVNsb3Qgc2xvdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2xvdDsgfQogICAgIHZvaWQgc2V0U2xvdChIYW5kbGVTbG90IHNs
b3QpCiAgICAgewogICAgICAgICBtX3Nsb3QgPSBzbG90OwpAQCAtMTMzLDYgKzEzNCw3IEBAIHBy
b3RlY3RlZDoKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEhhbmRsZUhlYXA7Cisg
ICAgZnJpZW5kIGNsYXNzIFdlYWtCbG9jazsKIAogICAgIHN0YXRpYyBIYW5kbGU8VD4gd3JhcFNs
b3QoSGFuZGxlU2xvdCBzbG90KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZUhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZUhlYXAuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTkgKzMxLDYg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVPd25l
cigpCi17Ci19Ci0KLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFdlYWtIYW5kbGVPd25lcjo6ZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKikKLXsKLX0KLQogSGFuZGxlSGVhcDo6SGFuZGxlSGVhcChKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCiAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fbmV4
dFRvRmluYWxpemUoMCkKQEAgLTczLDYyICs2MCw2IEBAIHZvaWQgSGFuZGxlSGVhcDo6dmlzaXRT
dHJvbmdIYW5kbGVzKEhlYXAKICAgICB9CiB9CiAKLXZvaWQgSGFuZGxlSGVhcDo6dmlzaXRXZWFr
SGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKLXsKLSAgICBTbG90Vmlz
aXRvciYgdmlzaXRvciA9IGhlYXBSb290VmlzaXRvci52aXNpdG9yKCk7Ci0KLSAgICBOb2RlKiBl
bmQgPSBtX3dlYWtMaXN0LmVuZCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2Vha0xpc3Qu
YmVnaW4oKTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBub2RlLT5uZXh0KCkpIHsKLSNpZiBFTkFCTEUo
R0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFpc1ZhbGlkV2Vha05vZGUobm9kZSkpCi0gICAg
ICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IG5vZGUtPnNs
b3QoKS0+YXNDZWxsKCk7Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyID0g
bm9kZS0+d2Vha093bmVyKCk7Ci0gICAgICAgIGlmICghd2Vha093bmVyKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgaWYgKCF3ZWFrT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSwgbm9kZS0+d2Vh
a093bmVyQ29udGV4dCgpLCB2aXNpdG9yKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIGhlYXBSb290VmlzaXRvci52aXNpdChub2RlLT5zbG90KCkpOwotICAgIH0KLX0KLQotdm9p
ZCBIYW5kbGVIZWFwOjpmaW5hbGl6ZVdlYWtIYW5kbGVzKCkKLXsKLSAgICBOb2RlKiBlbmQgPSBt
X3dlYWtMaXN0LmVuZCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2Vha0xpc3QuYmVnaW4o
KTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBtX25leHRUb0ZpbmFsaXplKSB7Ci0gICAgICAgIG1fbmV4
dFRvRmluYWxpemUgPSBub2RlLT5uZXh0KCk7Ci0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0g
ICAgICAgIGlmICghaXNWYWxpZFdlYWtOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsK
LSNlbmRpZgotCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IG5vZGUtPnNsb3QoKS0+YXNDZWxsKCk7
Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGlmIChXZWFrSGFuZGxlT3duZXIqIHdlYWtPd25lciA9IG5vZGUtPndlYWtP
d25lcigpKSB7Ci0gICAgICAgICAgICB3ZWFrT3duZXItPmZpbmFsaXplKEhhbmRsZTxVbmtub3du
Pjo6d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSwgbm9kZS0+d2Vha093bmVyQ29udGV4dCgpKTsKLSAg
ICAgICAgICAgIGlmIChtX25leHRUb0ZpbmFsaXplICE9IG5vZGUtPm5leHQoKSkgLy8gT3duZXIg
ZGVhbGxvY2F0ZWQgbm9kZS4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
I2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBpZiAoIWlzTGl2ZU5vZGUobm9kZSkp
Ci0gICAgICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgICAgICpub2RlLT5zbG90KCkgPSBK
U1ZhbHVlKCk7Ci0gICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUp
OwotICAgICAgICBtX2ltbWVkaWF0ZUxpc3QucHVzaChub2RlKTsKLSAgICB9Ci0gICAgCi0gICAg
bV9uZXh0VG9GaW5hbGl6ZSA9IDA7Ci19Ci0KIHZvaWQgSGFuZGxlSGVhcDo6d3JpdGVCYXJyaWVy
KEhhbmRsZVNsb3Qgc2xvdCwgY29uc3QgSlNWYWx1ZSYgdmFsdWUpCiB7CiAgICAgLy8gRm9yYmlk
IGFzc2lnbm1lbnQgdG8gaGFuZGxlcyBkdXJpbmcgdGhlIGZpbmFsaXphdGlvbiBwaGFzZSwgc2lu
Y2UgaXQgd291bGQgdmlvbGF0ZSBtYW55IEdDIGludmFyaWFudHMuCkBAIC0xNTAsMTUgKzgxLDYg
QEAgdm9pZCBIYW5kbGVIZWFwOjp3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPmlzV2VhaygpKSB7Ci0gICAgICAgIG1fd2Vha0xp
c3QucHVzaChub2RlKTsKLSNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgaWYgKCFp
c0xpdmVOb2RlKG5vZGUpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgbV9zdHJvbmdMaXN0LnB1c2gobm9kZSk7CiAjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCiAgICAgaWYgKCFpc0xpdmVOb2RlKG5vZGUpKQpAQCAtMTg4LDI0ICsx
MTAsNiBAQCBib29sIEhhbmRsZUhlYXA6OmlzTGl2ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0KLWJvb2wgSGFuZGxlSGVhcDo6aXNWYWxpZFdlYWtOb2Rl
KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFpc0xpdmVOb2RlKG5vZGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFub2RlLT5pc1dlYWsoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9ICpub2RlLT5zbG90KCk7Ci0gICAgaWYgKCF2YWx1ZSB8
fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTQ2VsbCog
Y2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgIGlmICghY2VsbCB8fCAhY2VsbC0+c3RydWN0dXJl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQogI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hh
bmRsZUhlYXAuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsNiBAQCBjbGFzcyBK
U0dsb2JhbERhdGE7CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKLWNsYXNz
IEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+V2Vha0hhbmRsZU93bmVyKCk7Ci0gICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0
KTsKLX07Ci0KIGNsYXNzIEhhbmRsZUhlYXAgewogcHVibGljOgogICAgIHN0YXRpYyBIYW5kbGVI
ZWFwKiBoZWFwRm9yKEhhbmRsZVNsb3QpOwpAQCAtNTgsMjAgKzUxLDEwIEBAIHB1YmxpYzoKICAg
ICBIYW5kbGVTbG90IGFsbG9jYXRlKCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3Qp
OwogCi0gICAgdm9pZCBtYWtlV2VhayhIYW5kbGVTbG90LCBXZWFrSGFuZGxlT3duZXIqID0gMCwg
dm9pZCogY29udGV4dCA9IDApOwotICAgIEhhbmRsZVNsb3QgY29weVdlYWsoSGFuZGxlU2xvdCk7
Ci0KICAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2
b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBmaW5hbGl6
ZVdlYWtIYW5kbGVzKCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmll
cihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7CiAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgYm9vbCBoYXNXZWFrT3duZXIoSGFuZGxlU2xvdCwgV2Vha0hhbmRsZU93bmVyKik7Ci0gICAg
Ym9vbCBoYXNGaW5hbGl6ZXIoSGFuZGxlU2xvdCk7Ci0jZW5kaWYKLQogICAgIHVuc2lnbmVkIHBy
b3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hTdHJvbmdIYW5kbGUoRnVuY3RvciYsIGNvbnN0IEhhc2hDb3VudGVk
U2V0PEpTQ2VsbCo+JiBza2lwU2V0KTsKQEAgLTg1LDEyICs2OCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIEhhbmRsZVNsb3Qgc2xvdCgpOwogICAgICAgICBIYW5kbGVIZWFwKiBoYW5kbGVIZWFwKCk7
CiAKLSAgICAgICAgdm9pZCBtYWtlV2VhayhXZWFrSGFuZGxlT3duZXIqLCB2b2lkKiBjb250ZXh0
KTsKLSAgICAgICAgYm9vbCBpc1dlYWsoKTsKLSAgICAgICAgCi0gICAgICAgIFdlYWtIYW5kbGVP
d25lciogd2Vha093bmVyKCk7Ci0gICAgICAgIHZvaWQqIHdlYWtPd25lckNvbnRleHQoKTsKLQog
ICAgICAgICB2b2lkIHNldFByZXYoTm9kZSopOwogICAgICAgICBOb2RlKiBwcmV2KCk7CiAKQEAg
LTk4LDEyICs3NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5leHQoKTsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFdlYWtIYW5kbGVPd25lciogZW1wdHlXZWFrT3duZXIoKTsKLQogICAg
ICAgICBKU1ZhbHVlIG1fdmFsdWU7CiAgICAgICAgIEhhbmRsZUhlYXAqIG1faGFuZGxlSGVhcDsK
LSAgICAgICAgV2Vha0hhbmRsZU93bmVyKiBtX3dlYWtPd25lcjsKLSAgICAgICAgdm9pZCogbV93
ZWFrT3duZXJDb250ZXh0OwogICAgICAgICBOb2RlKiBtX3ByZXY7CiAgICAgICAgIE5vZGUqIG1f
bmV4dDsKICAgICB9OwpAQCAtMTE0LDcgKzg3LDYgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGdyb3coKTsKICAgICAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikgfHwg
IUFTU0VSVF9ESVNBQkxFRAotICAgIGJvb2wgaXNWYWxpZFdlYWtOb2RlKE5vZGUqKTsKICAgICBi
b29sIGlzTGl2ZU5vZGUoTm9kZSopOwogI2VuZGlmCiAKQEAgLTEyMiw3ICs5NCw2IEBAIHByaXZh
dGU6CiAgICAgQmxvY2tTdGFjazxOb2RlPiBtX2Jsb2NrU3RhY2s7CiAKICAgICBTZW50aW5lbExp
bmtlZExpc3Q8Tm9kZT4gbV9zdHJvbmdMaXN0OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2Rl
PiBtX3dlYWtMaXN0OwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPiBtX2ltbWVkaWF0ZUxp
c3Q7CiAgICAgU2luZ2x5TGlua2VkTGlzdDxOb2RlPiBtX2ZyZWVMaXN0OwogICAgIE5vZGUqIG1f
bmV4dFRvRmluYWxpemU7CkBAIC0xNzUsNDkgKzE0Niw4IEBAIGlubGluZSB2b2lkIEhhbmRsZUhl
YXA6OmRlYWxsb2NhdGUoSGFuZGwKICAgICBtX2ZyZWVMaXN0LnB1c2gobm9kZSk7CiB9CiAKLWlu
bGluZSBIYW5kbGVTbG90IEhhbmRsZUhlYXA6OmNvcHlXZWFrKEhhbmRsZVNsb3Qgb3RoZXIpCi17
Ci0gICAgTm9kZSogbm9kZSA9IHRvTm9kZShhbGxvY2F0ZSgpKTsKLSAgICBub2RlLT5tYWtlV2Vh
ayh0b05vZGUob3RoZXIpLT53ZWFrT3duZXIoKSwgdG9Ob2RlKG90aGVyKS0+d2Vha093bmVyQ29u
dGV4dCgpKTsKLSAgICB3cml0ZUJhcnJpZXIobm9kZS0+c2xvdCgpLCAqb3RoZXIpOwotICAgICpu
b2RlLT5zbG90KCkgPSAqb3RoZXI7Ci0gICAgcmV0dXJuIHRvSGFuZGxlKG5vZGUpOwotfQotCi1p
bmxpbmUgdm9pZCBIYW5kbGVIZWFwOjptYWtlV2VhayhIYW5kbGVTbG90IGhhbmRsZSwgV2Vha0hh
bmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgLy8gRm9yYmlkIGFz
c2lnbm1lbnQgdG8gaGFuZGxlcyBkdXJpbmcgdGhlIGZpbmFsaXphdGlvbiBwaGFzZSwgc2luY2Ug
aXQgd291bGQgdmlvbGF0ZSBtYW55IEdDIGludmFyaWFudHMuCi0gICAgLy8gRmlsZSBhIGJ1ZyB3
aXRoIHN0YWNrIHRyYWNlIGlmIHlvdSBoaXQgdGhpcy4KLSAgICBpZiAobV9uZXh0VG9GaW5hbGl6
ZSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGhhbmRsZSk7Ci0g
ICAgbm9kZS0+bWFrZVdlYWsod2Vha093bmVyLCBjb250ZXh0KTsKLQotICAgIFNlbnRpbmVsTGlu
a2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUpOwotICAgIGlmICghKmhhbmRsZSB8fCAhaGFuZGxl
LT5pc0NlbGwoKSkgewotICAgICAgICBtX2ltbWVkaWF0ZUxpc3QucHVzaChub2RlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fd2Vha0xpc3QucHVzaChub2RlKTsKLX0KLQotI2lm
ICFBU1NFUlRfRElTQUJMRUQKLWlubGluZSBib29sIEhhbmRsZUhlYXA6Omhhc1dlYWtPd25lcihI
YW5kbGVTbG90IGhhbmRsZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIpCi17Ci0gICAgcmV0
dXJuIHRvTm9kZShoYW5kbGUpLT53ZWFrT3duZXIoKSA9PSB3ZWFrT3duZXI7Ci19Ci0KLWlubGlu
ZSBib29sIEhhbmRsZUhlYXA6Omhhc0ZpbmFsaXplcihIYW5kbGVTbG90IGhhbmRsZSkKLXsKLSAg
ICByZXR1cm4gdG9Ob2RlKGhhbmRsZSktPndlYWtPd25lcigpOwotfQotI2VuZGlmCi0KIGlubGlu
ZSBIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKEhhbmRsZUhlYXAqIGhhbmRsZUhlYXApCiAgICAgOiBt
X2hhbmRsZUhlYXAoaGFuZGxlSGVhcCkKLSAgICAsIG1fd2Vha093bmVyKDApCi0gICAgLCBtX3dl
YWtPd25lckNvbnRleHQoMCkKICAgICAsIG1fcHJldigwKQogICAgICwgbV9uZXh0KDApCiB7CkBA
IC0yMjUsOCArMTU1LDYgQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVh
cAogCiBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShXVEY6OlNlbnRpbmVsVGFnKQogICAg
IDogbV9oYW5kbGVIZWFwKDApCi0gICAgLCBtX3dlYWtPd25lcigwKQotICAgICwgbV93ZWFrT3du
ZXJDb250ZXh0KDApCiAgICAgLCBtX3ByZXYoMCkKICAgICAsIG1fbmV4dCgwKQogewpAQCAtMjQy
LDI4ICsxNzAsNiBAQCBpbmxpbmUgSGFuZGxlSGVhcCogSGFuZGxlSGVhcDo6Tm9kZTo6aGFuCiAg
ICAgcmV0dXJuIG1faGFuZGxlSGVhcDsKIH0KIAotaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6Tm9k
ZTo6bWFrZVdlYWsoV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCi17
Ci0gICAgbV93ZWFrT3duZXIgPSB3ZWFrT3duZXIgPyB3ZWFrT3duZXIgOiBlbXB0eVdlYWtPd25l
cigpOwotICAgIG1fd2Vha093bmVyQ29udGV4dCA9IGNvbnRleHQ7Ci19Ci0KLWlubGluZSBib29s
IEhhbmRsZUhlYXA6Ok5vZGU6OmlzV2VhaygpCi17Ci0gICAgcmV0dXJuIG1fd2Vha093bmVyOyAv
LyBUcnVlIGZvciBlbXB0eVdlYWtPd25lcigpLgotfQotCi1pbmxpbmUgV2Vha0hhbmRsZU93bmVy
KiBIYW5kbGVIZWFwOjpOb2RlOjp3ZWFrT3duZXIoKQotewotICAgIHJldHVybiBtX3dlYWtPd25l
ciA9PSBlbXB0eVdlYWtPd25lcigpID8gMCA6IG1fd2Vha093bmVyOyAvLyAwIGZvciBlbXB0eVdl
YWtPd25lcigpLgotfQotCi1pbmxpbmUgdm9pZCogSGFuZGxlSGVhcDo6Tm9kZTo6d2Vha093bmVy
Q29udGV4dCgpCi17Ci0gICAgQVNTRVJUKHdlYWtPd25lcigpKTsKLSAgICByZXR1cm4gbV93ZWFr
T3duZXJDb250ZXh0OwotfQotCiBpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjpOb2RlOjpzZXRQcmV2
KE5vZGUqIHByZXYpCiB7CiAgICAgbV9wcmV2ID0gcHJldjsKQEAgLTI4NCwxMyArMTkwLDYgQEAg
aW5saW5lIEhhbmRsZUhlYXA6Ok5vZGUqIEhhbmRsZUhlYXA6Ok5vZAogICAgIHJldHVybiBtX25l
eHQ7CiB9CiAKLS8vIFNlbnRpbmVsIHRvIGluZGljYXRlIHRoYXQgYSBub2RlIGlzIHdlYWssIGJ1
dCBpdHMgb3duZXIgaGFzIG5vIG1lYW5pbmdmdWwKLS8vIGNhbGxiYWNrcy4gVGhpcyBhbGxvd3Mg
dXMgdG8gb3B0aW1pemUgYnkgc2tpcHBpbmcgc3VjaCBub2Rlcy4KLWlubGluZSBXZWFrSGFuZGxl
T3duZXIqIEhhbmRsZUhlYXA6Ok5vZGU6OmVtcHR5V2Vha093bmVyKCkKLXsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxXZWFrSGFuZGxlT3duZXIqPigtMSk7Ci19Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgSGFuZGxlSGVhcDo6Zm9yRWFjaFN0cm9uZ0hhbmRsZShGdW5j
dG9yJiBmdW5jdG9yLCBjb25zdCBIYXNoQ291bnRlZFNldDxKU0NlbGwqPiYgc2tpcFNldCkKIHsK
ICAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMywxOCArMzEzLDE3IEBAIEhl
YXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEKICAgICA6IG1faGVhcFNpemUo
aGVhcFNpemUpCiAgICAgLCBtX21pbkJ5dGVzUGVyQ3ljbGUoaGVhcFNpemVGb3JIaW50KGhlYXBT
aXplKSkKICAgICAsIG1fbGFzdEZ1bGxHQ1NpemUoMCkKLSAgICAsIG1fd2F0ZXJNYXJrKDApCiAg
ICAgLCBtX2hpZ2hXYXRlck1hcmsobV9taW5CeXRlc1BlckN5Y2xlKQogICAgICwgbV9vcGVyYXRp
b25JblByb2dyZXNzKE5vT3BlcmF0aW9uKQogICAgICwgbV9vYmplY3RTcGFjZSh0aGlzKQogICAg
ICwgbV9zdG9yYWdlU3BhY2UodGhpcykKICAgICAsIG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxk
UXVpdChmYWxzZSkKLSAgICAsIG1fZXh0cmFDb3N0KDApCiAgICAgLCBtX21hcmtMaXN0U2V0KDAp
CiAgICAgLCBtX2FjdGl2aXR5Q2FsbGJhY2soRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3Jl
YXRlKHRoaXMpKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQogICAgICwgbV9zaGFyZWRE
YXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX3Nsb3RWaXNpdG9yKG1fc2hhcmVkRGF0YSkKKyAgICAs
IG1fd2Vha0hlYXAodGhpcykKICAgICAsIG1faGFuZGxlSGVhcChnbG9iYWxEYXRhKQogICAgICwg
bV9pc1NhZmVUb0NvbGxlY3QoZmFsc2UpCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
QEAgLTM3Niw3ICszNzUsNyBAQCB2b2lkIEhlYXA6OmRlc3Ryb3koKQogICAgIGNhbm9uaWNhbGl6
ZUNlbGxMaXZlbmVzc0RhdGEoKTsKICAgICBjbGVhck1hcmtzKCk7CiAKLSAgICBtX2hhbmRsZUhl
YXAuZmluYWxpemVXZWFrSGFuZGxlcygpOworICAgIG1fd2Vha0hlYXAuZmluYWxpemVBbGwoKTsK
ICAgICBtX2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5maW5hbGl6ZVNtYWxsU3RyaW5ncygpOwog
ICAgIHNocmluaygpOwogICAgIG1fc3RvcmFnZVNwYWNlLmRlc3Ryb3koKTsKQEAgLTQ2Niw5ICs0
NjUsNyBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdFNsb3dDYXNlCiAgICAgLy8g
aWYgYSBsYXJnZSB2YWx1ZSBzdXJ2aXZlcyBvbmUgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGVyZSBp
cyBub3QgbXVjaCBwb2ludCB0bwogICAgIC8vIGNvbGxlY3RpbmcgbW9yZSBmcmVxdWVudGx5IGFz
IGxvbmcgYXMgaXQgc3RheXMgYWxpdmUuCiAKLSAgICBpZiAobV9leHRyYUNvc3QgPiBtYXhFeHRy
YUNvc3QgJiYgbV9leHRyYUNvc3QgPiBoaWdoV2F0ZXJNYXJrKCkgLyAyKQotICAgICAgICBjb2xs
ZWN0QWxsR2FyYmFnZSgpOwotICAgIG1fZXh0cmFDb3N0ICs9IGNvc3Q7CisgICAgYWRkVG9XYXRl
ck1hcmsoY29zdCk7CiB9CiAKIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCkBAIC02ODcs
MTIgKzY4NCwxMiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICNlbmRpZgog
ICAgIH0KIAotICAgIC8vIFdlYWsgaGFuZGxlcyBtdXN0IGJlIG1hcmtlZCBsYXN0LCBiZWNhdXNl
IHRoZWlyIG93bmVycyB1c2UgdGhlIHNldCBvZgotICAgIC8vIG9wYXF1ZSByb290cyB0byBkZXRl
cm1pbmUgcmVhY2hhYmlsaXR5LgorICAgIC8vIFdlYWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtl
ZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVwZW5kcyBvbgorICAgIC8vIHRoZSBsaXZl
bmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgogICAgIHsKLSAgICAgICAgR0NQ
SEFTRShWaXNpdGluZ1dlYWtIYW5kbGVzKTsKKyAgICAgICAgR0NQSEFTRShWaXNpdGluZ0xpdmVX
ZWFrSGFuZGxlcyk7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBtX2hhbmRs
ZUhlYXAudmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICAgICAgbV93
ZWFrSGVhcC52aXNpdExpdmVXZWFrSW1wbHMoaGVhcFJvb3RWaXNpdG9yKTsKICAgICAgICAgICAg
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzA1LDYgKzcwMiwyMCBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KKworICAgIHsKKyAgICAgICAgR0NQSEFTRShWaXNpdGluZ0RlYWRXZWFrSGFuZGxlcyk7Cisg
ICAgICAgIG1fd2Vha0hlYXAudmlzaXREZWFkV2Vha0ltcGxzKGhlYXBSb290VmlzaXRvcik7CisK
KyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKHZpc2l0
b3IpOworICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOworI2lmIEVOQUJMRShQ
QVJBTExFTF9HQykKKyAgICAgICAgICAgIHZpc2l0b3IuZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNp
dG9yOjpNYXN0ZXJEcmFpbik7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKwogICAgIEdDQ09V
TlRFUihWaXNpdGVkVmFsdWVDb3VudCwgdmlzaXRvci52aXNpdENvdW50KCkpOwogCiAgICAgdmlz
aXRvci5kb25lQ29weWluZygpOwpAQCAtODA1LDcgKzgxNiw3IEBAIHZvaWQgSGVhcDo6Y29sbGVj
dChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAgICAgCiAgICAgewogICAgICAgICBHQ1BIQVNF
KEZpbmFsaXplV2Vha0hhbmRsZXMpOwotICAgICAgICBtX2hhbmRsZUhlYXAuZmluYWxpemVXZWFr
SGFuZGxlcygpOworICAgICAgICBtX3dlYWtIZWFwLnN3ZWVwKCk7CiAgICAgICAgIG1fZ2xvYmFs
RGF0YS0+c21hbGxTdHJpbmdzLmZpbmFsaXplU21hbGxTdHJpbmdzKCk7CiAgICAgfQogICAgIApA
QCAtODM2LDcgKzg0Nyw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRv
Z2cKICAgICBzaXplX3QgcHJvcG9ydGlvbmFsQnl0ZXMgPSAyICogbmV3U2l6ZTsKICAgICBpZiAo
ZnVsbEdDKSB7CiAgICAgICAgIG1fbGFzdEZ1bGxHQ1NpemUgPSBuZXdTaXplOwotICAgICAgICBz
ZXRIaWdoV2F0ZXJNYXJrKG1heChwcm9wb3J0aW9uYWxCeXRlcywgbV9taW5CeXRlc1BlckN5Y2xl
KSk7CisgICAgICAgIG1faGlnaFdhdGVyTWFyayA9IG1heChwcm9wb3J0aW9uYWxCeXRlcywgbV9t
aW5CeXRlc1BlckN5Y2xlKTsKICAgICB9CiAgICAgZG91YmxlIGxhc3RHQ0VuZFRpbWUgPSBXVEY6
OmN1cnJlbnRUaW1lKCk7CiAgICAgbV9sYXN0R0NMZW5ndGggPSBsYXN0R0NFbmRUaW1lIC0gbGFz
dEdDU3RhcnRUaW1lOwpAQCAtODUyLDggKzg2Myw4IEBAIHZvaWQgSGVhcDo6Y2Fub25pY2FsaXpl
Q2VsbExpdmVuZXNzRGF0YSgKIAogdm9pZCBIZWFwOjpyZXNldEFsbG9jYXRvcnMoKQogewotICAg
IG1fZXh0cmFDb3N0ID0gMDsKICAgICBtX29iamVjdFNwYWNlLnJlc2V0QWxsb2NhdG9ycygpOwor
ICAgIG1fd2Vha0hlYXAucmVzZXRBbGxvY2F0b3IoKTsKIH0KIAogdm9pZCBIZWFwOjpzZXRBY3Rp
dml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxi
YWNrKQpAQCAtOTE0LDE1ICs5MjUsMTUgQEAgdm9pZCBIZWFwOjpyZWxlYXNlRnJlZUJsb2Nrcygp
CiAKIHZvaWQgSGVhcDo6YWRkRmluYWxpemVyKEpTQ2VsbCogY2VsbCwgRmluYWxpemVyIGZpbmFs
aXplcikKIHsKLSAgICBXZWFrPEpTQ2VsbD4gd2VhaygqZ2xvYmFsRGF0YSgpLCBjZWxsLCAmbV9m
aW5hbGl6ZXJPd25lciwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmluYWxpemVyKSk7Ci0gICAg
d2Vhay5sZWFrSGFuZGxlKCk7IC8vIEJhbGFuY2VkIGJ5IEZpbmFsaXplck93bmVyOjpmaW5hbGl6
ZSgpLgorICAgIHdlYWtIZWFwKCktPmFsbG9jYXRlKGNlbGwsICZtX2ZpbmFsaXplck93bmVyLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihmaW5hbGl6ZXIpKTsgLy8gQmFsYW5jZWQgYnkgRmluYWxp
emVyT3duZXI6OmZpbmFsaXplKCkuCiB9CiAKIHZvaWQgSGVhcDo6RmluYWxpemVyT3duZXI6OmZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgV2Vh
azxKU0NlbGw+IHdlYWsoV2VhazxKU0NlbGw+OjpBZG9wdCwgaGFuZGxlKTsKKyAgICBIYW5kbGVT
bG90IHNsb3QgPSBoYW5kbGUuc2xvdCgpOwogICAgIEZpbmFsaXplciBmaW5hbGl6ZXIgPSByZWlu
dGVycHJldF9jYXN0PEZpbmFsaXplcj4oY29udGV4dCk7Ci0gICAgZmluYWxpemVyKHdlYWsuZ2V0
KCkpOworICAgIGZpbmFsaXplcihzbG90LT5hc0NlbGwoKSk7CisgICAgV2Vha0hlYXA6OmRlYWxs
b2NhdGUoV2Vha0ltcGw6OmFzV2Vha0ltcGwoc2xvdCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsOCBAQAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiTWFya2Vk
U3BhY2UuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIldlYWtIYW5kbGVP
d25lci5oIgorI2luY2x1ZGUgIldlYWtIZWFwLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyU3Vw
cG9ydC5oIgogI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KQEAgLTEzMywxMSArMTM1LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBl
IGZvckVhY2hQcm90ZWN0ZWRDZWxsKEZ1bmN0b3ImKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVk
Q2VsbCgpOwogCisgICAgICAgIFdlYWtIZWFwKiB3ZWFrSGVhcCgpIHsgcmV0dXJuICZtX3dlYWtI
ZWFwOyB9CiAgICAgICAgIEhhbmRsZUhlYXAqIGhhbmRsZUhlYXAoKSB7IHJldHVybiAmbV9oYW5k
bGVIZWFwOyB9CiAgICAgICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZt
X2hhbmRsZVN0YWNrOyB9CiAKICAgICAgICAgdm9pZCBnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJv
b3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKTsKIAorICAgICAgICB2b2lkIGFkZFRvV2F0ZXJN
YXJrKHNpemVfdCk7CisKICAgICAgICAgZG91YmxlIGxhc3RHQ0xlbmd0aCgpIHsgcmV0dXJuIG1f
bGFzdEdDTGVuZ3RoOyB9CiAKICAgICBwcml2YXRlOgpAQCAtMTU1LDcgKzE2MCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHNpemVfdCB3YXRlck1hcmsoKTsKICAgICAgICAgc2l6ZV90
IGhpZ2hXYXRlck1hcmsoKTsKLSAgICAgICAgdm9pZCBzZXRIaWdoV2F0ZXJNYXJrKHNpemVfdCk7
CiAgICAgICAgIGJvb2wgc2hvdWxkQ29sbGVjdCgpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbWluRXh0cmFDb3N0ID0gMjU2OwpAQCAtMTk5LDcgKzIwMyw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjb25zdCBIZWFwU2l6ZSBtX2hlYXBTaXplOwogICAgICAgICBjb25zdCBz
aXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwogICAgICAgICBzaXplX3QgbV9sYXN0RnVsbEdDU2l6
ZTsKLSAgICAgICAgc2l6ZV90IG1fd2F0ZXJNYXJrOwogICAgICAgICBzaXplX3QgbV9oaWdoV2F0
ZXJNYXJrOwogICAgICAgICAKICAgICAgICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBtX29wZXJhdGlv
bkluUHJvZ3Jlc3M7CkBAIC0yMTgsOCArMjIxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZUYWJsZVNwZWN0cnVtIG1fZGVzdHJveWVkVHlwZUNvdW50czsKICNlbmRpZgogCi0gICAgICAg
IHNpemVfdCBtX2V4dHJhQ29zdDsKLQogICAgICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0
ZWRWYWx1ZXM7CiAgICAgICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogPiBtX3Rl
bXBTb3J0aW5nVmVjdG9yczsKICAgICAgICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+
KiBtX21hcmtMaXN0U2V0OwpAQCAtMjMxLDYgKzIzMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhIG1fc2hhcmVkRGF0YTsKICAgICAgICAgU2xv
dFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKIAorICAgICAgICBXZWFrSGVhcCBtX3dlYWtIZWFwOwog
ICAgICAgICBIYW5kbGVIZWFwIG1faGFuZGxlSGVhcDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9o
YW5kbGVTdGFjazsKICAgICAgICAgREZHQ29kZUJsb2NrcyBtX2RmZ0NvZGVCbG9ja3M7CkBAIC0y
OTMsOSArMjk1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9oaWdoV2F0
ZXJNYXJrOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEhlYXA6OnNldEhpZ2hXYXRlck1hcmso
c2l6ZV90IG5ld0hpZ2hXYXRlck1hcmspCisgICAgaW5saW5lIHZvaWQgSGVhcDo6YWRkVG9XYXRl
ck1hcmsoc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICBtX2hpZ2hXYXRlck1hcmsgPSBuZXdI
aWdoV2F0ZXJNYXJrOworICAgICAgICBtX29iamVjdFNwYWNlLmFkZFRvV2F0ZXJNYXJrKHNpemUp
OworICAgICAgICBpZiAod2F0ZXJNYXJrKCkgPiBoaWdoV2F0ZXJNYXJrKCkpCisgICAgICAgICAg
ICBjb2xsZWN0KERvTm90U3dlZXApOwogICAgIH0KIAogI2lmIEVOQUJMRShHR0MpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAxMTI1
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAgY2xhc3MgU3RydWN0dXJlOwogCiBNYXJrZWRTcGFj
ZTo6TWFya2VkU3BhY2UoSGVhcCogaGVhcCkKICAgICA6IG1fd2F0ZXJNYXJrKDApCi0gICAgLCBt
X251cnNlcnlXYXRlck1hcmsoMCkKICAgICAsIG1faGVhcChoZWFwKQogewogICAgIGZvciAoc2l6
ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNl
bGxTaXplICs9IHByZWNpc2VTdGVwKSB7CkBAIC00OSw3ICs0OCw2IEBAIE1hcmtlZFNwYWNlOjpN
YXJrZWRTcGFjZShIZWFwKiBoZWFwKQogdm9pZCBNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3Jz
KCkKIHsKICAgICBtX3dhdGVyTWFyayA9IDA7Ci0gICAgbV9udXJzZXJ5V2F0ZXJNYXJrID0gMDsK
IAogICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHBy
ZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7CiAgICAgICAgIGFsbG9jYXRv
ckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CiAKICAgICBzaXpl
X3Qgd2F0ZXJNYXJrKCk7Ci0gICAgc2l6ZV90IG51cnNlcnlXYXRlck1hcmsoKTsKKyAgICB2b2lk
IGFkZFRvV2F0ZXJNYXJrKHNpemVfdCk7CiAKICAgICB0eXBlZGVmIEhhc2hTZXQ8TWFya2VkQmxv
Y2sqPjo6aXRlcmF0b3IgQmxvY2tJdGVyYXRvcjsKICAgICAKQEAgLTc3LDYgKzc3LDcgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgc2hyaW5rKCk7CiAgICAgdm9pZCBmcmVlQmxvY2tzKE1hcmtl
ZEJsb2NrKiBoZWFkKTsKKwogICAgIHZvaWQgZGlkQWRkQmxvY2soTWFya2VkQmxvY2sqKTsKICAg
ICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdChNYXJrZWRCbG9jayopOwogCkBAIC0xMDIsNyArMTAz
LDYgQEAgcHJpdmF0ZToKICAgICBTdWJzcGFjZSBtX25vcm1hbFNwYWNlOwogCiAgICAgc2l6ZV90
IG1fd2F0ZXJNYXJrOwotICAgIHNpemVfdCBtX251cnNlcnlXYXRlck1hcms7CiAgICAgSGVhcCog
bV9oZWFwOwogICAgIE1hcmtlZEJsb2NrU2V0IG1fYmxvY2tzOwogfTsKQEAgLTExMiw5ICsxMTIs
OSBAQCBpbmxpbmUgc2l6ZV90IE1hcmtlZFNwYWNlOjp3YXRlck1hcmsoKQogICAgIHJldHVybiBt
X3dhdGVyTWFyazsKIH0KIAotaW5saW5lIHNpemVfdCBNYXJrZWRTcGFjZTo6bnVyc2VyeVdhdGVy
TWFyaygpCitpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6YWRkVG9XYXRlck1hcmsoc2l6ZV90IHNp
emUpCiB7Ci0gICAgcmV0dXJuIG1fbnVyc2VyeVdhdGVyTWFyazsKKyAgICBtX3dhdGVyTWFyayAr
PSBzaXplOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUg
RnVuY3Rvcjo6UmV0dXJuVHlwZSBNYXJrZWRTcGFjZTo6Zm9yRWFjaENlbGwoRnVuY3RvciYgZnVu
Y3RvcikKQEAgLTE5OSw3ICsxOTksNiBAQCBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6ZGlkQWRk
QmxvY2soTWFyCiAKIGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpkaWRDb25zdW1lRnJlZUxpc3Qo
TWFya2VkQmxvY2sqIGJsb2NrKQogewotICAgIG1fbnVyc2VyeVdhdGVyTWFyayArPSBibG9jay0+
Y2FwYWNpdHkoKSAtIGJsb2NrLT5zaXplKCk7CiAgICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNh
cGFjaXR5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NXZWFr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFzc1dlYWsuaAko
cmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFzc1dlYWsu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBQYXNzV2Vha19oCiAj
ZGVmaW5lIFBhc3NXZWFrX2gKIAorI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW5jbHVkZSAiSGFuZGxlLmgiCiAjaW5jbHVkZSA8d3RmL051bGxQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgogCkBAIC0zNSw2MSArMzUsMTY0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1dlYWs7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNz
V2VhazxUPiBhZG9wdFdlYWsoSGFuZGxlU2xvdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNz
V2VhazxUPiBhZG9wdFdlYWsoV2Vha0ltcGwqKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgUGFzc1dlYWsgOiBwdWJsaWMgSGFuZGxlPFQ+IHsKLSAgICB1c2luZyBIYW5kbGU8VD46OnNs
b3Q7Ci0gICAgdXNpbmcgSGFuZGxlPFQ+OjpzZXRTbG90OwordGVtcGxhdGU8dHlwZW5hbWUgQmFz
ZSwgdHlwZW5hbWUgVD4gY2xhc3MgV2Vha0ltcGxBY2Nlc3NvciB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBUKiBHZXRUeXBlOworCisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0OworICAgIFQmIG9w
ZXJhdG9yKigpIGNvbnN0OworICAgIEdldFR5cGUgZ2V0KCkgY29uc3Q7CisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgYm9vbCB3YXMoR2V0VHlwZSkgY29uc3Q7CisjZW5kaWYKK307CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEJhc2U+IGNsYXNzIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93
bj4gewogcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5
cGUgRXh0ZXJuYWxUeXBlOworICAgIHR5cGVkZWYgSlNWYWx1ZSBHZXRUeXBlOwogCi0gICAgUGFz
c1dlYWsoKSA6IEhhbmRsZTxUPigpIHsgfQotICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KSA6
IEhhbmRsZTxUPigpIHsgfQorICAgIGNvbnN0IEpTVmFsdWUqIG9wZXJhdG9yLT4oKSBjb25zdDsK
KyAgICBjb25zdCBKU1ZhbHVlJiBvcGVyYXRvciooKSBjb25zdDsKKyAgICBHZXRUeXBlIGdldCgp
IGNvbnN0OworfTsKIAotICAgIFBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0
ZXJuYWxUeXBlIGV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpLCBXZWFrSGFuZGxlT3duZXIq
IHdlYWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQotICAgICAgICA6IEhhbmRsZTxUPihn
bG9iYWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpKQotICAgIHsKLSAgICAgICAg
SGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5tYWtlV2VhayhzbG90KCksIHdlYWtPd25lciwg
Y29udGV4dCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBIYW5kbGVUeXBlczxUPjo6dG9KU1Zh
bHVlKGV4dGVybmFsVHlwZSk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+
d3JpdGVCYXJyaWVyKHNsb3QoKSwgdmFsdWUpOwotICAgICAgICAqc2xvdCgpID0gdmFsdWU7Ci0g
ICAgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1dlYWsgOiBwdWJsaWMgV2Vha0lt
cGxBY2Nlc3NvcjxQYXNzV2VhazxUPiwgVD4geworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBX
ZWFrSW1wbEFjY2Vzc29yPFBhc3NXZWFrPFQ+LCBUPjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFdl
YWtJbXBsQWNjZXNzb3I8UGFzc1dlYWs8VD4sIFQ+OjpHZXRUeXBlIEdldFR5cGU7CisKKyAgICBQ
YXNzV2VhaygpOworICAgIFBhc3NXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBQYXNzV2VhayhK
U0dsb2JhbERhdGEmLCBHZXRUeXBlID0gR2V0VHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqID0gMCwg
dm9pZCogY29udGV4dCA9IDApOwogCiAgICAgLy8gSXQgc29tZXdoYXQgYnJlYWtzIHRoZSB0eXBl
IHN5c3RlbSB0byBhbGxvdyB0cmFuc2ZlciBvZiBvd25lcnNoaXAgb3V0IG9mCiAgICAgLy8gYSBj
b25zdCBQYXNzV2Vhay4gSG93ZXZlciwgaXQgbWFrZXMgaXQgbXVjaCBlYXNpZXIgdG8gd29yayB3
aXRoIFBhc3NXZWFrCiAgICAgLy8gdGVtcG9yYXJpZXMsIGFuZCB3ZSBkb24ndCBoYXZlIGEgbmVl
ZCB0byB1c2UgcmVhbCBjb25zdCBQYXNzV2Vha3MgYW55d2F5LgotICAgIFBhc3NXZWFrKGNvbnN0
IFBhc3NXZWFrJiBvKSA6IEhhbmRsZTxUPihvLmxlYWtIYW5kbGUoKSkgeyB9Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gUGFzc1dlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG8pIDogSGFuZGxlPFQ+
KG8ubGVha0hhbmRsZSgpKSB7IH0KKyAgICBQYXNzV2Vhayhjb25zdCBQYXNzV2VhayYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+Jik7CisKKyAg
ICB+UGFzc1dlYWsoKTsKIAotICAgIH5QYXNzV2VhaygpCi0gICAgewotICAgICAgICBpZiAoIXNs
b3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihz
bG90KCkpLT5kZWFsbG9jYXRlKHNsb3QoKSk7Ci0gICAgICAgIHNldFNsb3QoMCk7Ci0gICAgfQor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CiAKLSAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29u
c3QgeyByZXR1cm4gIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdChzbG90KCkpOyB9CisgICAg
Ly8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRv
IGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgSlNWYWx1
ZSAoUGFzc1dlYWs6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNp
ZmllZEJvb2xUeXBlKigpIGNvbnN0OwogCi0gICAgSGFuZGxlU2xvdCBsZWFrSGFuZGxlKCkgY29u
c3QgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdlYWtJbXBsKiBsZWFrSW1wbCgpIGNvbnN0IFdB
Uk5fVU5VU0VEX1JFVFVSTjsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgUGFzc1dlYWsgYWRvcHRX
ZWFrPFQ+KEhhbmRsZVNsb3QpOworICAgIGZyaWVuZCBQYXNzV2VhayBhZG9wdFdlYWs8VD4oV2Vh
a0ltcGwqKTsKKyAgICBleHBsaWNpdCBQYXNzV2VhayhXZWFrSW1wbCopOwogCi0gICAgZXhwbGlj
aXQgUGFzc1dlYWsoSGFuZGxlU2xvdCBzbG90KSA6IEhhbmRsZTxUPihzbG90KSB7IH0KKyAgICBX
ZWFrSW1wbCogbV9pbXBsOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEhhbmRs
ZVNsb3QgUGFzc1dlYWs8VD46OmxlYWtIYW5kbGUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
QmFzZSwgdHlwZW5hbWUgVD4gaW5saW5lIFQqIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVD46Om9w
ZXJhdG9yLT4oKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4o
dGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIFQ+IGlubGluZSBUJiBXZWFrSW1w
bEFjY2Vzc29yPEJhc2UsIFQ+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBC
YXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0
dXJuICpqc0Nhc3Q8VCo+KHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5q
c1ZhbHVlKCkuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBX
ZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+OjpnZXQoKSBjb25zdAoreworICAgIGlmICghc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwgfHwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
ZSo+KHRoaXMpLT5tX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgIHJl
dHVybiBHZXRUeXBlKCk7CisgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9CisKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBUPiBpbmxpbmUg
Ym9vbCBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+Ojp3YXModHlwZW5hbWUgV2Vha0ltcGxBY2Nl
c3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4ganNDYXN0
PFQqPihzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+anNWYWx1ZSgpLmFz
Q2VsbCgpKSA9PSBvdGhlcjsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBp
bmxpbmUgY29uc3QgSlNWYWx1ZSogV2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBVbmtub3duPjo6b3Bl
cmF0b3ItPigpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0
aGlzKS0+bV9pbXBsICYmIHN0YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5z
dGF0ZSgpID09IFdlYWtJbXBsOjpMaXZlKTsKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PGNvbnN0
IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhc2U+IGlubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25v
d24+OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBC
YXNlKj4odGhpcyktPm1faW1wbCAmJiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1f
aW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6TGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEJhc2UqPih0aGlzKS0+bV9pbXBsLT5qc1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2U+IGlubGluZSB0eXBlbmFtZSBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFVua25v
d24+OjpHZXRUeXBlIFdlYWtJbXBsQWNjZXNzb3I8QmFzZSwgVW5rbm93bj46OmdldCgpIGNvbnN0
Cit7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbCB8fCBz
dGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1w
bDo6TGl2ZSkKKyAgICAgICAgcmV0dXJuIEdldFR5cGUoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNzV2VhaygpCisgICAgOiBtX2ltcGwo
MCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+OjpQYXNz
V2VhayhzdGQ6Om51bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdHlwZW5hbWUgUGFzc1dlYWs8VD46OkdldFR5cGUgZ2V0VHlwZSwgV2Vha0hhbmRs
ZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgOiBtX2ltcGwoZ2xvYmFsRGF0
YS5oZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKGdldFR5cGUsIHdlYWtPd25lciwgY29udGV4dCkp
Cit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzV2VhazxUPjo6UGFzc1dl
YWsoY29uc3QgUGFzc1dlYWsmIG8pCisgICAgOiBtX2ltcGwoby5sZWFrSW1wbCgpKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc1dl
YWs8VD46OlBhc3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvKQorICAgIDogbV9pbXBsKG8ubGVh
a0ltcGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+
Ojp+UGFzc1dlYWsoKQoreworICAgIGlmICghbV9pbXBsKQorICAgICAgICByZXR1cm47CisgICAg
V2Vha0hlYXA6OmRlYWxsb2NhdGUobV9pbXBsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIGJvb2wgUGFzc1dlYWs8VD46Om9wZXJhdG9yISgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFtX2ltcGwgfHwgbV9pbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlIHx8ICFtX2ltcGwt
PmpzVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NXZWFrPFQ+
OjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KCEhKnRoaXMpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKFdlYWtJbXBsKiBp
bXBsKQorOiBtX2ltcGwoaW1wbCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IFdlYWtJbXBsKiBQYXNzV2VhazxUPjo6bGVha0ltcGwoKSBjb25zdAogewotICAgIEhhbmRsZVNs
b3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICBjb25zdF9jYXN0PFBhc3NXZWFrPFQ+Kj4odGhp
cyktPnNldFNsb3QoMCk7Ci0gICAgcmV0dXJuIHNsb3Q7CisgICAgV2Vha0ltcGwqIHRtcCA9IDA7
CisgICAgc3RkOjpzd2FwKHRtcCwgY29uc3RfY2FzdDxXZWFrSW1wbComPihtX2ltcGwpKTsKKyAg
ICByZXR1cm4gdG1wOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNzV2VhazxUPiBhZG9w
dFdlYWsoSGFuZGxlU2xvdCBzbG90KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1dlYWs8VD4g
aW5saW5lIGFkb3B0V2VhayhXZWFrSW1wbCogaW1wbCkKIHsKLSAgICByZXR1cm4gUGFzc1dlYWs8
VD4oc2xvdCk7CisgICAgcmV0dXJuIFBhc3NXZWFrPFQ+KGltcGwpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NX
ZWFrPFQ+JiBhLCBjb25zdCBQYXNzV2VhazxVPiYgYikgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdHJvbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdHJvbmcuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Ryb25nLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDExICs4MSwxOSBAQCBwdWJsaWM6
CiAgICAgICAgIGNsZWFyKCk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhc2xvdCgpIHx8ICEqc2xvdCgpOyB9CisKKyAgICAvLyBUaGlzIGNvbnZlcnNpb24g
b3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90
aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBKU1ZhbHVlIChIYW5kbGVCYXNlOjoqVW5z
cGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBj
b25zdCB7IHJldHVybiAhISp0aGlzID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xU
eXBlKj4oMSkgOiAwOyB9CisKICAgICB2b2lkIHN3YXAoU3Ryb25nJiBvdGhlcikKICAgICB7CiAg
ICAgICAgIEhhbmRsZTxUPjo6c3dhcChvdGhlcik7CiAgICAgfQogCisgICAgRXh0ZXJuYWxUeXBl
IGdldCgpIGNvbnN0IHsgcmV0dXJuIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdCh0aGlzLT5z
bG90KCkpOyB9CisKICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBFeHRlcm5hbFR5cGUpOwog
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IFN0cm9uZyYgb3BlcmF0b3I9KGNvbnN0IFN0cm9u
ZzxVPiYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCShyZXZpc2lvbiAx
MTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDEwOSArMjcsMTI5IEBACiAjZGVmaW5lIFdlYWtfaAogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlICJIYW5kbGUuaCIKLSNpbmNsdWRlICJIYW5kbGVIZWFw
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiUGFzc1dlYWsuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLS8vIEEgd2Vha2x5IHJlZmVyZW5jZWQgaGFuZGxlIHRoYXQgYmVj
b21lcyAwIHdoZW4gdGhlIHZhbHVlIGl0IHBvaW50cyB0byBpcyBnYXJiYWdlIGNvbGxlY3RlZC4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIEhhbmRsZTxUPiB7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIDogcHVibGljIFdlYWtJbXBsQWNjZXNzb3I8
V2VhazxUPiwgVD4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWspOwotCi0gICAgdXNp
bmcgSGFuZGxlPFQ+OjpzbG90OwotICAgIHVzaW5nIEhhbmRsZTxUPjo6c2V0U2xvdDsKLQogcHVi
bGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5cGUgRXh0ZXJu
YWxUeXBlOworICAgIGZyaWVuZCBjbGFzcyBXZWFrSW1wbEFjY2Vzc29yPFdlYWs8VD4sIFQ+Owor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgV2Vha0ltcGxBY2Nlc3NvcjxXZWFrPFQ+LCBUPjo6R2V0VHlw
ZSBHZXRUeXBlOwogCi0gICAgV2VhaygpCi0gICAgICAgIDogSGFuZGxlPFQ+KCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgV2VhayhzdGQ6Om51bGxwdHJfdCkKLSAgICAgICAgOiBIYW5kbGU8VD4oKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBXZWFrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0ZXJu
YWxUeXBlIGV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpLCBXZWFrSGFuZGxlT3duZXIqIHdl
YWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQotICAgICAgICA6IEhhbmRsZTxUPihnbG9i
YWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpKQotICAgIHsKLSAgICAgICAgSGFu
ZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5tYWtlV2VhayhzbG90KCksIHdlYWtPd25lciwgY29u
dGV4dCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBIYW5kbGVUeXBlczxUPjo6dG9KU1ZhbHVl
KGV4dGVybmFsVHlwZSk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+d3Jp
dGVCYXJyaWVyKHNsb3QoKSwgdmFsdWUpOwotICAgICAgICAqc2xvdCgpID0gdmFsdWU7Ci0gICAg
fQotCi0gICAgZW51bSBBZG9wdFRhZyB7IEFkb3B0IH07Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gV2VhayhBZG9wdFRhZywgSGFuZGxlPFU+IGhhbmRsZSkKLSAgICAgICAgOiBIYW5kbGU8VD4o
aGFuZGxlLnNsb3QoKSkKLSAgICB7Ci0gICAgICAgIHZhbGlkYXRlQ2VsbChnZXQoKSk7Ci0gICAg
fQorICAgIFdlYWsoKTsKKyAgICBXZWFrKHN0ZDo6bnVsbHB0cl90KTsKKyAgICBXZWFrKEpTR2xv
YmFsRGF0YSYsIEdldFR5cGUgPSBHZXRUeXBlKCksIFdlYWtIYW5kbGVPd25lciogPSAwLCB2b2lk
KiBjb250ZXh0ID0gMCk7CiAKICAgICBlbnVtIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZyB7IEhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSB9OwotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBzbG90KCkgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KLSAg
ICBXZWFrKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZykKLSAgICAgICAgOiBIYW5kbGU8VD4oaGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkpCi0gICAgewotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IFdlYWsoY29uc3QgUGFzc1dlYWs8VT4mIG90aGVyKQotICAgICAgICA6IEhhbmRsZTxU
PihvdGhlci5sZWFrSGFuZGxlKCkpCi0gICAgewotICAgIH0KLQotICAgIH5XZWFrKCkKLSAgICB7
Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwKFdlYWsmIG90aGVyKQot
ICAgIHsKLSAgICAgICAgSGFuZGxlPFQ+Ojpzd2FwKG90aGVyKTsKLSAgICB9CisgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0OworICAgIFdlYWsoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVGFnKTsKIAotICAgIFdlYWsmIG9wZXJhdG9yPShjb25zdCBQYXNzV2VhazxUPiYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFdlYWsoY29uc3QgUGFzc1dlYWs8VT4mKTsKIAotICAg
IEV4dGVybmFsVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiAgSGFuZGxlVHlwZXM8VD46OmdldEZy
b21TbG90KHNsb3QoKSk7IH0KLSAgICAKLSAgICBQYXNzV2VhazxUPiByZWxlYXNlKCkgeyBQYXNz
V2VhazxUPiB0bXAgPSBhZG9wdFdlYWs8VD4oc2xvdCgpKTsgc2V0U2xvdCgwKTsgcmV0dXJuIHRt
cDsgfQorICAgIH5XZWFrKCk7CiAKLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIGlm
ICghc2xvdCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBIYW5kbGVIZWFwOjpoZWFw
Rm9yKHNsb3QoKSktPmRlYWxsb2NhdGUoc2xvdCgpKTsKLSAgICAgICAgc2V0U2xvdCgwKTsKLSAg
ICB9CisgICAgdm9pZCBzd2FwKFdlYWsmKTsKKyAgICBXZWFrJiBvcGVyYXRvcj0oY29uc3QgUGFz
c1dlYWs8VD4mKTsKICAgICAKLSAgICBIYW5kbGVTbG90IGxlYWtIYW5kbGUoKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+aGFzRmluYWxpemVyKHNs
b3QoKSkpOwotICAgICAgICBIYW5kbGVTbG90IHJlc3VsdCA9IHNsb3QoKTsKLSAgICAgICAgc2V0
U2xvdCgwKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdDsKKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1w
bGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4K
KyAgICB0eXBlZGVmIEpTVmFsdWUgKEhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsK
KyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0OwogCisgICAgUGFzc1dl
YWs8VD4gcmVsZWFzZSgpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKIHByaXZhdGU6Ci0gICAg
c3RhdGljIEhhbmRsZVNsb3QgaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxIYW5kbGVTbG90PigtMSk7IH0KKyAgICBzdGF0aWMgV2Vha0ltcGwqIGhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOworCisgICAgV2Vha0ltcGwqIG1faW1wbDsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpXZWFrKCkKKyAgICA6IG1faW1wbCgwKQor
eworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2VhayhzdGQ6Om51
bGxwdHJfdCkKKyAgICA6IG1faW1wbCgwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgV2VhazxUPjo6V2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHR5cGVuYW1lIFdl
YWs8VD46OkdldFR5cGUgZ2V0VHlwZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIsIHZvaWQq
IGNvbnRleHQpCisgICAgOiBtX2ltcGwoZ2xvYmFsRGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9j
YXRlKGdldFR5cGUsIHdlYWtPd25lciwgY29udGV4dCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBib29sIFdlYWs8VD46OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9pbXBsID09IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2Vhayh0eXBlbmFtZSBXZWFr
PFQ+OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCisgICAgOiBtX2ltcGwoaGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVu
YW1lIFU+ICBpbmxpbmUgV2VhazxUPjo6V2Vhayhjb25zdCBQYXNzV2VhazxVPiYgb3RoZXIpCisg
ICAgOiBtX2ltcGwob3RoZXIubGVha0ltcGwoKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIFdlYWs8VD46On5XZWFrKCkKK3sKKyAgICBjbGVhcigpOworfQorCiB0ZW1wbGF0
ZTxjbGFzcyBUPiBpbmxpbmUgdm9pZCBzd2FwKFdlYWs8VD4mIGEsIFdlYWs8VD4mIGIpCiB7CiAg
ICAgYS5zd2FwKGIpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBXZWFr
PFQ+Ojpzd2FwKFdlYWsmIG90aGVyKQoreworICAgIHN0ZDo6c3dhcChtX2ltcGwsIG90aGVyLm1f
aW1wbCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+JiBXZWFrPFQ+
OjpvcGVyYXRvcj0oY29uc3QgUGFzc1dlYWs8VD4mIG8pCiB7CiAgICAgY2xlYXIoKTsKLSAgICBz
ZXRTbG90KG8ubGVha0hhbmRsZSgpKTsKKyAgICBtX2ltcGwgPSBvLmxlYWtJbXBsKCk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFr
PFQ+OjpvcGVyYXRvciEoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pbXBsIHx8ICFtX2ltcGwt
PmpzVmFsdWUoKSB8fCBtX2ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmU7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+OjpvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZp
ZWRCb29sVHlwZSo+KCEhKnRoaXMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
UGFzc1dlYWs8VD4gV2VhazxUPjo6cmVsZWFzZSgpCit7CisgICAgUGFzc1dlYWs8VD4gdG1wID0g
YWRvcHRXZWFrPFQ+KG1faW1wbCk7CisgICAgbV9pbXBsID0gMDsKKyAgICByZXR1cm4gdG1wOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBXZWFrPFQ+OjpjbGVhcigpCit7
CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybjsKKyAgICBXZWFrSGVhcDo6ZGVhbGxv
Y2F0ZShtX2ltcGwpOworICAgIG1faW1wbCA9IDA7Cit9CisgICAgCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgV2Vha0ltcGwqIFdlYWs8VD46Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpCit7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0ltcGwqPigtMSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTE1MSw3ICsxNzEsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czxKCiAgICAgc3RhdGljIFBhc3NPdXRU
eXBlIHBhc3NPdXQoU3RvcmFnZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7
IH0KICAgICBzdGF0aWMgUGFzc091dFR5cGUgcGFzc091dChFbXB0eVZhbHVlVHlwZSkgeyByZXR1
cm4gUGFzc091dFR5cGUoKTsgfQogCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBTdG9yYWdlVHlwZTo6
RXh0ZXJuYWxUeXBlIFBlZWtUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgU3RvcmFnZVR5cGU6
OkdldFR5cGUgUGVla1R5cGU7CiAgICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoY29uc3QgU3RvcmFn
ZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5nZXQoKTsgfQogICAgIHN0YXRpYyBQZWVrVHlw
ZSBwZWVrKEVtcHR5VmFsdWVUeXBlKSB7IHJldHVybiBQZWVrVHlwZSgpOyB9CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2Vha0Jsb2NrLmgiCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSGVhcFJvb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJTY29wZUNoYWluLmgi
CisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitXZWFrQmxvY2sq
IFdlYWtCbG9jazo6Y3JlYXRlKCkKK3sKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2Nh
dGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoYmxvY2tTaXplLCBibG9ja1Np
emUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKKyAgICBpZiAoIXN0YXRpY19jYXN0PGJv
b2w+KGFsbG9jYXRpb24pKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBuZXcgKE5vdE51
bGwsIGFsbG9jYXRpb24uYmFzZSgpKSBXZWFrQmxvY2soYWxsb2NhdGlvbik7Cit9CisKK3ZvaWQg
V2Vha0Jsb2NrOjpkZXN0cm95KFdlYWtCbG9jayogYmxvY2spCit7CisgICAgYmxvY2stPm1fYWxs
b2NhdGlvbi5kZWFsbG9jYXRlKCk7Cit9CisKK1dlYWtCbG9jazo6V2Vha0Jsb2NrKFBhZ2VBbGxv
Y2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbikKKyAgICA6IEhlYXBCbG9jayhhbGxvY2F0aW9uKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAgICBuZXcg
KE5vdE51bGwsIHdlYWtJbXBsKSBXZWFrSW1wbDsKKyAgICAgICAgYWRkVG9GcmVlTGlzdCgmbV9z
d2VlcFJlc3VsdC5mcmVlTGlzdCwgd2Vha0ltcGwpOworICAgIH0KKworICAgIEFTU0VSVCghbV9z
d2VlcFJlc3VsdC5pc051bGwoKSAmJiBtX3N3ZWVwUmVzdWx0LmJsb2NrSXNGcmVlKTsKK30KKwor
dm9pZCBXZWFrQmxvY2s6OmZpbmFsaXplQWxsKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHdlYWtJbXBsQ291bnQoKTsgKytpKSB7CisgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9
ICZ3ZWFrSW1wbHMoKVtpXTsKKyAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID49IFdlYWtJ
bXBsOjpGaW5hbGl6ZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgd2Vha0ltcGwt
PnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKKyAgICAgICAgZmluYWxpemUod2Vha0ltcGwpOwor
ICAgIH0KK30KKwordm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKK3sKKyAgICBpZiAoIW1fc3dlZXBS
ZXN1bHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN3ZWVwUmVzdWx0IHN3ZWVw
UmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kp
IHsKKyAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAg
ICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkRlYWQpCisgICAgICAgICAgICBm
aW5hbGl6ZSh3ZWFrSW1wbCk7CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA9PSBXZWFr
SW1wbDo6RGVhbGxvY2F0ZWQpCisgICAgICAgICAgICBhZGRUb0ZyZWVMaXN0KCZzd2VlcFJlc3Vs
dC5mcmVlTGlzdCwgd2Vha0ltcGwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzd2VlcFJl
c3VsdC5ibG9ja0lzRnJlZSA9IGZhbHNlOworICAgIH0KKworICAgIG1fc3dlZXBSZXN1bHQgPSBz
d2VlcFJlc3VsdDsKKyAgICBBU1NFUlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOworfQorCit2
b2lkIFdlYWtCbG9jazo6dmlzaXRMaXZlV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYgaGVhcFJv
b3RWaXNpdG9yKQoreworICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSB2
aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCisgICAgaWYgKCFtX3N3ZWVwUmVzdWx0LmlzTnVs
bCgpICYmIG1fc3dlZXBSZXN1bHQuYmxvY2tJc0ZyZWUpCisgICAgICAgIHJldHVybjsKKworICAg
IFNsb3RWaXNpdG9yJiB2aXNpdG9yID0gaGVhcFJvb3RWaXNpdG9yLnZpc2l0b3IoKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vha0ltcGxDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
V2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOworICAgICAgICBpZiAod2Vha0lt
cGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBKU1ZhbHVlJiBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKKyAg
ICAgICAgaWYgKCFqc1ZhbHVlIHx8ICFqc1ZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgSlNDZWxsKiBqc0NlbGwgPSBqc1ZhbHVlLmFzQ2VsbCgpOworICAg
ICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoanNDZWxsKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyID0gd2Vha0ltcGwtPndl
YWtIYW5kbGVPd25lcigpOworICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lcikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpT
VmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZjb25zdF9j
YXN0PEpTVmFsdWUmPihqc1ZhbHVlKSk7CisgICAgfQorfQorCit2b2lkIFdlYWtCbG9jazo6dmlz
aXREZWFkV2Vha0ltcGxzKEhlYXBSb290VmlzaXRvciYpCit7CisgICAgLy8gSWYgYSBibG9jayBp
cyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUgYW55IGVmZmVjdC4KKyAgICBp
ZiAoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkgJiYgbV9zd2VlcFJlc3VsdC5ibG9ja0lzRnJlZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWFrSW1wbENv
dW50KCk7ICsraSkgeworICAgICAgICBXZWFrSW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxzKClb
aV07CisgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSA+IFdlYWtJbXBsOjpEZWFkKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgSlNWYWx1ZSYganNWYWx1ZSA9IHdl
YWtJbXBsLT5qc1ZhbHVlKCk7CisgICAgICAgIGlmICghanNWYWx1ZSB8fCAhanNWYWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTQ2VsbCoganNDZWxsID0g
anNWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGpzQ2VsbCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkRlYWQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vha0Jsb2NrX2gKKyNkZWZpbmUgV2Vha0Jsb2NrX2gK
KworI2luY2x1ZGUgIkhlYXBCbG9jay5oIgorI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgor
I2luY2x1ZGUgIldlYWtJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4K
KyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcFJvb3RWaXNpdG9y
OworY2xhc3MgSlNWYWx1ZTsKK2NsYXNzIFdlYWtIYW5kbGVPd25lcjsKKworY2xhc3MgV2Vha0Js
b2NrIDogcHVibGljIEhlYXBCbG9jayB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBibG9ja1NpemUgPSA0ICogS0I7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja01hc2sg
PSB+KGJsb2NrU2l6ZSAtIDEpOworCisgICAgc3RydWN0IEZyZWVDZWxsIHsKKyAgICAgICAgRnJl
ZUNlbGwqIG5leHQ7CisgICAgfTsKKworICAgIHN0cnVjdCBTd2VlcFJlc3VsdCB7CisgICAgICAg
IFN3ZWVwUmVzdWx0KCk7CisgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBibG9ja0lzRnJlZTsKKyAgICAgICAgRnJlZUNlbGwqIGZyZWVMaXN0OworICAgIH07CisK
KyAgICBzdGF0aWMgV2Vha0Jsb2NrKiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KFdlYWtCbG9jayopOworCisgICAgc3RhdGljIFdlYWtCbG9jayogYmxvY2tGb3IoV2Vha0ltcGwq
KTsKKyAgICBzdGF0aWMgV2Vha0ltcGwqIGFzV2Vha0ltcGwoRnJlZUNlbGwqKTsKKworICAgIHZv
aWQgc3dlZXAoKTsKKyAgICBjb25zdCBTd2VlcFJlc3VsdCYgc3dlZXBSZXN1bHQoKTsKKyAgICBT
d2VlcFJlc3VsdCB0YWtlU3dlZXBSZXN1bHQoKTsKKworICAgIHZvaWQgZGVhbGxvY2F0ZShXZWFr
SW1wbCopOworCisgICAgdm9pZCB2aXNpdExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdERlYWRXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisKKyAgICB2
b2lkIGZpbmFsaXplQWxsKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEZyZWVDZWxsKiBhc0Zy
ZWVDZWxsKFdlYWtJbXBsKik7CisKKyAgICBXZWFrQmxvY2soUGFnZUFsbG9jYXRpb25BbGlnbmVk
Jik7CisgICAgV2Vha0ltcGwqIGZpcnN0V2Vha0ltcGwoKTsKKyAgICB2b2lkIGZpbmFsaXplKFdl
YWtJbXBsKik7CisgICAgV2Vha0ltcGwqIHdlYWtJbXBscygpOworICAgIHNpemVfdCB3ZWFrSW1w
bENvdW50KCk7CisgICAgdm9pZCBhZGRUb0ZyZWVMaXN0KEZyZWVDZWxsKiosIFdlYWtJbXBsKik7
CisKKyAgICBTd2VlcFJlc3VsdCBtX3N3ZWVwUmVzdWx0OworfTsKKworaW5saW5lIFdlYWtCbG9j
azo6U3dlZXBSZXN1bHQ6OlN3ZWVwUmVzdWx0KCkKKyAgICA6IGJsb2NrSXNGcmVlKHRydWUpCisg
ICAgLCBmcmVlTGlzdCgwKQoreworICAgIEFTU0VSVChpc051bGwoKSk7Cit9CisKK2lubGluZSBi
b29sIFdlYWtCbG9jazo6U3dlZXBSZXN1bHQ6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGJsb2NrSXNGcmVlICYmICFmcmVlTGlzdDsgLy8gVGhpcyBzdGF0ZSBpcyBpbXBvc3NpYmxlLCBz
byB3ZSBjYW4gdXNlIGl0IHRvIG1lYW4gbnVsbC4KK30KKworaW5saW5lIFdlYWtCbG9jayogV2Vh
a0Jsb2NrOjpibG9ja0ZvcihXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8V2Vha0Jsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHdlYWtJ
bXBsKSAmIGJsb2NrTWFzayk7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0Jsb2NrOjphc1dl
YWtJbXBsKEZyZWVDZWxsKiBmcmVlQ2VsbCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxXZWFrSW1wbCo+KGZyZWVDZWxsKTsKK30KKworaW5saW5lIFdlYWtCbG9jazo6U3dlZXBSZXN1
bHQgV2Vha0Jsb2NrOjp0YWtlU3dlZXBSZXN1bHQoKQoreworICAgIFN3ZWVwUmVzdWx0IHRtcDsK
KyAgICBzdGQ6OnN3YXAodG1wLCBtX3N3ZWVwUmVzdWx0KTsKKyAgICBBU1NFUlQobV9zd2VlcFJl
c3VsdC5pc051bGwoKSk7CisgICAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIGNvbnN0IFdlYWtC
bG9jazo6U3dlZXBSZXN1bHQmIFdlYWtCbG9jazo6c3dlZXBSZXN1bHQoKQoreworICAgIHJldHVy
biBtX3N3ZWVwUmVzdWx0OworfQorCitpbmxpbmUgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0Js
b2NrOjphc0ZyZWVDZWxsKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxGcmVlQ2VsbCo+KHdlYWtJbXBsKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Js
b2NrOjpkZWFsbG9jYXRlKFdlYWtJbXBsKiB3ZWFrSW1wbCkKK3sKKyAgICB3ZWFrSW1wbC0+c2V0
U3RhdGUoV2Vha0ltcGw6OkRlYWxsb2NhdGVkKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0Jsb2Nr
OjpmaW5hbGl6ZShXZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgQVNTRVJUKHdlYWtJbXBsLT5z
dGF0ZSgpID09IFdlYWtJbXBsOjpEZWFkKTsKKyAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkZpbmFsaXplZCk7CisgICAgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIgPSB3
ZWFrSW1wbC0+d2Vha0hhbmRsZU93bmVyKCk7CisgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICB3ZWFrSGFuZGxlT3duZXItPmZpbmFsaXplKEhhbmRsZTxVbmtu
b3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KHdlYWtJbXBsLT5qc1ZhbHVlKCkp
KSwgd2Vha0ltcGwtPmNvbnRleHQoKSk7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0Jsb2Nr
Ojp3ZWFrSW1wbHMoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4o
dGhpcykgKyAoKHNpemVvZihXZWFrQmxvY2spICsgc2l6ZW9mKFdlYWtJbXBsKSAtIDEpIC8gc2l6
ZW9mKFdlYWtJbXBsKSk7Cit9CisKK2lubGluZSBzaXplX3QgV2Vha0Jsb2NrOjp3ZWFrSW1wbENv
dW50KCkKK3sKKyAgICByZXR1cm4gKGJsb2NrU2l6ZSAvIHNpemVvZihXZWFrSW1wbCkpIC0gKChz
aXplb2YoV2Vha0Jsb2NrKSArIHNpemVvZihXZWFrSW1wbCkgLSAxKSAvIHNpemVvZihXZWFrSW1w
bCkpOworfQorCitpbmxpbmUgdm9pZCBXZWFrQmxvY2s6OmFkZFRvRnJlZUxpc3QoRnJlZUNlbGwq
KiBmcmVlTGlzdCwgV2Vha0ltcGwqIHdlYWtJbXBsKQoreworICAgIEFTU0VSVCh3ZWFrSW1wbC0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6RGVhbGxvY2F0ZWQpOworICAgIEZyZWVDZWxsKiBmcmVlQ2Vs
bCA9IGFzRnJlZUNlbGwod2Vha0ltcGwpOworICAgIEFTU0VSVCghKmZyZWVMaXN0IHx8ICgoY2hh
ciopKmZyZWVMaXN0ID4gKGNoYXIqKXRoaXMgJiYgKGNoYXIqKSpmcmVlTGlzdCA8IChjaGFyKil0
aGlzICsgYmxvY2tTaXplKSk7CisgICAgQVNTRVJUKChjaGFyKilmcmVlQ2VsbCA+IChjaGFyKil0
aGlzICYmIChjaGFyKilmcmVlQ2VsbCA8IChjaGFyKil0aGlzICsgYmxvY2tTaXplKTsKKyAgICBm
cmVlQ2VsbC0+bmV4dCA9ICpmcmVlTGlzdDsKKyAgICAqZnJlZUxpc3QgPSBmcmVlQ2VsbDsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBXZWFrQmxvY2tfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIFNsb3RWaXNpdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgSGFuZGxlOwor
CitXZWFrSGFuZGxlT3duZXI6On5XZWFrSGFuZGxlT3duZXIoKQoreworfQorCitib29sIFdlYWtI
YW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2
b2lkKiwgU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWFr
SGFuZGxlT3duZXI6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCopCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hh
bmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrSGFuZGxlT3duZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2Vha0hhbmRsZU93bmVyX2gKKyNkZWZpbmUgV2Vha0hhbmRsZU93bmVy
X2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU2xv
dFZpc2l0b3I7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CisgICAgdmlydHVhbCBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4
dCwgU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gV2Vha0hhbmRsZU93bmVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtIZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGVhcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGVhcC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYWtIZWFwLmgiCisKKyNpbmNsdWRlICJIZWFw
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitXZWFrSGVhcDo6fldlYWtIZWFwKCkKK3sKKyAgICBX
ZWFrQmxvY2sqIG5leHQgPSAwOworICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19j
YXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsK
KyAgICAgICAgbmV4dCA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpOwor
ICAgICAgICBXZWFrQmxvY2s6OmRlc3Ryb3koYmxvY2spOworICAgIH0KKyAgICBtX2Jsb2Nrcy5j
bGVhcigpOworfQorCit2b2lkIFdlYWtIZWFwOjpmaW5hbGl6ZUFsbCgpCit7CisgICAgZm9yIChX
ZWFrQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3MuaGVhZCgp
KTsgYmxvY2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4oYmxvY2stPm5leHQoKSkp
CisgICAgICAgIGJsb2NrLT5maW5hbGl6ZUFsbCgpOworfQorCit2b2lkIFdlYWtIZWFwOjp2aXNp
dExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoV2Vh
a0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tzLmhlYWQoKSk7
IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpKQor
ICAgICAgICBibG9jay0+dmlzaXRMaXZlV2Vha0ltcGxzKHZpc2l0b3IpOworfQorCit2b2lkIFdl
YWtIZWFwOjp2aXNpdERlYWRXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxv
Y2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KGJsb2Nr
LT5uZXh0KCkpKQorICAgICAgICBibG9jay0+dmlzaXREZWFkV2Vha0ltcGxzKHZpc2l0b3IpOwor
fQorCit2b2lkIFdlYWtIZWFwOjpzd2VlcCgpCit7CisgICAgV2Vha0Jsb2NrKiBuZXh0OworICAg
IGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFdlYWtCbG9jayo+KG1fYmxvY2tz
LmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHN0YXRpY19j
YXN0PFdlYWtCbG9jayo+KGJsb2NrLT5uZXh0KCkpOworCisgICAgICAgIC8vIElmIGEgYmxvY2sg
aXMgY29tcGxldGVseSBlbXB0eSwgYSBuZXcgc3dlZXAgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0Lgor
ICAgICAgICBpZiAoIWJsb2NrLT5zd2VlcFJlc3VsdCgpLmlzTnVsbCgpICYmIGJsb2NrLT5zd2Vl
cFJlc3VsdCgpLmJsb2NrSXNGcmVlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
YmxvY2stPnRha2VTd2VlcFJlc3VsdCgpOyAvLyBGb3JjZSBhIG5ldyBzd2VlcCBieSBkaXNjYXJk
aW5nIHRoZSBsYXN0IHN3ZWVwLgorICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICB9Cit9CisK
K3ZvaWQgV2Vha0hlYXA6OnJlc2V0QWxsb2NhdG9yKCkKK3sKKyAgICBtX2FsbG9jYXRvciA9IDA7
CisgICAgbV9uZXh0QWxsb2NhdG9yID0gc3RhdGljX2Nhc3Q8V2Vha0Jsb2NrKj4obV9ibG9ja3Mu
aGVhZCgpKTsKK30KKworV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OmZpbmRBbGxvY2F0
b3IoKQoreworICAgIGlmIChXZWFrQmxvY2s6OkZyZWVDZWxsKiBhbGxvY2F0b3IgPSB0cnlGaW5k
QWxsb2NhdG9yKCkpCisgICAgICAgIHJldHVybiBhbGxvY2F0b3I7CisKKyAgICBtX2hlYXAtPmFk
ZFRvV2F0ZXJNYXJrKFdlYWtCbG9jazo6YmxvY2tTaXplKTsKKworICAgIC8vIGFkZFRvV2F0ZXJN
YXJrKCkgbWF5IGNhdXNlIGEgR0MsIHNvIHRyeSBhZ2Fpbi4KKyAgICBpZiAoV2Vha0Jsb2NrOjpG
cmVlQ2VsbCogYWxsb2NhdG9yID0gdHJ5RmluZEFsbG9jYXRvcigpKQorICAgICAgICByZXR1cm4g
YWxsb2NhdG9yOworCisgICAgcmV0dXJuIGFkZEFsbG9jYXRvcigpOworfQorCitXZWFrQmxvY2s6
OkZyZWVDZWxsKiBXZWFrSGVhcDo6dHJ5RmluZEFsbG9jYXRvcigpCit7CisgICAgd2hpbGUgKG1f
bmV4dEFsbG9jYXRvcikgeworICAgICAgICBXZWFrQmxvY2sqIGJsb2NrID0gbV9uZXh0QWxsb2Nh
dG9yOworICAgICAgICBtX25leHRBbGxvY2F0b3IgPSBzdGF0aWNfY2FzdDxXZWFrQmxvY2sqPiht
X25leHRBbGxvY2F0b3ItPm5leHQoKSk7CisKKyAgICAgICAgYmxvY2stPnN3ZWVwKCk7CisgICAg
ICAgIFdlYWtCbG9jazo6U3dlZXBSZXN1bHQgc3dlZXBSZXN1bHQgPSBibG9jay0+dGFrZVN3ZWVw
UmVzdWx0KCk7CisgICAgICAgIGlmIChzd2VlcFJlc3VsdC5mcmVlTGlzdCkKKyAgICAgICAgICAg
IHJldHVybiBzd2VlcFJlc3VsdC5mcmVlTGlzdDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0hlYXA6OmFkZEFsbG9jYXRvcigpCit7CisgICAg
V2Vha0Jsb2NrKiBibG9jayA9IFdlYWtCbG9jazo6Y3JlYXRlKCk7CisgICAgbV9ibG9ja3MuYXBw
ZW5kKGJsb2NrKTsKKyAgICBXZWFrQmxvY2s6OlN3ZWVwUmVzdWx0IHN3ZWVwUmVzdWx0ID0gYmxv
Y2stPnRha2VTd2VlcFJlc3VsdCgpOworICAgIEFTU0VSVCghc3dlZXBSZXN1bHQuaXNOdWxsKCkg
JiYgc3dlZXBSZXN1bHQuZnJlZUxpc3QpOworICAgIHJldHVybiBzd2VlcFJlc3VsdC5mcmVlTGlz
dDsKK30KKwordm9pZCBXZWFrSGVhcDo6cmVtb3ZlQWxsb2NhdG9yKFdlYWtCbG9jayogYmxvY2sp
Cit7CisgICAgbV9ibG9ja3MucmVtb3ZlKGJsb2NrKTsKKyAgICBXZWFrQmxvY2s6OmRlc3Ryb3ko
YmxvY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0hlYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtIZWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYWtIZWFwX2gKKyNkZWZpbmUgV2Vha0hlYXBfaAorCisjaW5jbHVkZSAiV2Vh
a0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgV2Vha0lt
cGw7CisKK2NsYXNzIFdlYWtIZWFwIHsKK3B1YmxpYzoKKyAgICBXZWFrSGVhcChIZWFwKik7Cisg
ICAgdm9pZCBmaW5hbGl6ZUFsbCgpOworICAgIH5XZWFrSGVhcCgpOworCisgICAgV2Vha0ltcGwq
IGFsbG9jYXRlKEpTVmFsdWUsIFdlYWtIYW5kbGVPd25lciogPSAwLCB2b2lkKiBjb250ZXh0ID0g
MCk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShXZWFrSW1wbCopOworCisgICAgdm9pZCB2
aXNpdExpdmVXZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdERlYWRX
ZWFrSW1wbHMoSGVhcFJvb3RWaXNpdG9yJik7CisKKyAgICB2b2lkIHN3ZWVwKCk7CisgICAgdm9p
ZCByZXNldEFsbG9jYXRvcigpOworCitwcml2YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFdl
YWtCbG9jazo6RnJlZUNlbGwqIGZpbmRBbGxvY2F0b3IoKTsKKyAgICBXZWFrQmxvY2s6OkZyZWVD
ZWxsKiB0cnlGaW5kQWxsb2NhdG9yKCk7CisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWRkQWxs
b2NhdG9yKCk7CisgICAgdm9pZCByZW1vdmVBbGxvY2F0b3IoV2Vha0Jsb2NrKik7CisKKyAgICBX
ZWFrQmxvY2s6OkZyZWVDZWxsKiBtX2FsbG9jYXRvcjsKKyAgICBXZWFrQmxvY2sqIG1fbmV4dEFs
bG9jYXRvcjsKKyAgICBEb3VibHlMaW5rZWRMaXN0PEhlYXBCbG9jaz4gbV9ibG9ja3M7CisgICAg
SGVhcCogbV9oZWFwOworfTsKKworaW5saW5lIFdlYWtIZWFwOjpXZWFrSGVhcChIZWFwKiBoZWFw
KQorICAgIDogbV9hbGxvY2F0b3IoMCkKKyAgICAsIG1fbmV4dEFsbG9jYXRvcigwKQorICAgICwg
bV9oZWFwKGhlYXApCit7Cit9CisKK2lubGluZSBXZWFrSW1wbCogV2Vha0hlYXA6OmFsbG9jYXRl
KEpTVmFsdWUganNWYWx1ZSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIsIHZvaWQq
IGNvbnRleHQpCit7CisgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogYWxsb2NhdG9yID0gbV9hbGxv
Y2F0b3I7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIGFsbG9jYXRvciA9IGZpbmRBbGxv
Y2F0b3IoKTsKKyAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvci0+bmV4dDsKKworICAgIFdlYWtJ
bXBsKiB3ZWFrSW1wbCA9IFdlYWtCbG9jazo6YXNXZWFrSW1wbChhbGxvY2F0b3IpOworICAgIHJl
dHVybiBuZXcgKE5vdE51bGwsIHdlYWtJbXBsKSBXZWFrSW1wbChqc1ZhbHVlLCB3ZWFrSGFuZGxl
T3duZXIsIGNvbnRleHQpOworfQorCitpbmxpbmUgdm9pZCBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShX
ZWFrSW1wbCogd2Vha0ltcGwpCit7CisgICAgV2Vha0Jsb2NrOjpibG9ja0Zvcih3ZWFrSW1wbCkt
PmRlYWxsb2NhdGUod2Vha0ltcGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFdlYWtIZWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0ltcGwuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbXBsLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWFrSW1w
bF9oCisjZGVmaW5lIFdlYWtJbXBsX2gKKworI2luY2x1ZGUgIkpTVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFdlYWtIYW5kbGVPd25lcjsKKworY2xhc3MgV2Vha0ltcGwgewor
cHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBMaXZlICAgICAgICA9IDB4MCwKKyAg
ICAgICAgRGVhZCAgICAgICAgPSAweDEsCisgICAgICAgIEZpbmFsaXplZCAgID0gMHgyLAorICAg
ICAgICBEZWFsbG9jYXRlZCA9IDB4MworICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAgICAgU3Rh
dGVNYXNrICAgPSAweDMKKyAgICB9OworCisgICAgV2Vha0ltcGwoKTsKKyAgICBXZWFrSW1wbChK
U1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqLCB2b2lkKiBjb250ZXh0KTsKKworICAgIFN0YXRlIHN0
YXRlKCk7CisgICAgdm9pZCBzZXRTdGF0ZShTdGF0ZSk7CisKKyAgICBjb25zdCBKU1ZhbHVlJiBq
c1ZhbHVlKCk7CisgICAgV2Vha0hhbmRsZU93bmVyKiB3ZWFrSGFuZGxlT3duZXIoKTsKKyAgICB2
b2lkKiBjb250ZXh0KCk7CisKKyAgICBzdGF0aWMgV2Vha0ltcGwqIGFzV2Vha0ltcGwoSlNWYWx1
ZSopOworCitwcml2YXRlOgorICAgIGNvbnN0IEpTVmFsdWUgbV9qc1ZhbHVlOworICAgIFdlYWtI
YW5kbGVPd25lciogbV93ZWFrSGFuZGxlT3duZXI7CisgICAgdm9pZCogbV9jb250ZXh0OworfTsK
KworaW5saW5lIFdlYWtJbXBsOjpXZWFrSW1wbCgpCisgICAgOiBtX3dlYWtIYW5kbGVPd25lcigw
KQorICAgICwgbV9jb250ZXh0KDApCit7CisgICAgc2V0U3RhdGUoRGVhbGxvY2F0ZWQpOworfQor
CitpbmxpbmUgV2Vha0ltcGw6OldlYWtJbXBsKEpTVmFsdWUganNWYWx1ZSwgV2Vha0hhbmRsZU93
bmVyKiB3ZWFrSGFuZGxlT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgOiBtX2pzVmFsdWUoanNW
YWx1ZSkKKyAgICAsIG1fd2Vha0hhbmRsZU93bmVyKHdlYWtIYW5kbGVPd25lcikKKyAgICAsIG1f
Y29udGV4dChjb250ZXh0KQoreworICAgIEFTU0VSVChzdGF0ZSgpID09IExpdmUpOworfQorCitp
bmxpbmUgV2Vha0ltcGw6OlN0YXRlIFdlYWtJbXBsOjpzdGF0ZSgpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFN0YXRlPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxl
T3duZXIpICYgU3RhdGVNYXNrKTsKK30KKworaW5saW5lIHZvaWQgV2Vha0ltcGw6OnNldFN0YXRl
KFdlYWtJbXBsOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUgPj0gdGhpcy0+c3Rh
dGUoKSk7CisgICAgbV93ZWFrSGFuZGxlT3duZXIgPSByZWludGVycHJldF9jYXN0PFdlYWtIYW5k
bGVPd25lcio+KChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV93ZWFrSGFuZGxlT3duZXIp
ICYgflN0YXRlTWFzaykgfCBzdGF0ZSk7Cit9CisKK2lubGluZSBjb25zdCBKU1ZhbHVlJiBXZWFr
SW1wbDo6anNWYWx1ZSgpCit7CisgICAgcmV0dXJuIG1fanNWYWx1ZTsKK30KKworaW5saW5lIFdl
YWtIYW5kbGVPd25lciogV2Vha0ltcGw6OndlYWtIYW5kbGVPd25lcigpCit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vha0hhbmRsZU93bmVyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihtX3dlYWtIYW5kbGVPd25lcikgJiB+U3RhdGVNYXNrKSk7Cit9CisKK2lubGluZSB2
b2lkKiBXZWFrSW1wbDo6Y29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dDsKK30KKwor
aW5saW5lIFdlYWtJbXBsKiBXZWFrSW1wbDo6YXNXZWFrSW1wbChKU1ZhbHVlKiBzbG90KQorewor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4ocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc2xvdCkgKyBPQkpFQ1RfT0ZGU0VUT0YoV2Vha0ltcGwsIG1fanNWYWx1ZSkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFdlYWtJbXBsX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU3
NSw3ICszNTc1LDcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpbwog
TmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYykKIHsKICAgICBIb3N0RnVuY3Rpb25TdHViTWFw
OjpBZGRSZXN1bHQgZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmFkZChmdW5jdGlvbiwg
UGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7Ci0gICAgaWYgKCEqZW50cnkuaXRlcmF0b3It
PnNlY29uZCkgeworICAgIGlmICghZW50cnkuaXRlcmF0b3ItPnNlY29uZCkgewogICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZTsKICAgICAgICAgaWYgKGdlbmVyYXRvcikgewogICAg
ICAgICAgICAgaWYgKGdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsNyArMzUx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1l
IEZyb20+CiAgICAgaW5saW5lIFRvIGpzQ2FzdChGcm9tKiBmcm9tKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGZyb20tPmluaGVyaXRzKCZXVEY6OlJlbW92ZVBvaW50ZXI8VG8+OjpUeXBlOjpzX2lu
Zm8pKTsKKyAgICAgICAgQVNTRVJUKCFmcm9tIHx8IGZyb20tPmluaGVyaXRzKCZXVEY6OlJlbW92
ZVBvaW50ZXI8VG8+OjpUeXBlOjpzX2luZm8pKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFRvPihmcm9tKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3
IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWQKICAgICAgICAgLy8g
VGhlcmUgYWxyZWFkeSBpcyBhbiBlbnRyeSEgLSB3ZSBzaG91bGQgb25seSBoaXQgdGhpcyB3aGVu
IGRlc3BlY2lmeWluZy4KICAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci5nZXQoKS5zZWNv
bmQtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOwogICAgICAgICBBU1NFUlQoIXN0cnVjdHVy
ZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7Ci0gICAgICAgIG1hcCgpLT5zZXQocmVzdWx0
Lml0ZXJhdG9yLCBzdHJ1Y3R1cmUpOworICAgICAgICBtYXAoKS0+c2V0KGdsb2JhbERhdGEsIHJl
c3VsdC5pdGVyYXRvci5nZXQoKS5maXJzdCwgc3RydWN0dXJlKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMTI1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNDZWxsOwogY2xhc3Mg
U3RydWN0dXJlOwogCiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewpAQCAtODMsMTAg
Kzg0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICAgICAgaWYgKCFzbG90KQor
ICAgICAgICBXZWFrSW1wbCogaW1wbCA9IHRoaXMtPndlYWtJbXBsKCk7CisgICAgICAgIGlmICgh
aW1wbCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihz
bG90KS0+ZGVhbGxvY2F0ZShzbG90KTsKKyAgICAgICAgV2Vha0hlYXA6OmRlYWxsb2NhdGUoaW1w
bCk7CiAgICAgfQogCiAgICAgaW5saW5lIHZvaWQgYWRkKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSopOwpAQCAtMTA1LDE4ICsxMDYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VHJhbnNpdGlvbk1hcCo+KG1fZGF0YSk7CiAgICAgfQogCi0gICAgSGFuZGxl
U2xvdCBzbG90KCkgY29uc3QKKyAgICBXZWFrSW1wbCogd2Vha0ltcGwoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwotICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxIYW5kbGVTbG90PihtX2RhdGEgJiB+VXNpbmdTaW5nbGVTbG90RmxhZyk7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYWtJbXBsKj4obV9kYXRhICYgflVz
aW5nU2luZ2xlU2xvdEZsYWcpOwogICAgIH0KIAogICAgIHZvaWQgc2V0TWFwKFRyYW5zaXRpb25N
YXAqIG1hcCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCkpCi0gICAg
ICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5kZWFsbG9jYXRlKHNsb3QpOworICAg
ICAgICBpZiAoV2Vha0ltcGwqIGltcGwgPSB0aGlzLT53ZWFrSW1wbCgpKQorICAgICAgICAgICAg
V2Vha0hlYXA6OmRlYWxsb2NhdGUoaW1wbCk7CiAKICAgICAgICAgLy8gVGhpcyBpbXBsaWNpdGx5
IGNsZWFycyB0aGUgZmxhZyB0aGF0IGluZGljYXRlcyB3ZSdyZSB1c2luZyBhIHNpbmdsZSB0cmFu
c2l0aW9uCiAgICAgICAgIG1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1hcCk7
CkBAIC0xMjcsOSArMTI4LDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmUqIHNpbmdsZVRyYW5z
aXRpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkp
OwotICAgICAgICBpZiAoSGFuZGxlU2xvdCBzbG90ID0gdGhpcy0+c2xvdCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoKnNsb3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
U3RydWN0dXJlKj4oc2xvdC0+YXNDZWxsKCkpOworICAgICAgICBpZiAoV2Vha0ltcGwqIGltcGwg
PSB0aGlzLT53ZWFrSW1wbCgpKSB7CisgICAgICAgICAgICBpZiAoaW1wbC0+c3RhdGUoKSA9PSBX
ZWFrSW1wbDo6TGl2ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxT
dHJ1Y3R1cmUqPihpbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KQEAgLTEzNywxNCArMTM4LDEwIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXRTaW5nbGVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7
Ci0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKLSAgICAgICAgaWYgKCFz
bG90KSB7Ci0gICAgICAgICAgICBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+
YWxsb2NhdGUoKTsKLSAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPm1ha2VX
ZWFrKHNsb3QsIDAsIDApOwotICAgICAgICAgICAgbV9kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oc2xvdCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwotICAgICAgICB9Ci0gICAgICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihzbG90LCByZWludGVycHJl
dF9jYXN0PEpTQ2VsbCo+KHN0cnVjdHVyZSkpOwotICAgICAgICAqc2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SlNDZWxsKj4oc3RydWN0dXJlKTsKKyAgICAgICAgaWYgKFdlYWtJbXBsKiBpbXBsID0g
dGhpcy0+d2Vha0ltcGwoKSkKKyAgICAgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwp
OworICAgICAgICBXZWFrSW1wbCogaW1wbCA9IGdsb2JhbERhdGEuaGVhcC53ZWFrSGVhcCgpLT5h
bGxvY2F0ZShyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHN0cnVjdHVyZSkpOworICAgICAgICBt
X2RhdGEgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbXBsKSB8IFVzaW5nU2luZ2xlU2xv
dEZsYWc7CiAgICAgfQogCiAgICAgaW50cHRyX3QgbV9kYXRhOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIGNsYXNzIFdlYWtHQ01hcCA6IHByaXZhdGUgV2Vha0hhbmRsZU93bmUKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWFr
R0NNYXApOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5cGUsIEhhbmRsZVNsb3QsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZz4gTWFwVHlwZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSwg
V2Vha0ltcGwqLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IE1hcFR5cGU7CiAgICAgdHlwZWRlZiB0
eXBlbmFtZSBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlw
ZTsKICAgICB0eXBlZGVmIHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIG1hcF9pdGVyYXRvcjsK
IApAQCAtNjQsOCArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgc3RkOjpwYWlyPEtleVR5cGUsIEV4dGVybmFsVHlwZT4gZ2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RkOjptYWtlX3BhaXIobV9pdGVyYXRvci0+Zmlyc3QsIEhhbmRsZVR5cGVzPE1h
cHBlZFR5cGU+OjpnZXRGcm9tU2xvdChtX2l0ZXJhdG9yLT5zZWNvbmQpKTsgfQotICAgICAgICBz
dGQ6OnBhaXI8S2V5VHlwZSwgSGFuZGxlU2xvdD4gZ2V0U2xvdCgpIGNvbnN0IHsgcmV0dXJuICpt
X2l0ZXJhdG9yOyB9CisgICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5cGU+IGdl
dCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0LCBIYW5k
bGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJm1f
aXRlcmF0b3ItPnNlY29uZC0+anNWYWx1ZSgpKSkpOyB9CiAgICAgICAgIAogICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3IrKygpIHsgKyttX2l0ZXJhdG9yOyByZXR1cm4gKnRoaXM7IH0KICAgICAg
ICAgCkBAIC05MCw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1hcF9pdGVyYXRv
ciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICAgICAgZm9yIChtYXBfaXRlcmF0b3IgcHRyID0gbV9t
YXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICBIYW5kbGVIZWFwOjpo
ZWFwRm9yKHB0ci0+c2Vjb25kKS0+ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CisgICAgICAgICAg
ICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CiAgICAgICAgIG1fbWFwLmNsZWFy
KCk7CiAgICAgfQogCkBAIC0xMDcsNjQgKzEwNiw0MiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmUoaXRlcmF0b3IgaXRlcikKICAgICB7CiAgICAgICAgIEFTU0VSVChpdGVyLm1faXRlcmF0b3Ig
IT0gbV9tYXAuZW5kKCkpOwotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSBpdGVyLm1faXRlcmF0
b3ItPnNlY29uZDsKLSAgICAgICAgQVNTRVJUKHNsb3QpOwotICAgICAgICBIYW5kbGVIZWFwOjpo
ZWFwRm9yKHNsb3QpLT5kZWFsbG9jYXRlKHNsb3QpOworICAgICAgICBXZWFrSW1wbCogaW1wbCA9
IGl0ZXIubV9pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBBU1NFUlQoaW1wbCk7CisgICAgICAg
IFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgICAgICBtX21hcC5yZW1vdmUoaXRlci5t
X2l0ZXJhdG9yKTsKICAgICB9CiAKICAgICBFeHRlcm5hbFR5cGUgZ2V0KGNvbnN0IEtleVR5cGUm
IGtleSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBl
Pjo6Z2V0RnJvbVNsb3QobV9tYXAuZ2V0KGtleSkpOwotICAgIH0KLQotICAgIEhhbmRsZVNsb3Qg
Z2V0U2xvdChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9tYXAuZ2V0KGtleSk7CisgICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6
Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJm1fbWFwLmdldChrZXkpLT5qc1ZhbHVl
KCkpKTsKICAgICB9CiAKICAgICBBZGRSZXN1bHQgYWRkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAgewogICAgICAg
ICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7
Ci0gICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgSGFuZGxlU2xv
dCBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gc2xvdDsKLSAgICAgICAgICAgIEhhbmRs
ZUhlYXA6OmhlYXBGb3Ioc2xvdCktPm1ha2VXZWFrKHNsb3QsIHRoaXMsIEZpbmFsaXplckNhbGxi
YWNrOjpmaW5hbGl6ZXJDb250ZXh0Rm9yKGtleSkpOwotICAgICAgICAgICAgSGFuZGxlSGVhcDo6
aGVhcEZvcihzbG90KS0+d3JpdGVCYXJyaWVyKHNsb3QsIHZhbHVlKTsKLSAgICAgICAgICAgICpz
bG90ID0gdmFsdWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBnbG9iYWxEYXRhLmhlYXAud2Vh
a0hlYXAoKS0+YWxsb2NhdGUodmFsdWUsIHRoaXMsIEZpbmFsaXplckNhbGxiYWNrOjpmaW5hbGl6
ZXJDb250ZXh0Rm9yKGtleSkpOworCiAgICAgICAgIC8vIFdlYWtHQ01hcCBleHBvc2VzIGEgZGlm
ZmVyZW50IGl0ZXJhdG9yLCBzbyB3ZSBuZWVkIHRvIHdyYXAgaXQgYW5kIGNyZWF0ZSBvdXIgb3du
IEFkZFJlc3VsdC4KICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChpdGVyYXRvcihyZXN1bHQuaXRl
cmF0b3IpLCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0KGl0
ZXJhdG9yIGl0ZXIsIEV4dGVybmFsVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEhhbmRsZVNs
b3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+c2Vjb25kOwotICAgICAgICBBU1NFUlQoc2xvdCk7
Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihzbG90LCB2
YWx1ZSk7Ci0gICAgICAgICpzbG90ID0gdmFsdWU7Ci0gICAgfQogCiAgICAgdm9pZCBzZXQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBLZXlUeXBlJiBrZXksIEV4dGVybmFsVHlwZSB2
YWx1ZSkKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQg
PSBtX21hcC5hZGQoa2V5LCAwKTsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAg
ICAgICAgc2xvdCA9IGdsb2JhbERhdGEuaGVhcC5oYW5kbGVIZWFwKCktPmFsbG9jYXRlKCk7Ci0g
ICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT5tYWtlV2VhayhzbG90LCB0aGlz
LCBrZXkpOwotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBzbG90OwotICAg
ICAgICB9Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPndyaXRlQmFycmllcihz
bG90LCB2YWx1ZSk7Ci0gICAgICAgICpzbG90ID0gdmFsdWU7CisgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCisgICAgICAgICAgICBXZWFrSGVhcDo6ZGVhbGxvY2F0ZShyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gZ2xvYmFs
RGF0YS5oZWFwLndlYWtIZWFwKCktPmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxs
YmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKICAgICB9CiAKICAgICBFeHRlcm5hbFR5
cGUgdGFrZShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgewotICAgICAgICBIYW5kbGVTbG90IHNs
b3QgPSBtX21hcC50YWtlKGtleSk7Ci0gICAgICAgIGlmICghc2xvdCkKKyAgICAgICAgV2Vha0lt
cGwqIGltcGwgPSBtX21hcC50YWtlKGtleSk7CisgICAgICAgIGlmICghaW1wbCkKICAgICAgICAg
ICAgIHJldHVybiBIYXNoVHJhaXRzPEV4dGVybmFsVHlwZT46OmVtcHR5VmFsdWUoKTsKLSAgICAg
ICAgRXh0ZXJuYWxUeXBlIHJlc3VsdCA9IEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9t
U2xvdChzbG90KTsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0
ZShzbG90KTsKKyAgICAgICAgRXh0ZXJuYWxUeXBlIHJlc3VsdCA9IEhhbmRsZVR5cGVzPE1hcHBl
ZFR5cGU+OjpnZXRGcm9tU2xvdChjb25zdF9jYXN0PEpTVmFsdWUqPigmaW1wbC0+anNWYWx1ZSgp
KSk7CisgICAgICAgIFdlYWtIZWFwOjpkZWFsbG9jYXRlKGltcGwpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIApAQCAtMTgxLDkgKzE1OCw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNv
bnRleHQpCiAgICAgewotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSBtX21hcC50YWtlKEZpbmFs
aXplckNhbGxiYWNrOjprZXlGb3JGaW5hbGl6ZXIoY29udGV4dCwgSGFuZGxlVHlwZXM8TWFwcGVk
VHlwZT46OmdldEZyb21TbG90KGhhbmRsZS5zbG90KCkpKSk7Ci0gICAgICAgIEFTU0VSVChzbG90
KTsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShzbG90KTsK
KyAgICAgICAgV2Vha0ltcGwqIGltcGwgPSBtX21hcC50YWtlKEZpbmFsaXplckNhbGxiYWNrOjpr
ZXlGb3JGaW5hbGl6ZXIoY29udGV4dCwgSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21T
bG90KGhhbmRsZS5zbG90KCkpKSk7CisgICAgICAgIEFTU0VSVChpbXBsKTsKKyAgICAgICAgV2Vh
a0hlYXA6OmRlYWxsb2NhdGUoaW1wbCk7CiAgICAgfQogCiAgICAgTWFwVHlwZSBtX21hcDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjU4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAzLTI5ICBHZW9mZnJleSBH
YXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmlyc3Qgc3RlcCB0b3dhcmQgaW5j
cmVtZW50YWwgV2VhazxUPiBmaW5hbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBXZWJDb3JlIGZvciBXZWFrPFQ+IEFQSSBjaGFu
Z2VzLgorCisgICAgICAgICogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU3RyaW5nT3duZXI6OmZpbmFsaXplKTogV2UncmUgbm90IGFsbG93ZWQg
dG8gZ2V0KCkgYSBkZWFkIFdlYWs8VD4KKyAgICAgICAgYW55bW9yZSwgc28gdXNlIHRoZSBkZWJ1
Zy1vbmx5IHdhcygpIGhlbHBlciBmdW5jdGlvbiBpbnN0ZWFkLgorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjp1bmNhY2hlV3JhcHBlcik6
IERpdHRvLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmg6CisgICAgICAg
IChXZWJDb3JlOjpzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
ZWFySW5saW5lQ2FjaGVkV3JhcHBlcik6IFdlJ3JlIG5vdCBhbGxvd2VkIHRvIGdldCgpIGEgZGVh
ZAorICAgICAgICBXZWFrPFQ+LCBzbyBJIGhhZCB0byBwdXNoIGRvd24gdGhlc2UgQVNTRVJUcyBp
bnRvIFNjcmlwdFdyYXBwYWJsZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVGaWx0ZXJDb25kaXRpb246
OmFjY2VwdE5vZGUpOiBVcGRhdGVkIGZvciBub24tSGFuZGxlLW5lc3MKKyAgICAgICAgb2YgV2Vh
azxUPi4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0V3JhcHBhYmxlOjpzZXRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdFdyYXBwYWJsZTo6Y2xlYXJXcmFwcGVyKTogVXNlIHdhcygpLCBhcyBhYm92ZS4K
KwogMjAxMi0wMy0yOSAgQmVhciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CiAKICAgICAg
ICAgVXBkYXRlIENTUyBFeGNsdXNpb24gd3JhcC1mbG93IHZhbHVlcyBsZWZ0ICYgcmlnaHQgdG8g
c3RhcnQgJiBlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJX
b3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3Jh
cHBlcldvcmxkLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCB2b2lkIEpTU3RyaW5nT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlCiB7CiAgICAgSlNTdHJp
bmcqIGpzU3RyaW5nID0gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihoYW5kbGUuZ2V0KCkuYXNDZWxs
KCkpOwogICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBs
Kj4oY29udGV4dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChqc1N0cmluZywgbV93b3JsZC0+bV9zdHJp
bmdDYWNoZS5maW5kKHN0cmluZ0ltcGwpLT5zZWNvbmQuZ2V0KCkgPT0ganNTdHJpbmcpOworICAg
IEFTU0VSVF9VTlVTRUQoanNTdHJpbmcsIG1fd29ybGQtPm1fc3RyaW5nQ2FjaGUuZmluZChzdHJp
bmdJbXBsKS0+c2Vjb25kLndhcyhqc1N0cmluZykpOwogICAgIG1fd29ybGQtPm1fc3RyaW5nQ2Fj
aGUucmVtb3ZlKHN0cmluZ0ltcGwpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAs
NyBAQCBlbnVtIFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgIHsKICAgICAgICAgaWYgKGNs
ZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJzLmZpbmQoZG9t
T2JqZWN0KS0+c2Vjb25kLmdldCgpID09IHdyYXBwZXIpOworICAgICAgICBBU1NFUlQod29ybGQt
Pm1fd3JhcHBlcnMuZmluZChkb21PYmplY3QpLT5zZWNvbmQud2FzKHdyYXBwZXIpKTsKICAgICAg
ICAgd29ybGQtPm1fd3JhcHBlcnMucmVtb3ZlKGRvbU9iamVjdCk7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmgJKHJldmlzaW9uIDEx
MjU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIGlubGluZSBib29sIHNldElubGluZUNhY2hlZFdy
YXBwZXIoRE9NV3IKIHsKICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgQVNTRVJUKCFub2RlLT53cmFwcGVyKCkpOwogICAgIG5vZGUtPnNldFdy
YXBwZXIoKndvcmxkLT5nbG9iYWxEYXRhKCksIHdyYXBwZXIsIHdyYXBwZXJPd25lcih3b3JsZCwg
bm9kZSksIHdyYXBwZXJDb250ZXh0KHdvcmxkLCBub2RlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC01MSw4ICs1MCw3IEBAIGlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T00KIHsKICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgQVNTRVJUX1VOVVNFRCh3cmFwcGVyLCBub2RlLT53cmFwcGVyKCkgPT0gd3JhcHBlcik7
Ci0gICAgbm9kZS0+Y2xlYXJXcmFwcGVyKCk7CisgICAgbm9kZS0+Y2xlYXJXcmFwcGVyKHdyYXBw
ZXIpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDExMjU3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgc2hvcnQgSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uOjphY2NlcHROb2RlKAogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAKLSAgICBpZiAoIW1fZmlsdGVyLmlzT2JqZWN0KCkpCisgICAgaWYgKCFtX2ZpbHRl
ciB8fCAhbV9maWx0ZXItPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpG
SUxURVJfQUNDRVBUOwogCiAgICAvLyBUaGUgZXhlYyBhcmd1bWVudCBoZXJlIHNob3VsZCBvbmx5
IGJlIG51bGwgaWYgdGhpcyB3YXMgY2FsbGVkIGZyb20gYQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgJKHJldmlzaW9uIDExMjU3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxMSArNDUsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRXcmFwcGVyKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIsIEpTQzo6V2Vh
a0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQpCiAgICAgeworICAgICAg
ICBBU1NFUlQoIW1fd3JhcHBlcik7CiAgICAgICAgIG1fd3JhcHBlciA9IEpTQzo6UGFzc1dlYWs8
SlNET01XcmFwcGVyPihnbG9iYWxEYXRhLCB3cmFwcGVyLCB3cmFwcGVyT3duZXIsIGNvbnRleHQp
OwogICAgIH0KIAotICAgIHZvaWQgY2xlYXJXcmFwcGVyKCkKKyAgICB2b2lkIGNsZWFyV3JhcHBl
cihKU0RPTVdyYXBwZXIqIHdyYXBwZXIpCiAgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHdy
YXBwZXIsIG1fd3JhcHBlci53YXMod3JhcHBlcikpOwogICAgICAgICBtX3dyYXBwZXIuY2xlYXIo
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjU4NykKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAz
LTI5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmlyc3Qg
c3RlcCB0b3dhcmQgaW5jcmVtZW50YWwgV2VhazxUPiBmaW5hbGl6YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjcwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBmb3IgQVBJIGNoYW5n
ZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmZpbmFsaXpl
KToKKwogMjAxMi0wMy0yOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjExMjU1My4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blByb2Nlc3NDb25uZWN0aW9uLmNwcAkocmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9DRVNTKQog
CisjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU2NvcGVD
aGFpbi5oPgogI2luY2x1ZGUgIk5QUmVtb3RlT2JqZWN0TWFwLmgiCiAjaW5jbHVkZSAiTlBSdW50
aW1lT2JqZWN0TWFwLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2Vy
LmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBS
dW50aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gMTEy
NTc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVu
dGltZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lk
IE5QUnVudGltZU9iamVjdE1hcDo6ZmluYWxpemUoSlNDOjpICiB7CiAgICAgSGFzaE1hcDxOUE9i
amVjdCosIEpTQzo6V2VhazxKU05QT2JqZWN0PiA+OjppdGVyYXRvciBmb3VuZCA9IG1fanNOUE9i
amVjdHMuZmluZChzdGF0aWNfY2FzdDxOUE9iamVjdCo+KGNvbnRleHQpKTsKICAgICBBU1NFUlQo
Zm91bmQgIT0gbV9qc05QT2JqZWN0cy5lbmQoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUs
IGFzT2JqZWN0KGhhbmRsZS5nZXQoKSkgPT0gZm91bmQtPnNlY29uZCk7CisgICAgQVNTRVJUX1VO
VVNFRChoYW5kbGUsIGFzT2JqZWN0KGhhbmRsZS5nZXQoKSkgPT0gZm91bmQtPnNlY29uZC5nZXQo
KSk7CiAgICAgSlNOUE9iamVjdCogb2JqZWN0ID0gZm91bmQtPnNlY29uZC5nZXQoKTsKICAgICBt
X2pzTlBPYmplY3RzLnJlbW92ZShmb3VuZCk7CiAgICAgYWRkVG9JbnZhbGlkYXRpb25RdWV1ZShv
YmplY3QtPmxlYWtOUE9iamVjdCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAko
cmV2aXNpb24gMTEyNTc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck1hcC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvS1VSTC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL1Njb3BlQ2hhaW4uaD4KICNpbmNsdWRlIDx1
dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAo=
</data>
<flag name="review"
          id="139652"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>